Rozdział 12. Zend_Feed

Spis treści

12.1. Wprowadzenie
12.2. Importowanie kanałów informacyjnych
12.2.1. Własne kanały
12.3. Odbieranie kanałów informacyjnych ze stron internetowych
12.4. Odbieranie danych z kanału informacyjnego RSS
12.5. Odbieranie danych z kanału informacyjnego Atom
12.6. Pobieranie pojedynczego wpisu kanału Atom
12.7. Modyfikacja kanału oraz struktury wpisów
12.8. Własne klasy kanału i wpisu

12.1. Wprowadzenie

Zend_Feed zapewnia funkcjonalność umożliwiającą przetwarzanie kanałów informacyjnych RSS oraz Atom. Zapewnia ona naturalną składnię umożliwiającą dostęp do elementów kanałów informacyjnych, ich atrybutów oraz atrybutów samych wpisów. Zend_Feed daje także obszerne wsparcie w modyfikowaniu kanałów i struktury wpisów w ten sam naturalny sposób i umożliwia zapisanie rezultatów jako XML. W przyszłości klasa ma zapewnić obsługę protokołu publikowania Atom (Atom Publishing Protocol).

Programowo Zend_Feed składa się z bazowej klasy Zend_Feed, abstrakcyjnych klas Zend_Feed_Abstract oraz Zend_Feed_Entry_Abstract reprezentujących kanały informacyjne i ich wpisy, specyficznych implementacji kanałów i wpisów dla RSS i Atom, oraz z pomocników odpowiedzialnych za naturalną składnię.

W przykładzie poniżej pokazujemy prosty przykład odbierania danych RSS i zapisywania potrzebnych części danych kanału do prostej tablicy PHP, która może być potem użyta do wyświetlenia danych, zapisania ich do bazy danych itp.

[Notatka] Bądż ostrożny

Wiele kanałów RSS ma dostępne różne właściwości samego kanału i jego elementów. Specyfikacja RSS umożliwia użycie wielu opcjonalnych parametrów, więc bądź ostrożny gdy będziesz pisał kod pracujący z RSS.

Przykład 12.1. Użycie Zend_Feed do pobierania danych RSS

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

// Ściągamy najnowsze nagłówki ze Slashdot
try {
    $slashdotRss = Zend_Feed::import('http://rss.slashdot.org/Slashdot/slashdot');
} catch (Zend_Feed_Exception $e) {
    // importowanie danych nie udało się
    echo "Exception caught importing feed: {$e->getMessage()}\n";
    exit;
}

// inicjalizacja tablicy z danymi kanału
$channel = array(
    'title'       => $slashdotRss->title(),
    'link'        => $slashdotRss->link(),
    'description' => $slashdotRss->description(),
    'items'       => array()
    );

// Pętla po każdym elemencie kanału i zapisanie potrzebnych danych
foreach ($slashdotRss as $item) {
    $channel['items'][] = array(
        'title'       => $item->title(),
        'link'        => $item->link(),
        'description' => $item->description()
        );
}

?>