Для написания программы вам не требуется скачивать с Яндекса никаких дополнительных модулей. Разве что примеры, позволяющие лучше разобраться со структурой запроса. Сформированный запрос отправляется вами на Яндекс, вы получаете ответ и формируете страницу результата. И форму запроса, и формат результирующей страницы вы создаете сами и вот здесь уже ни в чем не зависите от Яндекса. Единственное требование, чтобы при использовании сервиса на бесплатной основе информация об этом была выведена вверху каждой страницы результатов, а при платном использовании информация о Яндекс. XML может располагаться и внизу страницы.
Сервер XML-поиска Яндекса принимает поисковые запросы методом POST или методом GET по адресу http://xmlsearch.yandex.ru/xmlsearch/. Во входном потоке должен быть передан поисковый запрос в формате XML. Есть некоторые ограничения на формирование запроса и результатов: групп на странице не более 20, документов в группе не более 3, пассажей в документе не более 5, длина запроса в символах не более 150, число страниц при листании не более 100.
Поисковый запрос состоит из следующих элементов (табл. 10.4).


Два из перечисленных элементов имеют свою структуру. Это элементы сортировки и группировки.
Сортировка может выполняться по одному из двух доступных в Яндекс XML параметров — по релевантности запросу или по времени модификации. Но при этом следует учитывать еще одну особенность формирования результатов. Все они вначале подразделяются на три группы, соответствующие выполнению условий поиска: 'совпадение фразы', 'наличие всех слов', 'отсутствие некоторых слов'. И вот уже внутри этих групп происходит сортировка по релевантности или по времени модификации.
Группировка позволяет получать данные в сжатом виде. Например, если вы ищете сайты, подпадающие под определенные признаки, может оказаться полезным найти не сами сайты, а категории Яндекс. Каталога, в которых они находятся. Упорядочивание групп происходит по их лучшим представителям. Например, при сортировке по дате и одновременной группировке по сайтам в расчет принимается самый свежий документ сайта.
В отличие от сортировки, группировать результаты можно по нескольким признакам, для чего в запросе необходимо их все перечислить. На Яндексе поддерживается три варианта группировки:
? 'плоский' способ — каждая группа состоит ровно из одного документа, используется по умолчанию, иначе называется
? 'глубокий' способ — группировка выполняется по самому нижнему уровню иерархии или по сайтам. Еще ее называют
? 'широкий' способ — обеспечивает возможность группирования по категориям заданного уровня в нужной ветке иерархии; ветка задается при помощи номера узла. Также называется
Разобравшись с элементами запроса, можно попытаться его составить. Но прежде, чем запускать его в работу, сформированный XML-запрос следует проверить. Для этого можно воспользоваться либо формой на Яндексе http://xml.yandex.ru/request_example.xml, либо проверить согласно формальной схеме XML-запроса Яндекса (http://xml.yandex.ru/request.xs). С ее помощью при наличии XML-парсера, поддерживающего валидацию по схеме, вы сможете проверить корректность своих запросов (листинг 10.6).
Листинг 10.6. Пример запроса, размещенный на Яндексе для тестирования
<?xml version='1.0' encoding='windows-1251'?> <request>
<query>yandex</query> <groupings> <groupby attr='d' mode='deep' groups-on- page='10' docs-in-group='1' /> </groupings> </request>
В ответ на запрос Яндекс возвращает ответ, состоящий из элементов <request> и <response> (табл. 10.5).




Принятый ответ необходимо будет обработать вашей программой и вывести в виде страницы сайта.
Мы уже говорили о том, что с помощью Яндекс. XML можно искать не только на Яндексе, но и на своем сайте. Сделать такой поиск можно следующим образом. Составьте запрос и дополните его расширенным условием поиска <<. Выглядеть это будет так:
{ваш запрос} << host='www.my_rsite.ru'
При этом есть несколько правил:
? группировка по сайту должна быть 'плоской';
? специальные символы в запросе нужно менять на escape-последовательности.
Приведенный здесь пример в этом случае будет выглядеть следующим образом:
{ваш запрос} << host=" www.my_rsite.ru"
Подробный пример на языке Perl приведен по ссылке http://xml.yandex.ru/examples.xml? id=420129.
Вы можете сформировать запрос, ограничив поиск определенным географическим регионом или разделом Яндекс. Каталога. Для этого потребуется использовать коды, которые можно получить по ссылкам:
? коды регионов — http://search.yaca.yandex.ru/geo.c2n;
? коды разделов каталога — http://search.yaca.yandex.ru/cat.c2n.
Например, если вы ищете слона в Казани (код 43), вам потребуется создать следующий запрос:
<query>слон << cat=(11000043)</query>
Кодировка при поиске через Яндекс XML задается в первой строке отправляемого запроса:
<?xml version='1.0' encoding='windows-1251'?>
А вот результаты поиска всегда отдаются в кодировке UTF-8, для преобразования которой в любую другую потребуется дополнительная библиотека или модуль, например, Convert::Cyrillic (http://www.neystadt.org/cyrillic/ Convert-Cyrillic.htm).
Начиная с середины 2006 года сервис Яндекс XML стал искать не только документы, опубликованные на веб-сайтах, но и изображения. При этом результаты поиска будут такими же, как если бы вы искали на Яндекс. Картинках.
Количество запросов на поиск картинок учитывается в общем количестве запросов (все запросы 'принадлежат' одному и тому же IP-адресу). Кроме этого, в результатах 'обычного' XML-поиска теперь можно показывать одно наиболее релевантное изображение, так, как это происходит в результатах поиска на Яндексе. В этом случае запрос будет выглядеть примерно так (листинг 10.7).
Листинг 10.7. Пример запроса с выводом изображения I
<request>
<query>anoHbK/query>
<groupings>