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();?>