Здравствуйте!
Мне нужен скрипт который будет выводить на страницу тИЦ сайта (вот думаю ка это сделать).
Кто знает как работают такие сервисы как pr-cy.ru?
Вот мои размышления:
PHP-скрипт открывает страницу (например: http://search.yaca.yandex.ru/yca/cy/ch/site.ru), считывает построчно (записывает в массив каждую строку) и находит строку с следующим содержимым: "<b>Индекс цитирования (тИЦ) ресурса 30</b>", отрезает все лишнее и оставляет "30".
Я прав? Или они работают как-то по другому?
Но тут возникает другой вопрос: Что если разработчики Яндекса захотят изменить дизайн или строку "<b>Индекс цитирования (тИЦ) ресурса 30</b>", тогда тИЦ сайта будет равно "".
1. scar - 08 Ноября, 2008 - 08:46:03 - перейти к сообщению
2. VipRaskrutka - 08 Ноября, 2008 - 14:55:29 - перейти к сообщению
scar, так у тебя скрипт получения будет в одном месте?Если яндекс сменит - так и тебе не проблема подправить в одном месте код. + кешируй цифру, чтоб не дергать лишний раз яндекс, чтоб не забанил ip с которогго идут запросы...
3. Furax - 09 Ноября, 2008 - 05:17:55 - перейти к сообщению
Вряд ли серьёзные люди станут парсить эту страницу, рассчитанную на людей, а не ботов... Но если всё же парсить - да, надо кэшировать. По поводу поиска у Яндекса было ограничение, насколько я помню, в 1000 запросов в сутки с одного IP (т. е. считай, если хостинг бесплатный - ловить нечего), за тИЦем, скорее всего, тоже следят.
4. scar - 11 Ноября, 2008 - 03:50:05 - перейти к сообщению
Я в этом не силен, по этому вопрос может показаться глупым.
Как кэшировать? Есть какие-то статьи где я мог бы узнать о этом "хитром" деле?)
Как кэшировать? Есть какие-то статьи где я мог бы узнать о этом "хитром" деле?)
5. Furax - 11 Ноября, 2008 - 04:32:25 - перейти к сообщению
Кэшируют обыно так: при первом запросе результат сохраняется в файл или базу данных, и в течение некоторого времени с момента этого сохранения (время сохранения записывается, а затем сравнивается с текущим) при необходимости доступа к тем данным, что были кэшированы, вместо обращения к серверу происходит чтение ранее сохранённых данных. Когда же проходит время, за которое данные могут устареть, при очередном запросе данные кэшируются заново, перезаписывая старую сохранённую версию.
О реализации этих алгоритмов статей вроде бы хватает. Останутся вопросы - задавай!
О реализации этих алгоритмов статей вроде бы хватает. Останутся вопросы - задавай!
6. defenderyk - 11 Ноября, 2008 - 04:39:33 - перейти к сообщению
именно это я и хочу получить с парсингом погоды и курсов. при чем было бы хорошо, если через базу было бы. но пока для меня реализация этого всего не очень понятна. Мне легче сам алгоритм составить как должно работать, чем реализовать это в коде.
7. scar - 11 Ноября, 2008 - 06:36:22 - перейти к сообщению
Furax пишет:
Кэшируют обыно так: при первом запросе результат сохраняется в файл или базу данных, и в течение некоторого времени с момента этого сохранения (время сохранения записывается, а затем сравнивается с текущим) при необходимости доступа к тем данным, что были кэшированы, вместо обращения к серверу происходит чтение ранее сохранённых данных. Когда же проходит время, за которое данные могут устареть, при очередном запросе данные кэшируются заново, перезаписывая старую сохранённую версию.
Огромное спасибо за помощь!
8. scar - 03 Декабря, 2008 - 02:57:23 - перейти к сообщению
Нашел статью как парсить тИЦ:
http://www.zarublem.su/pedia/36.html
Ваше мнение. Забанит ли меня Яша за такие дела?
P.S. Хочу создать парсинг для своего каталога сайтов. По этому прийдется обращаться не один раз в день (даже если кэшировать)
Цитата:
До недавнего времени для определения ТИЦ парсил страницу bar-navig.yandex.ru. Но теперь данный адрес отказывается выдавать информацию о сайтах не присутствующих в Яндекс.Каталоге. Даже не знаю как это объяснить, наверное снова их заморочки.
Как известно есть еще один адресок который дай бог выдает такую инфу. Вот собственно и он search.yaca.yandex.ru. Правда первый был более удобнее, так как выдавал только лиш цифры и информацию о том в какой категории находитса тот или иной сайт, что в свою очередь довольно сильно облегчает парсинг и снижает нагрузку и ненужный трафик.
Но куда в наше время деваться? Будем парсить что есть. В этом посте хочу привести очень полезную функцию для определение ТИЦа. А вы уже сами решите куда её использовать
Собственно она:
Расскажу по порядку. Во первых парсим мы нужный адресок, и обязательно меняем кодировку. Возможно на вашем сервере этого не понадобитса, но если не будет определятся, убираем коммент echo $file; для отладки. Видем каракули? Убираем функцию iconv : )
Первое что мы проверяем, есть ли вообще ТИЦ у проекта. Далее ветвление определяем, стоит ли узнавать точное значение, если переменная равна 0 то не стоит : ) Ну и если первым способом определить не выходит, используем второй.
Вот и все. Конечно функция довольно грузанутая, но результат стоит этого.
Как известно есть еще один адресок который дай бог выдает такую инфу. Вот собственно и он search.yaca.yandex.ru. Правда первый был более удобнее, так как выдавал только лиш цифры и информацию о том в какой категории находитса тот или иной сайт, что в свою очередь довольно сильно облегчает парсинг и снижает нагрузку и ненужный трафик.
Но куда в наше время деваться? Будем парсить что есть. В этом посте хочу привести очень полезную функцию для определение ТИЦа. А вы уже сами решите куда её использовать
Собственно она:
CODE:
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;
}
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;
}
Расскажу по порядку. Во первых парсим мы нужный адресок, и обязательно меняем кодировку. Возможно на вашем сервере этого не понадобитса, но если не будет определятся, убираем коммент echo $file; для отладки. Видем каракули? Убираем функцию iconv : )
Первое что мы проверяем, есть ли вообще ТИЦ у проекта. Далее ветвление определяем, стоит ли узнавать точное значение, если переменная равна 0 то не стоит : ) Ну и если первым способом определить не выходит, используем второй.
Вот и все. Конечно функция довольно грузанутая, но результат стоит этого.
http://www.zarublem.su/pedia/36.html
Ваше мнение. Забанит ли меня Яша за такие дела?
P.S. Хочу создать парсинг для своего каталога сайтов. По этому прийдется обращаться не один раз в день (даже если кэшировать)
9. yura3d - 03 Декабря, 2008 - 17:52:01 - перейти к сообщению
scar пишет:
Ваше мнение. Забанит ли меня Яша за такие дела?
P.S. Хочу создать парсинг для своего каталога сайтов. По этому прийдется обращаться не один раз в день (даже если кэшировать)
P.S. Хочу создать парсинг для своего каталога сайтов. По этому прийдется обращаться не один раз в день (даже если кэшировать)
За частые и многочисленные обращения Яндекс безусловно забанит IP, с которого эти запросы поступают (в данном случае IP сервера, на котором расположен Ваш сайт). Тоже самое сделает и Гугл, и многие другие сервисы и службы. Варианты решения - кешировать результаты и использовать прокси при частых обращениях
10. scar - 05 Декабря, 2008 - 11:43:31 - перейти к сообщению
Как использовать прокси на сервере?
Возможно ли это сделать с помощью PHP?
Возможно ли это сделать с помощью PHP?