1 <?xml version="1.0" encoding="utf-8"?>
2 <!-- EN-Revision: 18274 -->
4 <sect1 id="zend.feed.importing">
5 <title>Importer des flux</title>
8 <classname>Zend_Feed</classname> permet aux développeurs d'obtenir très facilement
9 des flux. Si vous connaissez l'URI d'un flux, utilisez simplement la méthode
10 <methodname>Zend_Feed::import()</methodname> :
13 <programlisting language="php"><![CDATA[
14 $flux = Zend_Feed::import('http://flux.example.com/nomDuFlux');
18 Vous pouvez aussi utiliser <classname>Zend_Feed</classname> pour aller chercher le
19 contenu d'un flux à partir d'un fichier ou d'une chaîne <acronym>PHP</acronym> :
22 <programlisting language="php"><![CDATA[
23 // on importe un flux à partir d'un fichier texte
24 $fluxAPartirDeFichierTexte = Zend_Feed::importFile('flux.xml');
26 // on importe un flux à partir d'une variable PHP de type chaîne
27 $fluxAPartirDePHP = Zend_Feed::importString($chaineFlux);
31 Dans chacun des exemples ci-dessus, une instance d'une classe étendant
32 <classname>Zend_Feed_Abstract</classname> est renvoyée en cas de succès, selon le type du
33 flux. Si un flux <acronym>RSS</acronym> a été obtenu au moyen de l'une des méthodes d'importation décrites
34 ci-dessus, alors un objet <classname>Zend_Feed_Rss</classname> sera renvoyé. Par contre, si
35 un flux Atom a été importé, alors un objet <classname>Zend_Feed_Atom</classname> est
36 renvoyé. Les méthodes d'importation déclencheront aussi une exception
37 <classname>Zend_Feed_Exception</classname> en cas d'échec, par exemple si le flux est
38 illisible ou malformé.
41 <sect2 id="zend.feed.importing.custom">
42 <title>Flux personnalisés</title>
45 <classname>Zend_Feed</classname> permet aux développeurs de créer du flux
46 personnalisé très facilement. Vous devez juste créer un tableau et l'importer avec
47 Zend_Feed. Ce tableau peut être importé avec
48 <methodname>Zend_Feed::importArray()</methodname> ou avec
49 <methodname>Zend_Feed::importBuilder()</methodname>. Dans ce dernier cas, le tableau sera
50 calculé instantanément par une source de données personnalisée implémentant
51 <classname>Zend_Feed_Builder_Interface</classname>.
54 <sect3 id="zend.feed.importing.custom.importarray">
55 <title>Importer un tableau personnalisé</title>
57 <programlisting language="php"><![CDATA[
58 // on importe un flux atom à partir d'un tableau
59 $atomFeedFromArray = Zend_Feed::importArray($array);
61 // la ligne suivante est équivalente à celle ci-dessus ;
62 // par défaut l'instance Zend_Feed_Atom est retournée
63 $atomFeedFromArray = Zend_Feed::importArray($array, 'atom');
65 // on importe un flux rss à partir d'un tableau
66 $rssFeedFromArray = Zend_Feed::importArray($array, 'rss');
69 <para>Le format du tableau doit être conforme à cette structure :</para>
71 <programlisting language="php"><![CDATA[
74 'title' => 'titre du flux',
75 'link' => 'url canonique du flux',
78 'lastUpdate' => 'date de la mise à jour au format timestamp',
79 'published' => 'date de la publication au format timestamp',
82 'charset' => 'charset des données textuelles',
85 'description' => 'description courte du flux',
86 'author' => 'auteur du flux',
87 'email' => 'email de l'auteur du flux',
89 // optionel, ignoré si le flux est de type atom
90 'webmaster' => 'email de la personne responsable'
91 . 'en cas de problème technique'
94 'copyright' => 'informations de copyright',
95 'image' => 'url de l'image',
96 'generator' => 'générateur du flux',
97 'language' => 'langue dans la quelle le flux est écrit',
99 // optionel, ignoré si le flux est de type atom
100 'ttl' => 'combien de temps en minutes un flux peut être'
101 . 'mis en cache avant rafraichissement',
102 'rating' => 'l'évaluation PICS du canal',
104 // optionel, ignoré si le flux est de type atom
105 // un nuage pour être averti des mises à jour
108 'domain' => 'domaine du nuage, ex. rpc.sys.com',
110 // optionel, par défault port 80
111 'port' => 'port de connexion',
114 'path' => 'chemin du nuage, ex. /RPC2',
115 'registerProcedure' => 'procédure à appeler, '
116 . 'ex. myCloud.rssPleaseNotify',
117 'protocol' => 'protocole à utiliser , ex. soap ou xml-rpc',
120 // optionel, ignoré si le flux est de type atom
121 // une boîte de saisie qui peut être montrée avec le flux
122 'textInput' => array(
124 'title' => 'l'intitulé du bouton de validation '
125 . 'de la boîte de saisie',
126 'description' => 'explication de la boîte de saisie',
127 'name' => 'le nom de l'objet texte',
128 'link' => 'l'URL du CGI qui va analyser la requête',
131 // optionel, ignoré si le flux est de type atom
132 // Information disant aux aggrégateurs quelles heures ils peuvent ignorer
133 'skipHours' => array(
134 // jusqu'à 24 lignes dont les valeurs
135 // sont des nombres commpris entre 0 et 23
137 'heures dans le format 24H',
140 // optionel, ignoré si le flux est de type atom
141 // Information disant aux aggrégateurs quels jours ils peuvent ignorer
142 'skipDays ' => array(
143 // jusqu'à 7 lignes dont les valeurs peuvent être
144 // Monday, Tuesday, Wednesday, Thursday, Friday, Saturday or Sunday
149 // optionel, ignoré si le flux est de type atom
150 // Données d'extension iTunes
152 // optionel, par défaut l'auteur principal
153 'author' => 'nom de l'artiste',
155 // optionel, default l'auteur principal
157 'name' => 'nom du propriétaire' ,
158 'email' => 'email du propriétaire',
161 // optionel, default to the main image value
162 'image' => 'image de l'album/podcast',
164 // optionel, default to the main description value
165 'subtitle' => 'description courte',
167 // optionel, default to the main description value
168 'summary' => 'description longue',
171 'block' => 'empêcher l'apparition d'un épisode (yes|no)',
173 // obligatoire, catégorie et information de recherche
174 // dans iTunes Music Store
179 'main' => 'catégorie principale',
181 'sub' => 'sous-catégorie'
186 'explicit' => 'graphique d'avertissement parental (yes|no|clean)',
187 'keywords' => 'une liste d'au maximum 12 mot clés'
188 . 'séparés par des virgules',
189 'new-feed-url' => 'utiliser pour informer iTunes'
190 . 'd'un nouvel URL de flux',
196 'title' => 'titre de l'item',
197 'link' => 'url de cet item',
199 // obligatoire, seulement du text, pas d'html
200 'description' => 'version raccourci du texte',
203 'guid' => 'id de l'article, si aucun alors'
204 . 'la valeur link est utilisée',
206 // optionel, peut contenir html
207 'content' => 'version complète de l'information',
210 'lastUpdate' => 'date de publication au format timestamp',
211 'comments' => 'page de commentaires de l'item',
212 'commentRss' => 'l'url du flux des commentaires associés',
214 // optionel, source originale de l'item
217 'title' => 'titre de la source originale',
218 'url' => 'url de la source originale'
221 // optionel, liste des catégories attachées
225 'term' => 'intitulé de la première catégorie',
228 'scheme' => 'url qui décrit l'organisation de la catégorie'
231 //données de la seconde catégorie et ainsi de suite
235 // optionel, liste des pièces jointes à l'item
236 'enclosure' => array(
239 'url' => 'url de la pièce jointe',
242 'type' => 'type mime de la pièce jointe',
243 'length' => 'length de la pièce jointe en octets'
246 //données de la seconde pièce jointe et ainsi de suite
252 //données du second item et ainsi de suite
262 <para>Spécification <acronym>RSS</acronym> 2.0 :
263 <ulink url="http://blogs.law.harvard.edu/tech/rss">RSS 2.0</ulink>
270 Spécification Atom :
271 <ulink url="http://tools.ietf.org/html/rfc4287">RFC 4287</ulink>
278 Spécification WFW :
279 <ulink url="http://wellformedweb.org/news/wfw_namespace_elements">Well
287 Spécification iTunes :
288 <ulink url="http://www.apple.com/itunes/store/podcaststechspecs.html">
289 iTunes Technical Specifications</ulink>
294 </itemizedlist></para>
298 <sect3 id="zend.feed.importing.custom.importbuilder">
299 <title>Importer une source de données personnalisée</title>
302 Vous pouvez créer une instance Zeed_Feed à partir de n'importe quelle source
303 de données implémentant <classname>Zend_Feed_Builder_Interface</classname>. Vous
304 devez juste implémenter les méthodes <methodname>getHeader()</methodname> et
305 <methodname>getEntries()</methodname> pour pouvoir utiliser votre objet avec
306 <methodname>Zend_Feed::importBuilder()</methodname>. Par une simple référence
307 d'implémentation vous pouvez utiliser <classname>Zend_Feed_Builder</classname>, qui
308 prend un tableau dans son constructeur, réalise quelques validations mineures, et
309 peut être utilisé dans la méthode <methodname>importBuilder()</methodname>. La méthode
310 <methodname>getHeader()</methodname> doit retourner une instance de
311 <classname>Zend_Feed_Builder_Header</classname>, et <methodname>getEntries()</methodname> doit
312 retourner un tableau d'instances
313 <classname>Zend_Feed_Builder_Entry</classname>
318 <classname>Zend_Feed_Builder</classname> fournit une mise en oeuvre
319 concrète afin de montrer l'utilisation. Les utilisateurs sont encouragés à
320 faire leurs classes propres mettre en oeuvre
321 <classname>Zend_Feed_Builder_Interface</classname>.
326 Voici un exemple d'utilisation de
327 <methodname>Zend_Feed::importBuilder()</methodname> :
330 <programlisting language="php"><![CDATA[
331 // importe un flux atom à partir d'un constructeur personnalisé
333 Zend_Feed::importBuilder(new Zend_Feed_Builder($array));
335 // la ligne suivante est équivalente à celle ci-dessus ;
336 // par défaut l'instance Zend_Feed_Atom est retournée
338 Zend_Feed::importBuilder(new Zend_Feed_Builder($array), 'atom');
340 // importe un flux rss à partir d'un constructeur personnalisé
342 Zend_Feed::importBuilder(new Zend_Feed_Builder($array), 'rss');
347 <sect3 id="zend.feed.importing.custom.dump">
348 <title>Décharger le contenu d'un flux</title>
351 Pour décharger le contenu d'une instance
352 <classname>Zend_Feed_Abstract</classname>, vous pouvez utiliser les méthodes
353 <methodname>send()</methodname> ou <code>saveXml().</code>
356 <programlisting language="php"><![CDATA[
357 assert($feed instanceof Zend_Feed_Abstract);
359 // décharge le flux dans l'affichage standard
360 print $feed->saveXML();
362 // envoie les en-têtes et décharge le flux