Доброе время. Поднимаю тему, в поисках нового опыта, а также решения наболевшей проблемы яндекс регионов. Задача: динамически изменять регион при запросах к яндексу (в целях поиска и парсинга) для различных регионов - Например Москва - region_id=213 и Екатеринбург region_id=54. Вопрос: как это можно сделать посредством cURL комбинации запросов Описание: Нужна помощь профессионалов, либо тех, у кого это получилось сделать, поскольку у меня выдает не верный вариант определения региона при запросе на region_id=213 через серию cURL запросов. Примеры: Есть быстрый способ переключить регион через url, например http://tune.yandex.ru/region/save2....p=4&text=mysql&retpath=/region/®ion_id=213 Переключит регион на Москву, и найдёт фразу 'Mysql'
Что вы понимаете под "динамически изменять"??? Все равно нужно делать несколько запросов. Так вытягивайте из любого хранилища список регионов и последовательно дергайте Яндекс. Курлом можно сделать в несколько потоков, но с Яндексом такое не пройдет.
Cron, как считаешь, если я спрашиваю как правильно создать запрос для cURLa то я могу не знать циклы, хватит себе рейтинг набивать бесполезными постами. Уточняю вопрос. Нужна правильная конфигурация curl_option чтобы сменить регион в яндексе. Я попробовал сделать, но там 3 редиректа на разные службы яндекса. Теряется где то звено в цепочке запросов и не правильный регион выдает
http://yandex.ru/yandsearch?text=%D0%BF ... par4=%2Fs1&rstr=-213 - в Москве http://yandex.ru/yandsearch?text=%D0%BF ... par4=%2Fs1&rstr=-976 - в Братске Составь таблицу кодов регионов в Яндексе - и усё.
Сори, это будет означать поиск по региону, если сайт не в региональном поиске по ничего не получится. А мне надо сменить собственно место дислокации. Есть кагбэ дефолтное местоопределение по IP, а есть ручная настройка, дак вот я хочу управлять ручной настройкой моего месторасположения.
Решил таким образом, в принципе для внутреннего использования хватает, кто захочет апгрейдить до класса с примочками для яндекса - делитесь идеями, я поддержу тему развития PHP: <?php function getYaQueryByRegion($text,$page,$regionId,$inRegion=false) { if (is_string($text)) {$text = '&text='.urlencode($text); $textAlt = '%26text%3D'.urlencode($text);} else return false; if (is_numeric($page)) {$page = 'p='.(int)$page; $pageAlt = '%26p%3D'.(int)$page;} else {$page='';$pageAlt='';} if ($inRegion===true) {$inRegion = '&rstr=-'.$regionId;$inRegionAlt='%26rstr%3D-'.$regionId;} else {$inRegion='';$inRegionAlt='';} if (is_numeric($regionId)) {$regionId = '®ion_id='.(int)$regionId;} else {$regionId='';} $url = 'http://tune.yandex.ru/region/save2.xml?fretpath=http%3A%2F%2Ftune.yandex.ru%2Fregion%2Ferror.xml&domain=yandex.ru&retpath=http%3A%2F%2Fyandex.ru%2Fyandsearch%3F'.$pageAlt.$textAlt.$inRegionAlt.'&retpath=%2Fregion%2F'.$regionId; $user_agent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; (R1 1.5))"; $user_agents = array("Mozilla/5.0 (Windows; U; Win98; en-US; rv:x.xx) Gecko/20030423 Firebird Browser/0.6", "Mozilla/5.0 (Windows; U; Win98; en-US; rv:0.9.2) Gecko/20010726 Netscape6/6.1", "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:x.x.x) Gecko/20041107 Firefox/x.x", "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:x.xx) Gecko/20030504 Mozilla Firebird/0.6", "Mozilla/5.0 (X11; U; Linux 2.4.2-2 i586; en-US; m18) Gecko/20010131 Netscape6/6.01", "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.6) Gecko/20040413 Epiphany/1.2.1", "Mozilla/4.76 [en] (X11; U; FreeBSD 4.4-STABLE i386)" ); $referers = array("http://yandex.ru/", "http://www.liveinternet.ru", "http://www.google.ru", "http://www.e1.ru", "http://www.rambler.ru" ); $ref = $referers[rand(0, 4)]; $ua = $user_agents[rand(0, 6)]; $ch = curl_init($url); curl_setopt($ch, CURLOPT_TIMEOUT , 20); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT , 10); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($ch, CURLOPT_COOKIEFILE, "cookies1.txt"); curl_setopt ($ch, CURLOPT_COOKIEJAR, "cookies1.txt"); curl_setopt ($ch, CURLOPT_AUTOREFERER, 1); curl_setopt($ch, CURLOPT_USERAGENT, $ua); curl_setopt($ch, CURLOPT_REFERER, $ref); $res = curl_exec($ch); curl_close($ch); $cook=''; if($count = preg_match_all("~Set-Cookie:\s*([^=]+)=([^\s;]+)~si", $res, $matches)) { for ($i=0; $i<$count; $i++) $cook.=$matches[1][$i].'='.$matches[2][$i].'; '; } $url = 'http://pass.yandex.ru/syncookie?name=yandex_gid&fretpath=http%3A%2F%2Ftune.yandex.ru%2Fregion%2Ferror.xml&retpath=http%3A%2F%2Fyandex.ru%2Fyandsearch%3F'.$pageAlt.$textAlt.$inRegionAlt.'&yandex_gid='.$regionId; $ch = curl_init($url); curl_setopt($ch, CURLOPT_TIMEOUT , 20); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT , 10); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_COOKIE, $cook); curl_setopt($ch, CURLOPT_COOKIEFILE, "cookies1.txt"); curl_setopt($ch, CURLOPT_COOKIEJAR, "cookies1.txt"); curl_setopt($ch, CURLOPT_AUTOREFERER, 1); curl_setopt($ch, CURLOPT_USERAGENT, $ua); curl_setopt($ch, CURLOPT_REFERER, 'http://tune.yandex.ru/region/'); $res = curl_exec($ch); curl_close($ch); $url = 'http://yandex.ru/yandsearch?'.$page.$text.$inRegion.'&yandex_gid='.$regionId; $ch = curl_init($url); curl_setopt($ch, CURLOPT_TIMEOUT , 20); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT , 10); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_COOKIE, $cook); curl_setopt($ch, CURLOPT_AUTOREFERER, 1); curl_setopt($ch, CURLOPT_COOKIEFILE, "cookies1.txt"); curl_setopt($ch, CURLOPT_COOKIEJAR, "cookies1.txt"); curl_setopt($ch, CURLOPT_USERAGENT, $ua); curl_setopt($ch, CURLOPT_REFERER,'http://pass.yandex.ru/syncookie/'); $res = curl_exec($ch); curl_close($ch); return $res; } getYaQueryByRegion('das',1,213,true); // текст, страница, регион, поиск по галке "в регионе" ?>