sape YAP checker

By zhe Last update Dec 20, 2008 — Installed 217 times.

There are 3 previous versions of this script.

// ==UserScript==
// @name           sape YAP checker
// @namespace      http://userscripts.org/users/28106
// @include        http://*sape.ru/sites.php*
// ==/UserScript==

var loading=document.createElement("img");
loading.src="data:image/gif;base64,R0lGODlhEAAQAPIAAP///zg4OM/Pz2trazg4OISEhJ2dnampqSH/C05FVFNDQVBFMi4wAwEAAAAh/h1CdWlsdCB3aXRoIEdJRiBNb3ZpZSBHZWFyIDQuMAAh/hVNYWRlIGJ5IEFqYXhMb2FkLmluZm8AIfkECQoAAAAsAAAAABAAEAAAAzMIutz+MMpJaxNjCDoIGZwHTphmCUWxMcK6FJnBti5gxMJx0C1bGDndpgc5GAwHSmvnSAAAIfkECQoAAAAsAAAAABAAEAAAAzQIutz+TowhIBuEDLuw5opEcUJRVGAxGSBgTEVbGqh8HLV13+1hGAeAINcY4oZDGbIlJCoSACH5BAkKAAAALAAAAAAQABAAAAM2CLoyIyvKQciQzJRWLwaFYxwO9BlO8UlCYZircBzwCsyzvRzGqCsCWe0X/AGDww8yqWQan78EACH5BAkKAAAALAAAAAAQABAAAAMzCLpiJSvKMoaR7JxWX4WLpgmFIQwEMUSHYRwRqkaCsNEfA2JSXfM9HzA4LBqPyKRyOUwAACH5BAkKAAAALAAAAAAQABAAAAMyCLpyJytK52QU8BjzTIEMJnbDYFxiVJSFhLkeaFlCKc/KQBADHuk8H8MmLBqPyKRSkgAAIfkECQoAAAAsAAAAABAAEAAAAzMIuiDCkDkX43TnvNqeMBnHHOAhLkK2ncpXrKIxDAYLFHNhu7A195UBgTCwCYm7n20pSgAAIfkECQoAAAAsAAAAABAAEAAAAzIIutz+8AkR2ZxVXZoB7tpxcJVgiN1hnN00loVBRsUwFJBgm7YBDQTCQBCbMYDC1s6RAAAh+QQJCgAAACwAAAAAEAAQAAADMgi63P4wykmrZULUnCnXHggIwyCOx3EOBDEwqcqwrlAYwmEYB1bapQIgdWIYgp5bEZAAADsAAAAAAAAAAAA=";

YAP_INIT = 0;

$ = unsafeWindow.jQuery;
if(!$)
	alert("GM script need page to have jQuery");
else {
	init();
}

function init() {
  $('<div class="button_actions" style="width: 100%; margin-bottom: 10px; height: auto"><div class="lt" style="height: auto"><div class="rt" style="height: auto"><div class="lb" style="height: auto"><div id="gm-tools" style="padding-bottom: 10px; text-align: left;"></div></div></div></div></div>').insertBefore('.c26_5:first');
  $gmtools = $('#gm-tools');
  $('<div style="padding: 0 0 5px;">'+
      '<span id="gm-yap-info"></span>'+
      '<span id="gm-yap-status"></span>'+
      '<span id="gm-yap-settings">'+
        'Интервал запросов: '+
        '<input type="text" id="gm-yap-interval" value="0.3" style="width: 1.5em;" /> сек. '+
        'Пауза длинной '+
        '<input type="text" id="gm-yap-biginterval" value="5" style="width: 1.5em;" /> сек. '+
        'после '+
        '<input type="text" id="gm-yap-bigitems" value="25" style="width: 1.5em;" /> '+
        'запросов. '+
        'Только новые: '+
        '<input type="checkbox" id="gm-yap-new-only" checked  /> '+
        '<!--<button id="gm-yap-do">Пошел</button>-->'+
      '</span>'+
  '</div>').appendTo($gmtools);
  $gmtools.append('С отмеченными ');
  $('select[name=act]').clone().attr('id', 'gm-action').css('width', 'auto').appendTo($gmtools);
  $gmtools.append(' <button id="gm-action-do">Выполнить</button> <small><i>Откроется в новом окне</i></small>');
  
  GM_registerMenuCommand("check YAP",
    function(){
      interval = parseFloat($('#gm-yap-interval').val());
      biginterval = parseFloat($('#gm-yap-biginterval').val());
      bigitems = parseFloat($('#gm-yap-bigitems').val());
      new_only = $('#gm-yap-new-only').is('[checked]') ? 1 : 0;

      if (interval <= 0 || biginterval <=0 || bigitems <= 0) return false;

      check_yap(new_only, interval*1000, biginterval*1000, bigitems);

      $('#gm-yap-settings').hide();
      $('#gm-yap-status').html('<br /><small>Интервал запросов: '+interval+' сек. Пауза длинной '+biginterval+' сек. после '+bigitems+' запросов. Проверять ' + (new_only ? 'только новые' : 'все') + ' ссылки</small>');
    }
  );

  //$('#gm-yap-do').click();
  
  $('#gm-action').change(function(){
    $('select[name=act]').val($(this).val());
  });
  
  $('#gm-action-do').click(function(){
    $('form[action*=site_pages.php?site_id=]').attr('target', '_blank').submit();
  });
}


function check_yap(new_only, interval, biginterval, bigitems) {
  if (!YAP_INIT) {
    init_yap(new_only);
  }
  show_yap_status();
  if (YAP_LINKS[YAP_CHECKED])
    check_yap_link(YAP_LINKS[YAP_CHECKED], interval, biginterval, bigitems)
  else
    alert('Все ссылки проверены.');
}

function check_yap_link(link, interval, biginterval, bigitems) {
  query = String(link).replace('http://123sdfsdfsdfsd.ru/yandsearch?rpt=rad&text=', '');
  $link= $(link);
  
	$link.before(loading);
  $link.attr('checking', 1);
	GM_xmlhttpRequest({
		method: 'GET',
		url: 'http://xmlsearch.yandex.ru/xmlsearch?query='+query,
		onload: function(r){
			$data = $(r.responseText);
			if($data.find('results').length == 0) {
			 YAP_NA++;
				result = '<b style="color: #f55" title="does not exists in yandex">[n/a]</b> ';
			}
			else {
        result = '<b style="color: #5f5" title="page exists in yandex">[ok]</b> ';
        $(":checkbox", $link.parents("tr:first")).attr("checked", "checked");
			}

			$link.prev("img").remove();
			$link.before(result);
			$link.attr("checked", "1").css("display", "none");


      if (YAP_CHECKED % bigitems != 0)
        window.setTimeout(function(){ check_yap(null, interval, biginterval, bigitems); }, interval);
      else
        window.setTimeout(function(){ check_yap(null, interval, biginterval, bigitems); }, biginterval);

      YAP_CHECKED++
		}
	});
}

function show_yap_status() {
  YAP_INFO.html('Всего ссылок: '+YAP_TOTAL+'. Проверено: '+YAP_CHECKED+'. Завершено на '+Math.round(YAP_CHECKED/YAP_TOTAL*100)+'%. Отсутствуют в индексе: '+YAP_NA+' ('+Math.round(YAP_NA/YAP_CHECKED*100)+'%).');
}

function init_yap(new_only) {
  YAP_INIT = 1;
  YAP_LINKS = $('a.icon_yap[checked!=1]');
  if (new_only) {
    YAP_LINKS.each(function(i){
      if ($('.stat_ok', $(this).parents('tr:first')).length != 0) {
        YAP_LINKS = YAP_LINKS.not($(this));
      }
    });
  }
  YAP_TOTAL = YAP_LINKS.length;
  YAP_CHECKED = 0;
  YAP_NA = 0;
  YAP_INFO = $('#gm-yap-info');
}