Скрипт для проверки ссылок в индексе Яндекса.

Добавлено 22.11.2007 | Бизнес

Для оптимизаторов Sape.ru я написал один простой скрипт, благодаря которому проверка ссылок на наличие в индексе поисковой системе Яндекс заметно ускоряется. Конечно вы скажете, что в сервисе итак имеется такой сервис, кнопка YAP, но ведь покупка ссылок исчисляется не десятками и часто даже не сотнями, а тысячами ссылок. А вручную проверять каждую ссылку дело трудоемкое.

Скрипт написан на PHP, с использованием библиотеки Curl, которая позволила многопоточно собирать результаты с Яндекс.XML, т.е. скрипт полностью легален и ничего плохого от его работы ждать не следует. Для работы скрипта просто зарегистрируйте IP адрес сайта (где будет расположен скрипт) в сервисе Yandex.XML и закиньте разумеется сам php файл. Но помните об ограничении этого сервиса от Яшки – не более 1000 запросов в сутки с одного ip адреса (1 ссылка = 1 запрос). Вы конечно можете менять IP, закачивать скрипт сразу на несколько серверов, благодаря чему увеличивать количество запросов.

А вот и сам скрипт:


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=windows-1251" />
<title>Лаборатория DEKODA - Проверка страниц на наличие в индексе поисковой системы Yandex, для Sape.ru</title>
<style type="text/css">
body {
margin: 19px;
padding: 0;
font: normal 13px "Trebuchet MS";
color: #909090;
}
a {
color: #5C5C5C;
}
a:hover {
text-decoration: none;
}
td {
font-size: 13px;
color: #AC4A4A;
background-color:#ffffff;
text-align: center;
}
</style>
</head>
<body>
<?php
import_request_variables("gP", ""); // Для серверов где в PHP отключены глобальные переменные, т.е. GET и POST
if(isset($get_urls)){
// Засекаем время
$start_time = microtime();
$start_array = explode(" ",$start_time);
$start_time = $start_array[1] + $start_array[0];
set_time_limit(0); // Убираем ограничение на время выполнение скрипта
// Скрипт многопоточного получения результатов через Curl
function multi_read($connomains, $max_threads){
$mh = curl_multi_init();
foreach ($connomains as $i => $url) {
$conn[$i] = curl_init($url);
curl_setopt($conn[$i], CURLOPT_RETURNTRANSFER, 1);
curl_multi_add_handle ($mh,$conn[$i]);
}
do {
$mrc = curl_multi_exec($mh, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);
while ($active and $mrc == CURLM_OK) {
if (curl_multi_select($mh) != -1) {
do {
$mrc = curl_multi_exec($mh, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);
}
}
if ($mrc != CURLM_OK) {
print "Curl multi read error $mrc\n";
}
foreach ($connomains as $i => $url) {
if (($err = curl_error($conn[$i])) == '') {
$res[$i]=curl_multi_getcontent($conn[$i]);
} else {
print "Curl error on handle $i: $err\n";
}
curl_multi_remove_handle($mh,$conn[$i]);
curl_close($conn[$i]);
}
curl_multi_close($mh);
return($res);
}
///////////////////////////////
$get_urls = explode("\r\n", $get_urls); // Разбиваем данные на массив
$ii = 0;
for ($i=0;$i<count($get_urls);$i++) {
$url_data = $get_urls[$i];
$url_rev = strrev($url_data);
$url_rev_del = substr($url_rev,0,1);
if($url_rev_del == "/"){$bdel = strlen($url_data)-1; $url_data = substr($url_data,0,$bdel);}
$url = str_replace("http://", "", $url_data); // Убираем http://
$url = str_replace("www.", "", $url); // Убираем www.
$query = "url=\"$url\" | url=\"www.$url\""; // Составляем запрос
$request[$ii] = "http://xmlsearch.yandex.ru/xmlsearch?query=".urlencode($query)."&groupby=attr%3Dd.mode%3Ddeep.groups-on-page%3D10.docs-in-group%3D1"; // Составляем готовый GET запрос
$ii++;
}
$yadataxml = multi_read($request, count($request)); // Используем нашу функцию мультипоточного чтения URL адресов, получаем данные со всех ссылок.
// Останавливаем и выводим время.
$end_time = microtime();
$end_array = explode(" ",$end_time);
$end_time = $end_array[1] + $end_array[0];
$time = $end_time - $start_time;
echo "<div align=\"center\" style=\"font-size:11px;\">Результаты получены через: $time сек.</div>
<br />
<table cellspacing=\"1\" cellpadding=\"4\" bgcolor=\"#D1D1D1\" width=\"450\" align=\"center\" border=\"0\">
<tr>
<td>
<strong>
Страницы которых нет в индексе Яндексa
</strong>
</td>
</tr>";
for ($i=0;$i<count($get_urls);$i++) {
$xmlreading = simplexml_load_string($yadataxml[$i]); // Разбиваем XML
$code_server = $xmlreading->response->error["code"]; // Получаем код Yandexa. 15 - ничего ненайденно. 2 - Все что надо, найденно.
$that_domain = $xmlreading->response->results->grouping->group->doc->domain; // Для проверки предыдущего проверяем, получен ли домен сайта
if($code_server == "15" && $that_domain == ""){
echo "<tr><td>".$get_urls[$i]."</td></tr>\n\r";
}
}
echo "</table>
<br /><br />
<div align=\"center\" style=\"font-size:13px;\">Созданно в <a href=\"http://dekoda.net\">Лаборатории DEKODA</a>, обсуждения в <a href=\"http://blog.dekoda.net\">Блоге.Dekoda.net</a></div>";
}
else{
?>
<form action="?" method="post">
<table cellspacing="1" cellpadding="4" width="450" align="center" border="0">
<tr>
<td style="color: #00690E;">
<strong>
Проверка страниц на наличие в индексе поисковой системы <font color=red>Yandex</font>
</strong>
</td>
</tr>
<tr>
<td style="color: #909090;font-size:11px;">
<strong>
Вставляем сайты из Sape:</strong>
<br />
<textarea name="get_urls" cols="60" rows="10"></textarea>
</td>
</tr>
<tr>
<td><input type="submit" value="Начать проверку"></td>
</tr>
</table>
</form>
<br /><div align="center" style="font-size:11px;">Технические требования: PHP (5.1.0 и выше) с CURL и Libxml (2.6.0 и выше). <br />Для работы скрипта необходимо зарегистрировать IP адрес сервера где расположен скрипт в <a href="http://xml.yandex.ru" mce_href="http://xml.yandex.ru">XML.Yandex</a></div><br />
<div align="center" style="font-size:13px;">Созданно в <a href="http://dekoda.net" mce_href="http://dekoda.net">Лаборатории DEKODA</a>, обсуждения в <a href="http://blog.dekoda.net" mce_href="http://blog.dekoda.net">Блоге.Dekoda.net</a>. Спасибо <a href="http://kvorum.biz" mce_href="http://kvorum.biz">Snowman</a></div>
<?php
}
?>
</body>
</html>

Технические требования: PHP (5.1.0 и выше) с CURL и Libxml (2.6.0 и выше). Почему они такие критичные? Да потому что скрипт нацелен на максимальное быстродействие при проверки даже огромного количества ссылок.

Инструкция использования:

1. Проверить какая версия PHP стоит на Вашем сервере, вам требуется 5.1.0 и выше. Так же проверьте имеются ли подключенные библиотеки: Curl и LibXml (функция phpinfo()).
2. Если все окей, сохраняем код, написанный выше, в файл с любым называнием, но с расширением .php
3. Закачиваем этот файл на сервер.
4. Регистрируем IP Вашего сервера в сервисе Yandex.XML. И смотрим количество запросов, должно быть 0, если больше, то значит этот IP уже кем то используется.
5. Экспортируем адреса ссылок: заходим в меню Sape.ru -> Оптимизатору -> Мои проекты -> Ваш проект -> Страница, которую продвигаете -> Ссылки.
6. Там нажимаем на “Экспортировать в TXT УРЛы всех страниц, на которых ссылки уже стоят” и сохраняем полученный TXT файл.
7. Теперь вставляем полученные ссылки в форму скрипта и нажимаем “Начать проверку”.
8. Будут выведены URL адреса которых нет в индексе поисковой системы Yandex.