Оригинал: Сергей Кокшаров

Существует несколько способов программной проверки тИЦ сайта.

Первый способ: загружать страницу Яндекс.Каталога http://search.yaca.yandex.ru/yca/cy/ch/www.telead.ru/ (сайт с архивом рекламных роликов, тиц 180) и парсить контент для определения нужного параметра с помощью регулярных выражений.

Второй способ: загружать XML документ, предназначенный для Яндекс Бара по адресу: http://bar-navig.yandex.ru/u?ver=2&url=http://telead.ru&show=1. В результате получаем ответ примерно следующего вида.

<?xml version="1.0" encoding="windows-1251" ?>
<urlinfo>
<url domain="www.telead.ru"><![CDATA[/]]></url>
<tcy rang="4" value="180"/>
<topics>
<topic title="Тема: Реклама" url="http://yaca.yandex.ru/yca/cat/Business/Marketing_and_Advertising/"/></topics>
<textinfo>

Тема: Реклама
Регион: Россия
Источник: Коллективный</textinfo>
</urlinfo>

Где параметр value тега tcy будет равен значению тИЦ.

Эти оба способа хороши, если количество проверяемых сайтов не большое. При частых запросах Яндекс может либо выдавать капчу, либо банить IP адрес на какое-то время. Однако, имеется также ещё один способ (возможно, не один).

Третий способ: использовать денежку яндекса. Например, для сайта рекламных роликов – тиц равен 180.

На первый взгляд удивительно, однако, при наличии всех кнопок-денежек, мы имеем достаточно информации, чтобы не использовать декодеры капчи и быстро определять тИЦ для сайтов.

Допустим, у вас кнопки тИЦ лежат в отдельной директории “buttons”, тогда для определения тИЦ любого сайта, можно использовать следующий PHP скрипт:

# файл с урлами сайтов для проверки (если берем сайты из файла)

$websites_file = “myurls.txt”;
# шаблон денежки яндекса
$cy_tpl = “http://yandex.ru/cycounter?%s”;
$md5_hashes = array();
$files = glob(“buttons/*.gif”);
foreach($files as $file)
{
$md5 = md5_file($file);
$name = basename($file, “.gif”);
# сохранение MD5 всех файлов в массив
# соответствие тиц и MD5 хеша
$md5_hashes[$md5] = $name;
}
$websites = file($websites_file);

foreach($websites as $site)
{
$url = str_replace(“http://”, “”, trim($site));
if (!$url) continue;
# определение имени домена
$slash_pos = strpos($url, ‘/’);
$domain = $slash_pos ? substr($url, 0, $slash_pos) : $url;
# определение пути к денежке сайта

$cy_url = sprintf($cy_tpl, $domain);
# чтение денежки с сервера яндекса
$fp = fopen($cy_url, “r”);
if ($fp)
{
$image = ‘’;
while(!feof($fp))
$image .= fread($fp, 1024);
fclose($fp);
# определение MD5 полученной картинки

$md5 = md5($image);
# а вот и искомый тиц!
$tic = $md5_hashes[$md5];
}
}

Задержку ставить не надо. Проверено на 5000 сайтах с сетевой картой 10 мб/с. Скорость проверки будет зависеть от скорости приема картинки тиц яндекса, но не менее 1 сайта в секунду.

Например, в бирже ссылок Sape на 31 янв. 2009-го года 181.822 сайта, проверить которые можно за минимум 50 часов в один поток, 5 часов в десять потоков и так далее, при увеличении скорости сети или количества потоков.

Скачать денежки Яндекса можно тут: cy.buttons.zip [258.57KB].