Глава 12. Zend_Feed

Содержание

12.1. Введение
12.2. Импортирование лент с помощью Zend_Feed
12.3. Получение лент из веб-страниц
12.4. Работа с лентой RSS
12.5. Работа с лентой Atom
12.6. Работа с отдельной публикацией Atom
12.7. Изменение структуры лент и публикаций
12.8. Специальные классы лент и записей

12.1. Введение

Zend_Feed предназначен для работы с лентами RSS и Atom. Он предоставляет естетственный синтаксис (natural syntax) для доступа к элементам лент, атрибутам лент и публикаций, полностью поддерживает изменение структуры лент и публикаций с использованием того же естетственного синтаксиса и преобразует результаты изменений обратно в XML. В будущем эта поддержка изменений может обеспечить добавление поддержки Atom Publishing Protocol.

Программно Zend_Feed состоит из базового класса Zend_Feed, абстрактных базовых классов Zend_Feed_Abstract и Zend_Feed_Entry_Abstract для представления лент и публикаций, конкретных реализаций лент и публикаций для RSS и Atom, а также "закулисных" помощников для обеспечения работы естетственного синтаксиса.

В примере ниже мы демонстрируем простое получение ленты RSS и сохранение нужных данных из ленты в массив PHP, который может быть использован для распечатки, сохранения в БД и т.д.

[Замечание] Внимание

Многие ленты RSS имеют различные доступные свойства каналов и их элементов. Спецификация RSS предоставляет множество необязательных свойств, поэтому имейте это в виду, когда пишете код для работы с данными RSS.

Пример 12.1. Включение Zend_Feed в работу с данными ленты RSS

<?php
require_once 'Zend/Feed.php';

// Извлечение последних новостей Slashdot
try {
    $slashdotRss = Zend_Feed::import('http://rss.slashdot.org/Slashdot/slashdot');
} catch (Zend_Feed_Exception $e) {
    // неудача при импортировании ленты
    echo "Exception caught importing feed: {$e->getMessage()}\n";
    exit;
}

// Инициализация массива данных каналов
$channel = array(
    'title'       => $slashdotRss->title(),
    'link'        => $slashdotRss->link(),
    'description' => $slashdotRss->description(),
    'items'       => array()
    );

// Обход каналов и сохранение данных
foreach ($slashdotRss as $item) {
    $channel['items'][] = array(
        'title'       => $item->title(),
        'link'        => $item->link(),
        'description' => $item->description()
        );
}

?>