Rozdział 15. Zend_Feed

Spis treści

15.1. Wprowadzenie
15.2. Importowanie kanałów informacyjnych
15.2.1. Własne kanały
15.2.1.1. Importowanie własnej tablicy
15.2.1.2. Importowanie własnego źródła danych
15.2.1.3. Zrzucanie zawartości kanału
15.3. Odbieranie kanałów informacyjnych ze stron internetowych
15.4. Odbieranie danych z kanału informacyjnego RSS
15.5. Odbieranie danych z kanału informacyjnego Atom
15.6. Pobieranie pojedynczego wpisu kanału Atom
15.7. Modyfikacja kanału oraz struktury wpisów
15.8. Własne klasy kanału i wpisu

15.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 15.1. Użycie Zend_Feed do pobierania danych RSS

// Ś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()
        );
}