получаем удовольствие от 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; |