Используем CURL (php) практика: 20 последних запросов пользователей Яндекса


В одном из блогов видел вопрос, одной из сооставляющей вопроса как раз и было как получить 20 последних запросов пользователей Яндекса. Вот и получился из этого вопроса небольшой урок.

Используем CURL (php) практика: 20 последних запросов пользователей Яндекса

У Яндекса есть сервис, который показывает 20 последних запросов пользователей Яндекса: stat.yandex.ru/queries/last20.xml. Все было бы хорошо если бы не желание Яндекса в ограничении использования своих материалов. Говоря конкретнее, при запросе данной станицы сервис сообщал о 404 ошибке. После нескольких экспериментов стало понятно, что при первом запросе, если не были переданы COOKIES Яндекс выдает 404 ошибку и передает COOKIES. И если в повторном запросе передать полученные COOKIES, то мы с успехом получаем желаемое.

Ну вот собственно и код:

  1. <?php
  2.  $ch = curl_init();                                  
  3.  curl_setopt($ch, CURLOPT_URL, 'stat.yandex.ru/queries/last20.xml');
  4.  curl_setopt($ch, CURLOPT_HEADER, true);
  5.  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  6.  curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
  7.  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
  8.  curl_setopt($ch, CURLOPT_USERAGENT, 'PHP Bot (http://blog.yousoft.ru)');
  9.  $data = curl_exec($ch);
  10.  if (preg_match('|Set-Cookie: yandexuid=(.*?)|si',$data,$res)){
  11.   curl_setopt($ch, CURLOPT_COOKIE, "yandexuid={$res[1]}");
  12.   $data = curl_exec($ch);
  13.   $data=iconv('utf-8', 'cp1251//IGNORE', $data);
  14.   if (preg_match_all('|<a href="http://www.yandex.ru/yandsearch\?text=.*?" target="_blank">(.*?)</a> \((\d*?)\)|si',$data,$res)){
  15.    foreach($res[1] as $key=>$value){
  16.     echo "{$res[1][$key]} — {$res[2][$key]}\n";
  17.    }
  18.   }
  19.  }
  20. ?>
Хотите узнать: «Зачем при оптимизации сайта его нужно вносить в Яндекс-каталог?». Пройдите по ссылке и вы узнает ответ на этот и многие другие вопросы.

Небольшие пояснения. С 1-9 строчки мы инициализируем CURL и выполняем запрос, в 4 строке мы указываем, что хотим получить и заголовки ответа.

В 10 строке находим нужный нам COOKIES. В 11 стороке устанавливаем COOKIES для передачи в следующем запросе — строка 12.

В 13 строке конвертируем из кодировки UTF-8 в кодировку cp1251. Мне просто удобнее работать с кодировка cp1251.

14 строка отвественна за нахождение самих запросов и колличества найденных страниц для этого запроса.

Ну и наконец строки 15-17 выводят найденные запросы. Вот результат работы данного скрипта:

лучший туроператор по италии - 1067156
девочка из прошлого - 5700722
qip 2009 - 2737415
фото из фильма брат - 6345491
план текстуры потолков - 95409
чудаки смотреть онлайн - 593224
contact денежные переводы - 11580311
отдых на острове искья - 125951
брачное чтиво 2011 - 31142
Bluesystem.ru - 16041
Samsung MW 712 BR - 20576
обьем шара - 3520724
датинг - 3447785
deus ex invisible war - 305819
Наталья Рычкова - 52426
сделать аватарку - 3116229
муллагалиева значение фамилии - 334
save в контакте - 2203962
фильм бархатные ручки - 12132
задняя крышка S5230 красная - 1492

Похожие записи:

Tags: , , , ,

2 комментария to “Используем CURL (php) практика: 20 последних запросов пользователей Яндекса”

  1. Спасибо за скрипт! Отличное решение! 🙂
    Пойду пробовать…

  2. Андрей:

    Отличная вещь, только не могу запустить )))
    Подскажите, плиз, что в Вашем коде добавить/убрать, или что допилить в моих мозгах, чтобы скрипт заработал на Денвере (или опенсервере, или ксампе).

Leave a Reply