Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #67, ИЮНЬ 2006 г.

получаем удовольствие от web-сервисов

ALEXEY SHOCKOV

Спецвыпуск: Хакер, номер #067, стр. 067-048-2


PHP5 выбран как очень мощный язык для web-программирования, в котором, по сравнению с предшественником, лучше реализована парадигма объектно-ориентированного программирования, что позволит нам сосредоточиться только на главных моментах и не тратить усилий на написание кода, а кроме того, успешно использовать данный web-сервис на любом другом языке.

[за дело!] Прежде чем приступать собственно к созданию, сделаю предупреждение. Использование Яndex.XML будет актуально для средних сайтов, где критерии ко времени индексации информации не слишком велики, что вытекает из особенностей поисковой системы такого масштаба, как Яndex, — на индексацию документа может уйти неделя, если не больше. Эта особенность проявляется только в нашем конкретном примере и не относится к web-сервисам в целом, так что приступим к созданию.

Для начала неплохо было бы продумать структуру классов, отвечающих за взаимодействие с поисковым сервисом.

YandexSearchQuery — класс запроса к Яndex’у.

YandexSearchAnswer — ответ Яndex’а. Предоставляет удобный интерфейс.

YandexSearchDoc — конкретный документ.

При желании можно добавить класс YandexSearchGroup, так как Яndex может группировать документы в своем ответе, но мы не будем делать это для большей простоты системы.

[YandexSearchQuery] Абстрактно web-сервис можно представить в виде функции (метода), которому мы должны передать какие-то параметры, а он, соответственно, должен вернуть какие-то значения. Вызов web-сервиса происходит путем формирования XML-документа с параметрами и отправки его на адрес, по которому расположен web-сервис. В нашем случае простейший запрос выглядит так:

<?xml version="1.0" encoding="utf-8"?>

<request>

<query>строка для поиска << host='ваш_домен'</query>

</request>

Содержание элемента query — наш запрос к поисковой системе. Мы хотим организовать поиск только по своему сайту, поэтому используется оператор языка запросов host, позволяющий ограничить поиск только заданным доменным именем.

За формирование запроса отвечает метод prepareQuery, а за отправку — собственно метод query, код которых можно найти на диске.

Кроме того, метод query отвечает также и за получение ответа от web-сервиса, тоже представляющего собой обычный XML-документ.

[YandexSearchResponse] Класс ответа поисковой системы может реализовывать множество функций, но мы реализуем только две: получение конкретного документа и общего числа документов в ответе.

Чтобы упростить работу с классом, мы наследуем его от класса ArrayObject (этот специальный класс поставляется в стандарте с php5, позволяет работать со своими полями как с элементами обычного массива). Значение элементам данного массива присваивает метод append, который мы и вызываем в конструкторе нашего класса, передавая ему в качестве параметра узел одного конкретного документа из DOM-дерева, сформулированного нами из XML-документа ответа поисковой системы.

public function __construct(DOMDocument $a)

{

...

$this->answerDOMTree = $a;

Назад на стр. 067-048-1  Содержание  Вперед на стр. 067-048-3