EOMY.NET на главную
|
EOMY.NET Хостинг EOMY.NET: Форум поддержки
|
|
[php] Определение списка проиндексированных Яндексом страниц
|
| Автор |
Сообщение |
lazutov $a ||= 5;


Зарегистрирован: 30.04.2007 Сообщения: 2089
12066 
|
Добавлено: Чт, 10 Июл, 2008 16:04 Заголовок сообщения: [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;">(.*?) · !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/ _________________ lazutov.ru - блог, Lwhois - Удобный whois для windows | NameIntelligence -все будет... Зимой... |whois-сервис с дополнительными возможностями
Регистрация доменов RU(3 регистратора, прямые договора)-150р и дешевле - в ЛС |
|
| Вернуться к началу |
|
 |
zos Хостинг — это наше всё!

Зарегистрирован: 18.05.2007 Сообщения: 273
7611 
|
Добавлено: Чт, 10 Июл, 2008 16:55 Заголовок сообщения: |
|
|
нет ли скрипта на php, который определяет позицию сайта через Яндекс.XML? _________________ лекции,шпаргалки,методички |
|
| Вернуться к началу |
|
 |
lazutov $a ||= 5;


Зарегистрирован: 30.04.2007 Сообщения: 2089
12066 
|
|
| Вернуться к началу |
|
 |
lazutov $a ||= 5;


Зарегистрирован: 30.04.2007 Сообщения: 2089
12066 
|
|
| Вернуться к началу |
|
 |
zos Хостинг — это наше всё!

Зарегистрирован: 18.05.2007 Сообщения: 273
7611 
|
|
| Вернуться к началу |
|
 |
Alek$ $a ||= 5;


Зарегистрирован: 24.11.2007 Сообщения: 820
19477 
|
Добавлено: Пн, 14 Июл, 2008 05:59 Заголовок сообщения: |
|
|
Я бы чуток переписал вот этот кусок кода:
| Код: | while(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;">(.*?) · !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) {break;}
}
|
На мой взгляд, такой код чуток проще для восприятия  _________________ Самая страшная ошибка - это ошибка без видимых причин и конкретных последствий.
phpBB3 [db_update.php generator]
phpBB3 [Russian]
Антисоциальный блог |
|
| Вернуться к началу |
|
 |
Веденин $a ||= 5;


Зарегистрирован: 17.05.2007 Сообщения: 872 Откуда: Самара 14819 
|
Добавлено: Ср, 16 Июл, 2008 06:22 Заголовок сообщения: |
|
|
По моему следующий код чуть чуть по проще вашего
| Код: | <?php
$psite = 'vedenin.ru';
$pstr = file_get_contents("http://yandex.ru/yandsearch?site=$psite&date=&text=&spcctx=notfar&zone=all&wordforms=all&lang=all&within=0&from_day=&from_month=&from_year=&to_day=16&to_month=7&to_year=2008&mime=all&rstr=&ds=&numdoc=10");
$pstr1 = trim(substr($pstr,strpos($pstr,'<title>')+44));
echo substr($pstr1,0,strpos($pstr1,' '));
?> |
_________________ Тематические поисковые системы Рунета: Танцевальная, программиста, поиск книг, спортивная, энциклопедическая, поиск музыки и видео и много других |
|
| Вернуться к началу |
|
 |
lazutov $a ||= 5;


Зарегистрирован: 30.04.2007 Сообщения: 2089
12066 
|
Добавлено: Ср, 16 Июл, 2008 06:48 Заголовок сообщения: |
|
|
Мой код определяет СПИСОК, а не количество, имитируя http://webmaster.yandex.ru/check.xml
Ваш код определяет УПОМИНАНИЯ.
про количество.
| Код: | // Кол-во проиндексированных в Яндекс страниц (с www и без)
function getIndexYa($url)
{
function ya_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;
}
$res=utf8_win(ya_pget('http://yandex.ru/yandsearch?p=0&pag=u&site='.$url.'&lang=ru&rd=0&text=rhost%3D%22'.ya_rhost($url).'%22|rhost%3D%22'.ya_rhost($url).'.*%22'));
preg_match('!(Нашлось|Нашлась)<br>(.*?)страниц!si', $res, $backPages); // забрали страницу и нашли О_О
return $backPages[2];
} |
_________________ lazutov.ru - блог, Lwhois - Удобный whois для windows | NameIntelligence -все будет... Зимой... |whois-сервис с дополнительными возможностями
Регистрация доменов RU(3 регистратора, прямые договора)-150р и дешевле - в ЛС |
|
| Вернуться к началу |
|
 |
Веденин $a ||= 5;


Зарегистрирован: 17.05.2007 Сообщения: 872 Откуда: Самара 14819 
|
Добавлено: Ср, 16 Июл, 2008 06:52 Заголовок сообщения: |
|
|
Да уже сам понял виноват
P.S. По моему в 99% случаев важно кол-во страниц, а не список, честно говоря не представляю что буду делать со списком из 3+ тыс страниц
Если цель узнать проиндексирована страница чужого сайта со своей ссылкой, то проще задать условие url = url страницы в поиске,если не проиндекстрована то яндекс не найдет ничего, результаты для своего сайта как правило не важны, так как у яндекса индексация как правило даже более избыточна (у меня максимум 1500 реальных страниц на сайте) _________________ Тематические поисковые системы Рунета: Танцевальная, программиста, поиск книг, спортивная, энциклопедическая, поиск музыки и видео и много других |
|
| Вернуться к началу |
|
 |
lazutov $a ||= 5;


Зарегистрирован: 30.04.2007 Сообщения: 2089
12066 
|
|
| Вернуться к началу |
|
 |
Веденин $a ||= 5;


Зарегистрирован: 17.05.2007 Сообщения: 872 Откуда: Самара 14819 
|
Добавлено: Чт, 17 Июл, 2008 09:35 Заголовок сообщения: |
|
|
Вот код возвращающий список проиндексированых страниц сайта,
по моему он все-таки проще Вашего :
| Код: | GetUrl('vedenin.ru',0.1);
function GetUrl($psite,$psleep)
{
$j = 0;
$pstr = "!";
while(strlen($pstr)>0){
$pstr = file_get_contents("http://yandex.ru/yandsearch?p=$j&site=$psite&date=&text=&spcctx=notfar&zone=all&wordforms=all&lang=all&within=0&from_day=&from_month=&from_year=&to_day=17&to_month=7&to_year=2008&mime=all&rstr=&ds=&numdoc=50");
while(strpos(' '.$pstr,"http://$psite")>0){
$pstr = trim(substr($pstr,strpos($pstr,"http://$psite")));
echo substr($pstr,0,strpos($pstr,'"')) . "<br>\n";
$pstr = substr($pstr,5);
}
sleep($psleep);
$j++;
}
} |
_________________ Тематические поисковые системы Рунета: Танцевальная, программиста, поиск книг, спортивная, энциклопедическая, поиск музыки и видео и много других |
|
| Вернуться к началу |
|
 |
lazutov $a ||= 5;


Зарегистрирован: 30.04.2007 Сообщения: 2089
12066 
|
|
| Вернуться к началу |
|
 |
lazutov $a ||= 5;


Зарегистрирован: 30.04.2007 Сообщения: 2089
12066 
|
|
| Вернуться к началу |
|
 |
Веденин $a ||= 5;


Зарегистрирован: 17.05.2007 Сообщения: 872 Откуда: Самара 14819 
|
Добавлено: Пт, 18 Июл, 2008 09:21 Заголовок сообщения: |
|
|
Сейчас отлавливают? Нет! Если Яндекс изменит код странички скрипт тоже работать не будет.
Тем более я думаю прокси тоже могут что то похожее использовать, так что смысла его ловить Яндексу нет,
достаточно ограничивать по ip.
Новый код скрипта:
| Код: | GetUrl('vedenin.ru/V*','vedenin.ru/',0.1);
function GetUrl($psite1,$psite,$psleep)
{
$j = 0;$pstr = "!";$tmp2="@";$z1 = 1;$z2 = 0;
while($z1>0 && $z2 != $z1){
$z2 = $z1;
$pstr = file_get_contents("http://yandex.ru/yandsearch?p=$j&site=$psite1&date=&text=&spcctx=notfar&zone=all&wordforms=all&lang=all&within=0&from_day=&from_month=&from_year=&to_day=17&to_month=7&to_year=2008&mime=all&rstr=&ds=&numdoc=50");
$z1 = strlen($pstr)>0;
while(strpos(' '.$pstr,"http://$psite")>0){
$pstr1 = trim(substr($pstr,strpos($pstr,"http://$psite")));
$tmp1 = substr($pstr1,0,strpos($pstr1,'"')) . "<br>\n";
if(strpos($tmp2,'@'.$tmp1.'@')>1) return;
echo $tmp1;
$tmp2 .= $tmp1.'@';$pstr = substr($pstr1,5);
}
sleep($psleep);
$j++;
}
} |
Первый параметр шаблон, второй адрес сайта, третий задержка в секундах перед каждой страницей.
В шаблоне можно задавать либо сайт/каталог/ можно и вида
vedenin.ru/Vide* тогда он найдет все пути начинающиеся с Vide.
[quote="lazutov"]а) искать не по URL. а по коду отданной страницы. http://site может быть много. [quote="lazutov"]
Сейчас каждый url только один раз встречается в результатах Yandex, если у вас конечно нет ссылок на гланой странице яндекса на свой сайт Потом что-то может поменятся, но тогда максимум это одна ссылка вернется несколько раз.
| lazutov писал(а): |
б) точный список дает только эмуляция rhost( ответ поддержки яндекса ) |
Какой список даст тогда этот вариант? Если все уникальные для
яндекса страницы тогда имхо этот список более нужен для раскрутки чем просто список просто проиндексированых страниц.
| Цитата: | | Вы не против, если данный код будет размешен у меня со ссылкой на |
Не против, можете поставить ссылка на all.vedenin.ru (Тематические поисковые системы Рунета)  _________________ Тематические поисковые системы Рунета: Танцевальная, программиста, поиск книг, спортивная, энциклопедическая, поиск музыки и видео и много других |
|
| Вернуться к началу |
|
 |
lazutov $a ||= 5;


Зарегистрирован: 30.04.2007 Сообщения: 2089
12066 
|
|
| Вернуться к началу |
|
 |
|
Powered by phpBB © 2001, 2005 phpBB Group
|