7.4. Работа с лентой RSS
Пред. | Глава 7. Zend_Feed | След.

## 7.4. Работа с лентой RSS

Чтение ленты такое же простое, как создание объекта `Zend_Feed_Rss` с URI ленты:

    <?php

    $channel = new Zend_Feed_Rss('http://rss.example.com/channelName');

    ?>

Если при извлечении ленты произошла ошибка, то будет сгенерировано исключение `Zend_Feed_Exception`.

Создав объект ленты, вы можете получить доступ к любым стандартным свойствам канала RSS (channel) непосредственно в объекте.

    <?php

    echo $channel->title();

    ?>

Обратите внимание на синтаксис функции. `Zend_Feed` использует соглашение об интерпретации свойств как объекта XML, если они запрошены в синтаксисе получения переменной (`$obj->property` и как строки, если они запрошены в синтаксисе метода (`$obj->property()`). Это позволяет получить доступ к полному тексту любого отдельного узла, что одновременно дает полный доступ и ко всем дочерним элементам.

Если свойства канала имеют атрибуты, то к ним можно получить доступ, используя синтаксис массива PHP:

    <?php

    echo $channel->category['domain'];

    ?>

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

Весьма возможно, что вы хотите произвести обход ленты и произвести какие-либо операции с ее публикациями. `Zend_Feed_Abstract` реализует интерфейс PHP `Iterator`, поэтому вывод заголовков всех статей в канале будет выглядеть следующим образом:

    <?php

    foreach ($channel as $item) {
        echo $item->title() . "\n";
    }

    ?>

Если вы не знакомы с RSS, то здесь приведены стандартные элементы, которые должны присутствовать в канале (элемент `<channel>`) и отдельных публикациях (элемент `<item>`) RSS.

Обязательные элементы канала:

- `title` -- имя канала

- `link` -- URL веб-сайта, соответствующего каналу

- `description` -- одно или несколько предложений, составляющих описание канала

Обычно используемые необязательные элементы канала:

- `pubDate` -- дата публикации канала в формате RFC 822

- `language` -- язык, на котором написано содержимое канала

- `category` -- одна или несколько (задается несколькими тегами) категорий, к которым принадлежит канал

Элементы `<item>` не имеют обязательных вложенных элементов. Тем не менее, должны быть представлены `<title>` (заголовок) или `<description>` (описание).

Обычно используемые элементы публикации

- `title` -- заголовок публикации

- `link` -- URL публикации

- `description` -- краткое описание публикации

- `author` -- e-mail автора

- `category` -- одна или несколько категорий, к которым принадлежит публикация

- `comments` -- URL комментариев к данной публикации

- `pubDate` -- дата публикации в формате RFC 822

В своем коде вы можете проверить, имеет ли элемент непустое значение, следующим образом:

    <?php

    if ($item->propname()) {
        // ... продолжение работы
    }

    ?>

Если вместо этого использовать `$item->propname`, то всегда будете получать объект, который расценивается как `TRUE`, поэтому такая проверка будет ошибочной.

За дополнительной информацией см. официальное описание спецификации RSS 2.0: http://blogs.law.harvard.edu/tech/rss

Пред. | Уровень выше | След.
7.3. Получение лент из веб-страниц | Начало | 7.5. Работа с лентой Atom