Zend_Feed permet aux développeurs d'obtenir très facilement des flux. Si vous connaissez l'URI d'un flux, utilisez simplement la méthode Zend_Feed::import() :
<?php
$flux = Zend_Feed::import('http://flux.example.com/nomDuFlux');?>
Vous pouvez aussi utiliser Zend_Feed pour aller chercher le contenu d'un flux à partir d'un fichier ou d'une chaîne PHP :
<?php
// on importe un flux à partir d'un fichier texte
$fluxAPartirDeFichierTexte = Zend_Feed::importFile('flux.xml');
// on importe un flux à partir d'une variable PHP de type chaîne
$fluxAPartirDePHP = Zend_Feed::importString($chaineFlux);
?>
Dans chacun des exemples ci-dessus, une instance d'une classe étendant Zend_Feed_Abstract est renvoyée en cas de succès, selon le type du flux. Si un flux RSS a été obtenu au moyen de l'une des méthodes d'importation décrites ci-dessus, alors un objet Zend_Feed_Rss sera renvoyé. Par contre, si un flux Atom a été importé, alors un objet Zend_Feed_Atom est renvoyé. Les méthodes d'importation déclencheront aussi une exception Zend_Feed_Exception en cas d'échec, par exemple si le flux est illisible ou malformé.
Zend_Feed permet aux développeurs de créer du flux personnalisé très facilement. Vous devez juste créer un tableau et l'importer avec Zend_Feed. Ce tableau peut être importé avec Zend_Feed::importArray() ou avec Zend_Feed::importBuilder(). Dans ce dernier cas, le tableau sera calculé instantanément par une source de données personnalisée implémentant Zend_Feed_Builder_Interface.
<?php // on importe un flux atom à partir d'un tableau $atomFeedFromArray = Zend_Feed::importArray($array); // la ligne suivante est équivalente à celle ci-dessus ; par défaut l'instance Zend_Feed_Atom est retournée $atomFeedFromArray = Zend_Feed::importArray($array, 'atom'); // on importe un flux rss à partir d'un tableau $rssFeedFromArray = Zend_Feed::importArray($array, 'rss');?>
Le format du tableau doit être conforme à cette structure :
<?php
array(
'title' => 'titre du flux', // obligatoire
'link' => 'url canonique du flux', // obligatoire
'lastUpdate' => 'date de la mise à jour au format timestamp', // optionel
'published' => 'date de la publication au format timestamp', // optionel
'charset' => 'charset des données textuelles', // obligatoire
'description' => 'description courte du flux', // optionel
'author' => 'auteur du flux', // optionel
'email' => 'email de l'auteur du flux', // optionel
'webmaster' => 'email de la personne responsable en cas de problème technique' // optionel, ignoré si le flux est de type atom
'copyright' => 'informations de copyright', // optionel
'image' => 'url de l'image', // optionel
'generator' => 'générateur du flux', // optionel
'language' => 'langue dans la quelle le flux est écrit', // optionel
'ttl' => 'combien de temps en minutes un flux peut être mis en cache avant rafraichissement', // optionel, ignoré si le flux est de type atom
'rating' => 'l'évaluation PICS du canal', // optionel, ignoré si le flux est de type atom
'cloud' => array(
'domain' => 'domaine du nuage, ex. rpc.sys.com' // obligatoire
'port' => 'port de connection' // optionel, par défault port 80
'path' => 'chemin du nuage, ex. /RPC2' // obligatoire
'registerProcedure' => 'procédure à appeler, ex. myCloud.rssPleaseNotify' // obligatoire
'protocol' => 'protocole à utiliser , ex. soap ou xml-rpc' // obligatoire
), // un nuage pour être averti des mises à jour // optionel, ignoré si le flux est de type atom
'textInput' => array(
'title' => 'l'intitulé du bouton de validation de la boîte de saisie' // obligatoire,
'description' => 'explication de la boîte de saisie' // obligatoire
'name' => 'le nom de l'objet texte' // obligatoire
'link' => 'l'URL du CGI qui va analyser la requête' // obligatoire
) // une boîte de saisie qui peut être montrée avec le flux // optionel, ignoré si le flux est de type atom
'skipHours' => array(
'heures dans le format 24H', // ex. 13 (1pm)
// jusqu'à 24 lignes dont les valeurs sont des nombres commpris entre 0 et 23
) // Information disant aux aggrégateurs quelles heures ils peuvent ignorer // optionel, ignoré si le flux est de type atom
'skipDays ' => array(
'jour', // ex. Monday
// jusqu'à 7 lignes dont les valeurs peuvent être Monday, Tuesday, Wednesday, Thursday, Friday, Saturday or Sunday
) // Information disant aux aggrégateurs quelles jours ils peuvent ignorer // optionel, ignoré si le flux est de type atom
'itunes' => array(
'author' => 'nom de l'artiste' // optionel, par défaut l'auteur principal
'owner' => array(
'name' => 'nom du propriétaire' // optionel, default l'auteur principal
'email' => 'email du propriétaire' // optionel, default l'email de l'auteur principal
) // propriétaire du podcast // optionel
'image' => 'image de l'album/podcast' // optionel, default to the main image value
'subtitle' => 'description courte' // optionel, default to the main description value
'summary' => 'description longue' // optionel, default to the main description value
'block' => 'empêcher l'apparition d'un épisode (yes|no)' // optionel
'category' => array(
array('main' => 'catégorie principale', // obligatoire
'sub' => 'sous-catégorie' // optionel
),
// jusqu'à 3 lignes
) // 'Catégorie et information de recherche dans iTunes Music Store' // obligatoire
'explicit' => 'graphique d'avertissement parental (yes|no|clean)' // optionel
'keywords' => 'une liste d'au maximum 12 mot clés separés par des virgules' // optionel
'new-feed-url' => 'utiliser pour informer iTunes d'un nouvel URL de flux' // optionel
) // Données d'extension iTunes // optionel, ignoré si le flux est de type atom
'entries' => array(
array(
'title' => 'titre de l'item', // obligatoire
'link' => 'url de cet item', // obligatoire
'description' => 'version raccourci du texte', // seulement du text, pas d'html, obligatoire
'guid' => 'id de l'article, si aucun alors la valeur link est utilisée', // optionel
'content' => 'version complète de l'information', // peut contenir html, optionel
'lastUpdate' => 'date de publication au format timestamp', // optionel
'comments' => 'page de commentaires de l'item', // optionel
'commentRss' => 'l'url du flux des commentaires associés', // optionel
'source' => array(
'title' => 'titre de la source originale' // obligatoire,
'url' => 'url de la source originale' // obligatoire
) // source originale de l'item // optionel
'category' => array(
array(
'term' => 'intitulé de la première catégorie' // obligatoire,
'scheme' => 'url qui décrit l'organisation de la catégorie' // optionel
),
array(
//données de la seconde catégorie et ainsi de suite
)
) // liste des catégories attachées// optionel
'enclosure' => array(
array(
'url' => 'url de la pièce jointe' // obligatoire
'type' => 'type mime de la pièce jointe' // optionel
'length' => 'length de la pièce jointe en octets' // optionel
),
array(
//données de la seconde pièce jointe et ainsi de suite
)
) // liste des pièces jointes à l'item // optionel
),
array(
//données de le second item et ainsi de suite
)
)
);?>
Références :
Spécification RSS 2.0 : RSS 2.0
Spécification Atom : RFC 4287
Spécification WFW : Well Formed Web
Spécification iTunes : iTunes Technical Specifications
Vous pouvez créer une instance Zeed_Feed à partir de n'importe quelle source de données implémentant Zend_Feed_Builder_Interface. Vous devez juste implémenter les méthodes getHeader() et getEntries() pour pouvoir utiliser votre objet avec Zend_Feed::importBuilder(). Par une simple référence d'implémentation vous pouvez utiliser Zend_Feed_Builder, qui prend un tableau dans son constructeur, réalise quelques validations mineures, et peut être utilisé dans la méthode importBuilder(). La méthode getHeader() doit retourner une instance de Zend_Feed_Builder_Header, et getEntries() doit retourner un tableau d'instances Zend_Feed_Builder_Entry
![]() |
Note |
|---|---|
|
Voici un exemple d'utilisation de Zend_Feed::importBuilder() :
<?php // importe un flux atom à partir d'un constructeur personnalisé $atomFeedFromArray = Zend_Feed::importBuilder(new Zend_Feed_Builder($array)); // la ligne suivante est équivalente à celle ci-dessus ; par défaut l'instance Zend_Feed_Atom est retournée $atomFeedFromArray = Zend_Feed::importArray(new Zend_Feed_Builder($array), 'atom'); // importe un flux rss à partir d'un constructeur personnalisé $rssFeedFromArray = Zend_Feed::importArray(new Zend_Feed_Builder($array), 'rss');?>
Pour décharger le contenu d'une instance Zend_Feed_Abstract, vous pouvez utiliser les méthodes send() ou saveXml()
<?php assert($feed instanceof Zend_Feed_Abstract); // décharge le flux dans l'affichage standard print $feed->saveXML(); // envoie les entêtes et décharge le flux $feed->send();?>