Форум SAPE.RU

Форум SAPE.RU (http://forum.sape.ru/index.php)
-   Общие вопросы оптимизации (http://forum.sape.ru/forumdisplay.php?f=33)
-   -   [php] Определение списка проиндексированных Яндексом страниц. (http://forum.sape.ru/showthread.php?t=15451)

lazutov 10.07.2008 20:00

[php] Определение списка проиндексированных Яндексом страниц.
 
Здравствуйте.
Для этих целей я использовал (и использую)такой скрипт:
Код:

<?

echo '<form method=post><input size="30" type="text" name="site" value=""> <input type="submit" value="OK :)">  </form>';
function rhost($rhost){
$out='';
$part='';
while(strpos($rhost,'.')!==false){
 $part=substr($rhost,0,strpos($rhost,'.'));
 $rhost=substr($rhost,1+strpos($rhost,'.'));
 $out='.'.$part.$out;
}
$out=$rhost.$out;
  return $out;
}

function pget($url){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);

curl_setopt($ch, CURLOPT_USERAGENT, "User-Agent=Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14");
curl_setopt($ch, CURLOPT_COOKIE,"YX_SEARCHPREFS=favicons:1,lang:all,ton:1,banners:,search_form:topbot,numdoc:50,target:_blank,desc:sometimes,lr:,wstat:,t:2,family:; path=/; expires=Friday, 31-Dec-10 23:59:59 GMT; domain=.yandex.ru;") ;
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$ret=curl_exec($ch);
curl_close($ch);
return $ret;
}

function sget($site){
$flag=true;
$page=0;

$counter=0;
//echo '<textarea name="list" cols="40" rows="25">';
 while($flag===true){
 $out='';
  $res=pget('http://yandex.ru/yandsearch?p='.$page.'&pag=u&site='.$site.'&lang=ru&rd=0&text=rhost%3D%22'.rhost($site).'%22|rhost%3D%22'.rhost($site).'.*%22');
  preg_match_all('!<span style="color:#060;">(.*?)&nbsp;&middot;&nbsp;!si',$res,$urls);

  foreach ($urls[1] as $i) {
    $result[$counter]=str_replace("\n","",$i);
  $counter++;
    }

  $page++;
  if (strpos($res,'/yandsearch?p='.$page.'&pag=u')===false) {$flag=false;}

  }

return $result;
}

if (isset($_POST['site'])){
 $site=$_POST['site'];

$pages=sget($site);
sort($pages);
reset($pages);
echo "<pre>";
foreach ($pages as $i) { echo $i."\n";}
echo "</pre>";

}
  echo $page;
?>

Думаю скрипт будет полезен.
PS этот-же код только с коментариями. http://lazutov.ru/tools/ycheck/

Crudelis 10.07.2008 20:09

Спасибо классный скрипт вот только одна проблемка если сайта нет в индексе то выдаёт ошибки скирпт

Добавлено через 1 минуту
Цитата:

Warning: sort() expects parameter 1 to be array, null given in ***** on line 57

Warning: reset(): Passed variable is not an array or object in***** on line 58


Warning: Invalid argument supplied for foreach() in /****** on line 60
Такие ошиби если сайта нет в индексе

lazutov 10.07.2008 20:30

Вы знайте: мое отношение к этому таково: скрипт не публичный, свою функцию -опредилить он выполняет.
@sort(..) @reset(..) уберет симптомы ошибки(но не исправит их)
Для foreach поможет проверка is_array(http://ru2.php.net/manual/ru/function.is-array.php)
или где-то в начале скрипта $pages=array();
Спасибо

Wink 10.07.2008 21:00

Чем мне поможет первая тысяча страниц в индексе, если у меня их там 12 тысяч? А с подкаталогами скрипт не умеет работать.

lazutov 10.07.2008 21:07

Покажите пример запроса, чтобы получить с подкаталогами. Постараюсь сделать


Часовой пояс GMT +3, время: 02:41.

Работает на vBulletin® версия 3.8.7.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
SAPE.RU — система купли-продажи ссылок с главных и внутренних страниц сайтов.