feaN0r
Новичок
Проблема с отправкой запроса в xmlsearch.yandex.ru
Привет программеры.
Заморочился вчера с одной траблой:
Отправляю в
<?xml version="1.0" encoding="windows-1251"?>
<request>
<query>"тест" <<
url="phpclub.ru*"</query>
<page>1</page>
</request>
через http://xml.yandex.ru/request_example.xml все прекрасно работает
Отправляю своим скриптом с помощью заголовков:
Пишет "Задан пустой поисковый запрос"
Раз через интерфейс яши все работает, значит запрос правильный, а дело скорее всего в HTTP заголовках, только что с ними не так?
Код всего скрипта:
Спасибо.
Привет программеры.
Заморочился вчера с одной траблой:
Отправляю в
<?xml version="1.0" encoding="windows-1251"?>
<request>
<query>"тест" <<
url="phpclub.ru*"</query>
<page>1</page>
</request>
через http://xml.yandex.ru/request_example.xml все прекрасно работает
Отправляю своим скриптом с помощью заголовков:
PHP:
$request = '<?xml version="1.0" encoding="windows-1251"?>
<request>
<query>"'.$search_string.'" <<
url="'.$host.'*"</query>
<page>'.$page_num.'</page>
</request>';
Пробывал отправлять в Юникоде
#$request = iconv("WINDOWS-1251", "UTF-8", $request);
#echo $request;
$requestHeader = "POST /xmlsearch HTTP/1.0\r\n";
$requestHeader .= "Host: xmlsearch.yandex.ru\r\n";
$requestHeader .= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1) Gecko/20061010 Firefox/2.0\r\n";
$requestHeader .= "Content-Type: text/xml\r\n";
$requestHeader .= "Content-Length: ".strlen($request)."\r\n";
$requestHeader .= "Connection: close\r\n\r\n";
$requestHeader .= urlencode($request);
Раз через интерфейс яши все работает, значит запрос правильный, а дело скорее всего в HTTP заголовках, только что с ними не так?
Код всего скрипта:
PHP:
<?php
ob_start();
////////////////////////////////////////
// Эта функция разбирает XML и формирует конечный HTML
function makeSearchList(&$out,&$dd){
if($dd){
$docs = $dd->get_elements_by_tagname('doc');
if(!$docs){
$out.= '<p>Искомая комбинация слов нигде не встречается</p>';
return;
}
$counter = 1;
foreach($docs as $de_doc){
$titles = $de_doc->get_elements_by_tagname('title');
$urls = $de_doc->get_elements_by_tagname('url');
$passages = $de_doc->get_elements_by_tagname('passage');
if(!$titles || !$urls || !$passages){
continue;
$out.= '<p>нет таких элементов</p>';
}
$out.= '
<p>'.$counter++.'. <a href="'.$urls[0]->get_content().'">'.$titles[0]->get_content().'</a><br />'.$passages[0]->get_content().'</p>';
}
}
}
$search_string = htmlspecialchars($_POST['search_string']);
echo $search_string;
//номер страницы, в каждом ответе поумолчанию мне приходило по 10
//найденых страниц, здесь я так понял номер очередного десятка
$page_num = 1;
//адрес сайта на котором производим поиск
$host = 'www.phpclub.ru';
// XML запрос
$request = '<?xml version="1.0" encoding="windows-1251"?>
<request>
<query>"'.$search_string.'" <<
url="'.$host.'*"</query>
<page>'.$page_num.'</page>
</request>';
Пробывал отправлять в Юникоде
#$request = iconv("WINDOWS-1251", "UTF-8", $request);
#echo $request;
$requestHeader = "POST /xmlsearch HTTP/1.0\r\n";
$requestHeader .= "Host: xmlsearch.yandex.ru\r\n";
$requestHeader .= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1) Gecko/20061010 Firefox/2.0\r\n";
$requestHeader .= "Content-Type: text/xml\r\n";
$requestHeader .= "Content-Length: ".strlen($request)."\r\n";
$requestHeader .= "Connection: close\r\n\r\n";
$requestHeader .= urlencode($request);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://xmlsearch.yandex.ru/xmlsearch/');
curl_setopt($ch, CUTLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $requestHeader);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
# Вот тут он мне всегда выдает xml документ что типа "Вы отправили пустой запрос"
echo $result;
$xml_respose = substr($xml_respose,strpos($xml_respose,'<?xml'));
// Создаем DOM Document
$dd = domxml_open_mem($xml_respose);
#}
//парсим запрос и делаем HTML
makeSearchList($out,$dd);
echo '<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Yandex XML</title>
</head>
<body>
<form action="" method="post">
<input name="search_string" type="text" value="'.htmlspecialchars($search_string).'" />
<input type="submit" />
</form>
'.$out.'
</body>
</html>';
?>