SAPE: проверка страниц в Yandex

При добавлении новых сайтов для продажи ссылок SAPE индексирует все страницы, на которых установлен SAPE-код. При этом в список страниц попадают и те, что не проиндексированы Яндексом, а значит, такой сайт, скорее всего, не пройдет модерацию. Особенно это касается сайтов с большим числом страниц.

Сам SAPE не умеет автоматически исключать подобные страницы (глупо с их стороны). В сети есть несколько скриптов и программок, с помощью которых можно отсеить «плохие» страницы, но мне они чего-то не приглянулись (один платный, второй не заработал :)), так что я написал свой собственный. Его можно запустить как на локальной машине, так и оставить где-нибудь на хостинге, запустив по расписанию.

Чтобы Яндекс не забаннил, в скрипте есть ограничение на количество последовательных проверок. Если, допустим, вы запускаете его каждую минуту, можно ограничить число одновременных проверок 2-4 страницами (в скрипте стоит 2).

На вход скрипту подается файл, в котором перечисленны все страницы, найденные SAPE (его можно скачать с самого SAPE).

<?php
  function getUrlContents($url) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_VERBOSE, 0);
    $data = curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    $contentType = curl_getinfo($ch, CURLINFO_CONTENT_TYPE);
    curl_close($ch);

    return array($httpCode, $data, $contentType);
  }

  function check($url) {
    $ya = "http://www.yandex.ru/yandsearch?rpt=rad&text=".
        urlencode("url=\"$url\" | url=\"www.$url\"");
    echo "Request $ya\n\n";
    list($code, $data, $contentType) = getUrlContents($ya);
    $data = mb_convert_encoding($data, 'windows-1251', 'utf-8');
    return preg_match('/Искомая комбинация слов нигде не встречается/', $data);
  }

  $home = './';

  if (file_exists($home.'pages.ser'))
    $pages = unserialize(file_get_contents($home.'pages.ser'));
  else 
    $pages = file($home.'site_pages.xls');

  $log = fopen($home.'pages.log', 'a');
  for($i = 0; $i < 2; $i++) {
    $page = preg_replace('/\/?\r?\n?$/', '', array_shift($pages));
    $url = substr($page, 7, strlen($page) - 7);
    echo 'Check '.$url.' ';
    if (check($url)) {
      fwrite($log, $page."\n");
      echo "missing\n";
    } else
      echo "exists\n";
  }
  fclose($log);

  $f = fopen($home.'pages.ser', 'w');
  fwrite($f, serialize($pages));
  fclose($f);
?>

Как вы уже, наверно, поняли, страницы, которые надо удалить из SAPE, соберутся в файле pages.log. Да, чтобы все заработало, нужно сохранить скрипт в файл с кодировкой windows-1251 или подправить строку, которая с яндекса получает данные.

Делать из этого сервис сейчас нет времени, но в будущем, может быть :).

Будут вопросы, спрашивайте в комментариях.

3 комментария:

Stas Davydov комментирует...

Вчера я этот скрипт стартанул на одном особенно большом сайте. Вот уже меньше трети страниц осталось проверить :)

Анонимный комментирует...

У яндекса сменился синтаксис, теперь надо убрать пробелы вокруг | в строке:

urlencode("url=\"$url\" | url=\"www.$url\"");

Полезный скриптик, спасибо :) Если непротив выложу у себя

Stas Davydov комментирует...

Спасибо за дополнение!

Конечно, не против :)