Chapitre 12. Zend_Feed

Table des matières

12.1. Introduction
12.2. Importer des flux
12.2.1. Flux personnalisés
12.3. Obtenir des flux à partir de pages web
12.4. Consommer un flux RSS
12.5. Consommer un flux Atom
12.6. Consommer une entrée Atom particulière
12.7. Modifier la structure du flux ou des entrées
12.8. Classes personnalisées pour les flux et entrées

12.1. Introduction

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.

[Note] 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 12.1. Manipuler des données RSS avec Zend_Feed

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

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

?>