Определение Яндекс Тиц и присутствие в Яндекс каталоге

Приведено два варианта определения ТИЦ. Первая функция getTCY работает по принципу Yandex.Bar. Вторая, yandex_tic, делает запрос к яндекс каталогу и разбирает получившуюся страницу. Она была написана, на основе анализа кода выдаваемого Яндексом.

Определение ТИЦ с помощью запроса Yandex-Bar

$content = file_get_contents('http://bar-navig.yandex.ru/u?ver=2&show=32&url='.$url.");
preg_match("/value=\"(.\d*)\"/", $content, $match);
$cy=$match[1];

Еще один вариант с использованием fopen для URL:

function getBarCY($_url) {
  $_uri = "http://bar-navig.yandex.ru/u?ver=2&url=".urlencode("http://".$_url)."&show=1";
  $fd = @fopen($_uri, "r");
  if ($fd) {
    while ($buffer = fgets($fd, 4096)) $haystack.=$buffer;
    fclose($fd);
    preg_match("/<tcy rang=\"(.*)\" value=\"(.*)\"\/>/isU",
      $haystack,$cy);
    return (int) $cy[2];
  } else return 0;
}

// Пример:
// echo getBarCY("htmlweb.ru");

Определение ТИЦ с помощью разбора страницы search.yaca.yandex.ru

Если рессурс не описан в каталоге ищется следующая последовательность:

<p><www.htmlweb.ru>: ресурс не описан в Яндекс.Каталоге</p>
<p class="errmsg">
<b>Индекс цитирования (тИЦ) ресурса — 200</b>

Если описан, код, выдаваемый Яндексом будет следующий:

<tr valign="top">
<td class="current" valign="middle"><img border="0" height="25" width="28" alt="" src="http://img.yandex.net/i/arr-hilite.gif"></td>
<td align="right" valign="middle" width="20">63.</td>
<td width="*" valign="middle">
<a href="http://www.gorod.ru/">"Город-инфо" - веб-интеграция и автоматизация</a>
<div>Управленческий консалтинг, разработка ERP-систем, программная интеграция, веб-консалтинг и дизайн. Описание продуктов. Публикации. Контакты.</div>
</td>
<td align="right">850</td>
</tr>
...

<b>Перейти на страницу</b> <a href="http://yaca.yandex.ru/yca/tungrp/cat/Computers/Internet/Web_Development/Design/3.html">каталога</a>

Проанализировав код ответа Яндекса, напишем следующий парсер:

function getTCY($url)
{
  //считываем XML-файл с данными
  $xml = file_get_contents('http://bar-navig.yandex.ru/u?ver=2&show=32&url='.$url);

  //если XML файл прочитан, то возвращаем значение параметра value
  //иначе возвращаем false - ошибка
  return $xml ? (int) substr(strstr($xml, 'value="'), 7) : false;
}


function yandex_tic($url){
  $file=file_get_contents("http://search.yaca.yandex.ru/yca/cy/ch/$url/");
  if(preg_match("!-\s+([0-9]{0,8})<\/b>!is",$file,$ok)){
        // сайт не в каталоге.
            $str=$ok[1];
        }
  else if(preg_match("!<td class=\"current\" valign=\"middle\">(.*?)</td>\n</tr>!si", $file, $ok)){
        if(preg_match("!<td align=\"right\">(.*?)</td>\n</tr>!si", $ok[0], $str)){
        // сайт в каталоге.
                    $str=$str[1];
                } else {
                    $str=0;
                }
        }
        else {
            $str=0;
        }

return trim($str);
}

//пример использования
echo 'ТИЦ:'.getTCY('http://www.htmlweb.ru').'<br>';
echo 'Я: '.yandex_tic("www.htmlweb.ru").'<br>';
http://www.htmlweb.ru ТИЦ:200 Я: не в каталоге! http://www.gorod.ru ТИЦ:800 Я: в каталоге!

Развивая эту идею, вы можете получать со страниц Яндекса любые параметры. Но учтите, если поставите на "поток" - Яндекс вас забанит по IP.

Еще один вариант получения ТИЦ парсингом:

function yandex($url){
global $set;

$file=file_get_contents("http://search.yaca.yandex.ru/yca/cy/ch/$url/");
$file=iconv("UTF-8", "windows-1251", $file);
///echo $file;
//Определение ТИЦ
$tica=preg_match("!ресурса меньше (.*?).!si",$file,$ok);
$tic=$ok[1];
if (trim($tic)=='10') $tic='0';
if ( trim($tic)!='0' ) {
    $tica=preg_match("!ресурса - (.*?)!si",$file,$ok);
    $tic=$ok[1];
    }
if ( trim($tic)=='' ){
    $file=file_get_contents("http://bar-navig.yandex.ru/u?ver=2&show=32&url=http://$url");
        //Определение ТИЦ
        $tica=preg_match("!value=\"(.*?)\"!si",$file,$ok);
        $tic=$ok[1];
        }
return $tic;
}

Во-первых, парсим нужный адрес и меняем кодировку. Первое, что мы проверяем, есть ли вообще ТИЦ у домена. Далее определяем, стоит ли узнавать точное значение, если переменная равна 0, то не стоит. Ну, и если первым способом определить не выходит, используем второй.


.