Писал сегодня парсер Яндекс.Маркет для одного из своих сайтов. Решил реализовать обычным способом через регэкспы 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