12.4. Odbieranie danych z kanału informacyjnego RSS

Odczytywanie kanału RSS jest tak proste jak utworzenie obiektu Zend_Feed_Rss z adresem URL kanału przekazanym do konstruktora:

<?php

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

?>

Jeśli wystąpi jakiś błąd podczas obróbki danych pochodzących z kanału, zostanie wyrzucony wyjątek Zend_Feed_Exception.

Kiedy już masz obiekt kanału informacyjnego, możesz łatwo uzyskać dostęp do standardowych właściwości kanału RSS bezpośrednio na obiekcie:

<?php

echo $channel->title();

?>

Zwróć uwagę na składnie funkcji. Zend_Feed używa konwencji traktującej właściwości jak obiekt XML gdy próbujemy uzyskać do nich dostęp za pomocą składni "getter" ($obj->property) i jako łańcuch znaków gdy próbujemy uzyskać dostęp jak do metody ($obj->property()). To pozwala na pełny dostęp do danych tekstowych przy jednoczesnym dostępie do wszystkich niższych składników.

Jeśli właściwości kanału mają atrybuty, są one dostępne przy użyciu składni tablic PHP:

<?php

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

?>

Since XML attributes cannot have children, method syntax is not necessary for accessing attribute values.

Najczęściej będziesz chciał przejść pętlą po danych kanału i zrobić coś z jego wpisami. Klasa Zend_Feed_Abstract implementuje wbudowany w PHP interfejs Iterator, więc wyświetlenie wszystkich tytułów artykułów z kanału jest bardzo proste:

<?php

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

?>

Jeśli nie jesteś obeznany z RSS, poniżej znajdziesz opis podstawowych składników, które możesz znaleść w kanale RSS i w jego indywidualnych elementach (wpisach).

Wymagane składniki kanału:

Opcjonalne składniki kanału:

Elementy RSS <item> nie mają wymaganych składników, jednak albo składnik title albo description musi istnieć w elemencie.

Składniki elementu kanału:

W twoim kodzie zawsze możesz sprawdzić czy element nie jest pusty za pomocą:

<?php

if ($item->propname()) {
    // ... kontynuuj.
}

?>

Jeśli zamiast tego użyjesz $item->propname, zawsze dostaniesz pusty obiekt który zostanie skonwertowany do wartości TRUE, więc test zawiedzie.

Więcej informacji dostępnych jest w oficjalnej specyfikacji RSS 2.0: http://blogs.law.harvard.edu/tech/rss