Le composant Zend_Feed
offre des services permettant de
traiter des flux RSS et Atom. Il permet d'accéder aux éléments d'un flux, aux attributs
d'un flux et aux attributs des entrées d'un flux, tout cela au moyen d'une syntaxe
intuitive. Zend_Feed
prend aussi complètement en charge la
modification de la structure des flux et des entrées, avec la même syntaxe intuitive que
précédemment, et il sait transformer le résultat en XML. À l'avenir, la prise en charge des
modifications pourrait aussi inclure la prise en charge du protocole de publication
Atom.
Sur le plan de la programmation, Zend_Feed
est constitué d'une
classe de base Zend_Feed
et de classes de base abstraites
Zend_Feed_Abstract
et
Zend_Feed_Entry_Abstract
, permettant de représenter respectivement
des flux et des entrées ; Zend_Feed
contient aussi des
implémentations particulières de ces classes abstraites pour les flux et entrées RSS et
Atom ainsi qu'un assistant en coulisses qui assure le bon fonctionnement de la syntaxe
intuitive.
Dans l'exemple ci-dessous, nous illustrons une utilisation simple de
Zend_Feed
: on obtient un flux RSS et on enregistre les
portions du flux qui nous intéressent dans un tableau PHP simple, qui pourra ensuite être
utilisé pour afficher les données, les stocker dans une base de données etc.
Attention
Beaucoup de flux RSS ont à leur disposition différentes propriétés, pour les canaux comme pour les éléments. La spécification RSS spécifie beaucoup de propriétés optionnelles et gardez donc cela à l'esprit lorsque vous écrivez du code qui manipule des données RSS.
Exemple 389. Manipuler des données RSS avec Zend_Feed
// on va chercher les dernières news de Slashdot try { $rssSlashdot = Zend_Feed::import('http://rss.slashdot.org/Slashdot/slashdot'); } catch (Zend_Feed_Exception $e) { // l'importation du flux a échoué echo "Une exception a été interceptée lors de l'importation " . "du flux : {$e->getMessage()}\n"; exit; } // on initialise un tableau contenant les données du canal RSS $canal = array( 'titre' => $rssSlashdot->title(), 'lien' => $rssSlashdot->link(), 'description' => $rssSlashdot->description(), 'elements' => array() ); // on itère sur chaque élément du canal et // on stocke les données qui nous intéressent foreach ($rssSlashdot as $elem) { $canal['elements'][] = array( 'titre' => $elem->title(), 'lien' => $elem->link(), 'description' => $elem->description() ); }