Дорогие зрители, сегодня мы с Вами совершим увлекательное путешествие в загадочную страну под названием Яндекс.XML.
Итак, Яндекс.XML — это сервис Яндекса, который позволяет выполнять автоматические поисковые запросы к ранееупомянутой поисковой системе и публиковать его ответы у себя на своем сайте в удобной для Вас форме.
В этой статье я опишу как отправлять сервису свои поисковые в формате XML на примере скрипта поиска по сайту.
Самый простой XML-запрос к сервису имеет вид
<?xml version='1.0' encoding='utf-8'?>
<request>
<query>your query</query>
<page>0</page>
</request>
Здесь в теге query должен размещаться Ваш поисковый запрос, а в теге page — номер страницы результатов поиска (отсчет страниц результатов поиска начинается с нуля).
Текст поискового запроса представляется простой текстовой строкой, в которой не должно быть специальных символов html. Чтобы избавиться от этих символов можно в Вашем скрипте поиска по сайту воспользоваться функцией htmlspecialchars:
$search_query = htmlspecialchars($search_query);
Для поиска Вашего запроса по определенному сайту, а не по всей базе Яндекса можно воспользоваться поисковым оператором << host="www.site.ru". Он ограничивает область поиска только сайтом www.site.ru.
Ваш XML-запрос должен отправляться сервису методом POST и Content-type: application/xml. Реализуется это с помощью передачи функции file_get_contents() заполненного метода stream_context. Пример передачи запроса сервису Яндекс.XML на PHP смотрите в примере ниже (блок, отвечающий за передачу запроса выделен).
$query = «Ваш поисковый запрос»;
$your_url= «www.site.ru»; //Ваш сайт
$search_query = $query . " << url="" . $your_url . """;
$search_query = htmlspecialchars($search_query); // заменяем в запросе все символы html в соответствующие им кодовые обозначения
$xml_query = "<?xml version='1.0' encoding='utf-8'?>
<request>
<query>" . $search_query . "</query>
<page>0</page>
"</request>;
//---- отправляем методом POST наш запрос -----
$context = stream_context_create (array (
'http' => array (
'method'=>«POST»,
'header'=>«Content-type: application/xmlrn» .
"Content-length: " . strlen ($xml_query),
'content'=>$xml_query
)
));
//----------------------------------------------------------------------
$response = file_get_contents ('http://xmlsearch.yandex.ru/xmlsearch', true, $context);
if ( $response ) {
$xmldoc = new SimpleXMLElement ($response);
// выполняем обработку ответа
}
Как Вы видите, результат запроса возвращается в формате XML, и поэтому его можно обработать с помощью SimpleXMLElement.
Процедуру обработки результата запроса я здесь не разбираю, потому как механизм работы с XML в PHP был доступно мною описан в одноименной статье (хотя если у Вас возникнут какие-либо проблемы с обработкой данных, возвращаемых сервисом, то пишите — обязательно помогу).
Итак, на этом можно считать процедуру отправки простого поискового запроса в Яндекс.XML завершенной.
Позже я расскажу как выполнять запросы с сортировкой а также опишу коды основных ошибок, которые могут возникнуть во время выполения запроса.
ЗЫ: чуть не забыл. Чтобы Яндекс.XML обрабатывал Ваши запросы, нужно зарегистрировать свой IP-адрес (IP-адрес машины, на которой выполняется PHP-скрипт запроса) на странице http://xml.yandex.ru/ip.xml.
|
|
Webmoney Z163628999150, R617151845974
|
Здесь-же можно обойтись и без регулярных выражений:
$detagged_node = str_replace ('<hlword>', '<strong>',$detagged_node);
$detagged_node = str_replace ('</hlword>', '</strong>',$detagged_node);
дело в том, что hlword там находится с атрибутом priority («hlword priority="strict"»).
плюс, я не знаю, что делать, если в тексте пассажа содержатся не теги, а html символы, которые через амперсанд записываются.
помогите пожалуйста... мне просто для диплома очень нужно
спасибо.
14:58
здравствуйте, вы тут написали, что можете помочь... если вам нетрудно, помогите мне пож-ста с моей проблемой.
у себя в скрипте я пытаюсь обработать все passages таким образом: (много закомменчено — я пытался по разному справиться)
но мне постоянно мешает тег hlwords: при выдаче результатов у меня на страницу выводится всё кроме того, что находится внутри этого тега (((
не знаю как с этим бороться
заранее спасибо.