Парсер Яндекс.Маркет

24 октября, 2011

Писал сегодня парсер Яндекс.Маркет для одного из своих сайтов. Решил реализовать обычным способом через регэкспы HTML тэгов + Curl()

<?php
 
if (isset($title)){
 $title = $title;
 $title = str_replace(" ","%20",$title);
}
 
function getPageContent($url, $agent = false)
{
   $contentPage = '';
   $ch = curl_init();
   $user_cookie_file = $_SERVER['DOCUMENT_ROOT'].'/assets/cookies/cookies.txt';
   curl_setopt($ch, CURLOPT_HEADER, 0);
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
   curl_setopt($ch, CURLOPT_TIMEOUT, 30);
   curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");
   curl_setopt($ch, CURLOPT_URL, $url);
   curl_setopt($ch, CURLOPT_COOKIEFILE, $user_cookie_file);
   curl_setopt($ch, CURLOPT_COOKIEJAR,  $user_cookie_file);
   $contentPage = curl_exec($ch);
   curl_close($ch);
   return trim($contentPage);
}
 
$url = "http://market.yandex.ru/search.xml?text=".$title;
$content = getPageContent($url);
if ($content){
 $start_str = "<h3 class=\"b-offers__title\"><a href=\"";
 $stop_str = "\" class=\"b-offers__name\"";
 $rule = "!".$start_str."(.*?)".$stop_str."!si";
 preg_match($rule,$content,$retContent);
}
 
if ($retContent[1]){
 $content2 = getPageContent("http://market.yandex.ru".$retContent[1]);
 return $content2;
}
?>

Реализовал. Оно работает. Правда лицензию Яндекса нарушает. Но что поделать, они же свой XML еще не допилили до стостояния «взял и работает». Не под все задачи оно подходит.

Одна из задач осталась не реализованной. К сожалению или к счастью сервер с которого работает этот парсер находится в Германии. Соответственно по умолчанию он подставляет регион Бавария. А нужно Москва и московская область. Я попробовал через подстановку cookies, но вот как-то не вышло. Если кто знает решение — помогите пожалуйста.

Update: решение более не актуально, в дальнейшем для подобных парсеровы выдачи Яндекса использовал Yandex.XML

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *