PHP-писатели, помогите со скриптом!

  • Автор темы Yup
  • Дата начала
Yup

Yup

Активный участник
Регистрация
04.04.2009
Сообщения
5 560
Реакции
1 080
Баллы
113
Есть страницы Яндекс.Маркета такого плана. На них есть ссылки на сайты продавцов товаров (т.е. на сами странички товаров на этих сайтах продавцов). Проблема в том, что эти ссылки редиректные и зашифрованные (ну или не знаю как это правильно называется), вот такого плана. Мне же нужно получить прямые ссылки. Мне подсказали, что сделать это можно PHP-скриптом, в который я отправляю редиректную ссылку и на выходе получаю прямую. Подозреваю что скрипт этот довольно простой, но беда в том, что веб-программирование и в частности PHP-программирование для меня темный лес. Обращаться к этому скрипту я буду из программы Content Downloader, с помощью вот такого вызова. Может мне кто нибудь помочь с таким скриптом? Дополнительно нужно будет объяснить как им пользоваться, т.е. как его разместить в сети что бы он работал...
 
padla

padla

Участник
Регистрация
18.01.2005
Сообщения
2 229
Реакции
0
Баллы
36
вот скрипт
Код:
<?php	function curl_redir_exec($ch) {	static $curl_loops = 0;	static $curl_max_loops = 20;	if ($curl_loops >= $curl_max_loops) {	$curl_loops = 0;	return '';	}	curl_setopt($ch, CURLOPT_HEADER, true);	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);	$data = curl_exec($ch);	list($header, $data) = explode("\n\n", $data, 2);	$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);	if ($http_code == 301 || $http_code == 302)	{	$matches = array();	preg_match('/Location:(.*?)\n/', $header, $matches);	$url = @parse_url(trim(array_pop($matches)));	if (!$url){	$curl_loops = 0;	return $data;	}	$last_url = parse_url(curl_getinfo($ch, CURLINFO_EFFECTIVE_URL));	if (!$url['scheme']) $url['scheme'] = $last_url['scheme'];	if (!$url['host']) $url['host'] = $last_url['host'];	if (!$url['path']) $url['path'] = $last_url['path'];	$new_url = $url['scheme'] . '://' . $url['host'] . $url['path'] . ($url['query']?'?'.$url['query']:'');	curl_setopt($ch, CURLOPT_URL, $new_url);	if($http_code != 301)	return curl_redir_exec($ch);	else{	echo $new_url;	return false;	}	}else {	return '';	}	}	if(isset($_POST['url']) && $_POST['url'])	$url = $_POST['url'];	else	die('No url!');	$ch = curl_init();	curl_setopt($ch, CURLOPT_URL, $url); //куда ломимся	curl_setopt($ch, CURLOPT_TIMEOUT, 10); // Сколько сек. ждать ответ сервера	$page = curl_redir_exec($ch);	$page = curl_exec($ch);	curl_close($ch);
?>
параметр нужно передавать с именем url (например url=<ссылка из яндекса>)
скрипт возвращает человеческий линк либо ничего если если не удалось найти этот линк
скрипт нужно разместить где-то на сервере с поддержкой php и в контент даунлоадере указывать ссылку на этот скрипт
 
OP
Yup

Yup

Активный участник
Регистрация
04.04.2009
Сообщения
5 560
Реакции
1 080
Баллы
113
Огромное спасибо! Остался лишь вопрос: где можно разместить скрипт без лишних хлопот?
 
OP
Yup

Yup

Активный участник
Регистрация
04.04.2009
Сообщения
5 560
Реакции
1 080
Баллы
113
Извиняюсь за ламерские вопросы, но т.к. первый раз с этим сталкиваюсь то неизбежно возникают...
Методом тыка сделал следующее: зарегил бесплатный хостинг yup.16mb.com, закинул туда файл со скриптом (234.php). Правильно ли я понимаю, что введя в строке браузера http://yup.16mb.com/234.php?url=<ссылка> браузер должен отобразить результат выполнения скрипта, т.е. прямую ссылку? Что то у меня не получатся, на ссылку, например, http://yup.16mb.com/234.php?url=htt...sign=28d2db8a2c0333029393fe09aa6d8a73&keyno=1
отвечает "No url!". Т.е. скрипт вроде как выполняется (т.к. вариант вывода No url! в его тексте есть), но нужный мне результат не выводит. Или я что то не так делаю?
 
dalex

dalex

Новичок
Регистрация
15.02.2006
Сообщения
17 333
Реакции
49
Баллы
0
Извиняюсь за ламерские вопросы, но т.к. первый раз с этим сталкиваюсь то неизбежно возникают...
Методом тыка сделал следующее: зарегил бесплатный хостинг yup.16mb.com, закинул туда файл со скриптом (234.php). Правильно ли я понимаю, что введя в строке браузера http://yup.16mb.com/234.php?url=<ссылка> браузер должен отобразить результат выполнения скрипта, т.е. прямую ссылку? Что то у меня не получатся, на ссылку, например, http://yup.16mb.com/234.php?url=htt...sign=28d2db8a2c0333029393fe09aa6d8a73&keyno=1
отвечает "No url!". Т.е. скрипт вроде как выполняется (т.к. вариант вывода No url! в его тексте есть), но нужный мне результат не выводит. Или я что то не так делаю?

PHP:
 if(isset($_POST['url']) && $_POST['url']) $url = $_POST['url'];
замени на
PHP:
 if(isset($_GET['url']) && $_GET['url']) $url = $_GET['url'];
 
OP
Yup

Yup

Активный участник
Регистрация
04.04.2009
Сообщения
5 560
Реакции
1 080
Баллы
113
Заменил (скрипт там же 345.php)теперь вообще ничего не выдает, даже "No url!"
 
dalex

dalex

Новичок
Регистрация
15.02.2006
Сообщения
17 333
Реакции
49
Баллы
0
Заменил (скрипт там же 345.php)теперь вообще ничего не выдает, даже "No url!"
Тык ить всё правильно не выдаёт. Точнее скрипт получает от яндекса страницу с надписью "wrong url", не находит там ссылки и успокаивается.

Имхо тривиально через PHP не получится парсить. Насколько я понял в теле страницы, которую получает браузер или скрипт ссылки не совсем те, на которые кликает юзер. Предположу что после загрузки страницы ********** правит ссылки. Но не смотрел что к чему.
 
OP
Yup

Yup

Активный участник
Регистрация
04.04.2009
Сообщения
5 560
Реакции
1 080
Баллы
113
А откуда редиректную ссылку берешь? Если её брать из исходного кода страницы а не из браузера по ПКМ "скопировать ссылку", то в ней "&" заменяется на "&" или "&amp-" и, соответственно, при попытке перехода выдается "wrong url". Я с этим wrong url уже чуть ранее намучался, пока не понял в чем дело...
 
OP
Yup

Yup

Активный участник
Регистрация
04.04.2009
Сообщения
5 560
Реакции
1 080
Баллы
113
Редиректные ссылки из обычного браузера и из встроенного браузера Content Downloader действительно разные получаются, но если этот момент с & учесть то и те и те рабочие...
 
dalex

dalex

Новичок
Регистрация
15.02.2006
Сообщения
17 333
Реакции
49
Баллы
0
А откуда редиректную ссылку берешь? Если её брать из исходного кода страницы а не из браузера по ПКМ "скопировать ссылку", то в ней "&" заменяется на "&" или "&amp-" и, соответственно, при попытке перехода выдается "wrong url". Я с этим wrong url уже чуть ранее намучался, пока не понял в чем дело...
А, точно, не посмотрел.
 
padla

padla

Участник
Регистрация
18.01.2005
Сообщения
2 229
Реакции
0
Баллы
36
поменяй обратно $_GET на $_POST и замени $url = $_POST['url']; на $url = str_replace("&","&",$_POST['url']);
тем самым параметр который передаст твой даунлоадер будет корректно обработан, если дело только в &
 
OP
Yup

Yup

Активный участник
Регистрация
04.04.2009
Сообщения
5 560
Реакции
1 080
Баллы
113
поменяй обратно $_GET на $_POST и замени $url = $_POST['url']; на $url = str_replace("&","&",$_POST['url']);
тем самым параметр который передаст твой даунлоадер будет корректно обработан, если дело только в &

Да не, я то уже скрипту передаю нормальную ссылку, избавленную от проблемы с & Но что то нифига не возвращает он нужное :(
Вот пример http://yup.16mb.com/234.php?url=htt...sign=28d2db8a2c0333029393fe09aa6d8a73&keyno=1 где 234.php - изначальный скрипт. Там же лежит скрипт 345.php где $_POST заменен на $_GET, тоже не работает... 
 
padla

padla

Участник
Регистрация
18.01.2005
Сообщения
2 229
Реакции
0
Баллы
36
ради интереса попробуй прямо в тексте скрипта сделать тупо $url = "http://market-click2.yandex.ru/redir/GAkkM7lQwz6kEtXSvIPZ1rKio9iapjj99cfsXWZEzLBPSICT5-s9Zo3m3YxULv7dbqtuuHwQ0YkFdMgE3du6TeF9ZSbm1fQ9iAvVk5YSi3arsS3TogpmZf9SdvFtNEPp25XFlbnRKMm0PHMJqd-bvytVmrTHuhK9W1IycOxnEodyoC4VnEusnq6RguDLkIhQ_TUq9l1ATJAg3P3iSP8RsHVDs19aP9TsyH_eoZtCdpYsz34bIHVJW6GkdLY9YcN1e1ejz-ytWiQoqKeL510D4Hx8oVIizHfM-61FDtrIgiw?data=QVyKqSPyGQwwaFPWqjjgNtydMHNnehHqxgfuuOWc46JMJ8EZo3Y-1A_fSWtNHsihKj6mqDe0QeZ8XCQ-DS81jPLmDmd0JZjFsNN6IlNc3Sm5lgs6aBsZk9cSHg19C8g26RLdJlcZvWEFj4y9a9T13cKJ2BwGcXsNnRi0CkKiHrEGNIHFJ8r9AGwGYtj-EW6M__cgMiSTeG-FkZs4ZLSVpmnpivPUUCuB6hvOjv8t6AKq4WrGNYrzuy5XgXfhIHqJH4-PHG3EXuQ&b64e=2&sign=28d2db8a2c0333029393fe09aa6d8a73&keyno=1"; после $url = $_POST['url'];
 
DAE

DAE

Moderator
Регистрация
11.07.2007
Сообщения
27 197
Реакции
71
Баллы
48
1)редирект ссылки яндекса - живут непродолжительное время, и зачастую привязаны к сессии.
Так по ссылка уже битая сама по себе http://market-click2.yandex.ru/redi...IhQ_TUq9l1ATJAg3P3iSP8RsHVDs19aP9TsyH_eoZtCdp

2) яндекс увидев поток запросов с 1 ip забанит эту лавочку минут за 10
 
DAE

DAE

Moderator
Регистрация
11.07.2007
Сообщения
27 197
Реакции
71
Баллы
48
Я не понял суть задачи - зачем получать прямые ссылки?
 
OP
Yup

Yup

Активный участник
Регистрация
04.04.2009
Сообщения
5 560
Реакции
1 080
Баллы
113
ради интереса попробуй прямо в тексте скрипта сделать тупо $url = "http://market-click2.yandex.ru/redir/GAkkM7lQwz6kEtXSvIPZ1rKio9iapjj99cfsXWZEzLBPSICT5-s9Zo3m3YxULv7dbqtuuHwQ0YkFdMgE3du6TeF9ZSbm1fQ9iAvVk5YSi3arsS3TogpmZf9SdvFtNEPp25XFlbnRKMm0PHMJqd-bvytVmrTHuhK9W1IycOxnEodyoC4VnEusnq6RguDLkIhQ_TUq9l1ATJAg3P3iSP8RsHVDs19aP9TsyH_eoZtCdpYsz34bIHVJW6GkdLY9YcN1e1ejz-ytWiQoqKeL510D4Hx8oVIizHfM-61FDtrIgiw?data=QVyKqSPyGQwwaFPWqjjgNtydMHNnehHqxgfuuOWc46JMJ8EZo3Y-1A_fSWtNHsihKj6mqDe0QeZ8XCQ-DS81jPLmDmd0JZjFsNN6IlNc3Sm5lgs6aBsZk9cSHg19C8g26RLdJlcZvWEFj4y9a9T13cKJ2BwGcXsNnRi0CkKiHrEGNIHFJ8r9AGwGYtj-EW6M__cgMiSTeG-FkZs4ZLSVpmnpivPUUCuB6hvOjv8t6AKq4WrGNYrzuy5XgXfhIHqJH4-PHG3EXuQ&b64e=2&sign=28d2db8a2c0333029393fe09aa6d8a73&keyno=1"; после $url = $_POST['url'];

выдает Parse error: syntax error, unexpected $end in *******/234_2.php on line 61
 
OP
Yup

Yup

Активный участник
Регистрация
04.04.2009
Сообщения
5 560
Реакции
1 080
Баллы
113
1)редирект ссылки яндекса - живут непродолжительное время, и зачастую привязаны к сессии.


Так по ссылка уже битая сама по себе http://market-click2.yandex.ru/redi...IhQ_TUq9l1ATJAg3P3iSP8RsHVDs19aP9TsyH_eoZtCdp
Ну, эти ссылки вполне себе нормально существуют не менее нескольких часов как минимум, а мне много и не надо, т.к. я хочу из неё сразуже после открытия страницы получить прямую, после этого она мне не нужна

2) яндекс увидев поток запросов с 1 ip забанит эту лавочку минут за 10
Да, возможна подобная проблема, буду пытаться решать увеличением времени между запросами. 
 
OP
Yup

Yup

Активный участник
Регистрация
04.04.2009
Сообщения
5 560
Реакции
1 080
Баллы
113
Я не понял суть задачи - зачем получать прямые ссылки?

Суть задачи - массово связать между собой товары в нескольких интернет-магазинах и в самом ЯМ. Т.е. в 1-м магазе есть Самсунг Галакси S2, во втором есть Samsung GT S2, в третьем Samsung GT SII, а в четвертом этой позиции нету. Ну и в Самом ЯМ есть Samsung Galaxy S II I9100. В ручную увязывать между собой разные написания одной и той же позиции в разных магазах при тысячах разных позиций - нереально. Но они уже увязаны в ЯМ. Идея в том что бы спарсить определенные категории товаров во всех интересующих магазинах и в ЯМ и с помощью ЯМ объеденить их в одну базу. Конечная цель - ассортиментный и ценовой анализ по категориям.
 
OP
Yup

Yup

Активный участник
Регистрация
04.04.2009
Сообщения
5 560
Реакции
1 080
Баллы
113
Парсить по редиректным ссылкам из ЯМ <title> с соответсвующих страниц сайтов магазинов я уже умею, но делать объединение по <title> не удобно т.к. заголовок не всегда однозначно идентифицирует конкретную модель и модификацию... На том же Связном попадается куча ноутбуков с идентичным заголовком но с разными комплектациями, которые имеют разные страницы как на Связном, так и относятся к разным модификациям на ЯМ. По адресам же страниц увязка будет однозначная
 
DAE

DAE

Moderator
Регистрация
11.07.2007
Сообщения
27 197
Реакции
71
Баллы
48
Интересно.
Нахрапом так не получилось, яндекс отдает пустоту.
Куки и заголовки я подменил корректно... думаю в общем...
 
Верх Низ