[ZF-10089] Zend_Log
[zend.git] / documentation / manual / fr / module_specs / Zend_Feed-Importing.xml
blobd059e3e607eab692f88f10c7b44e50e6dae4aeb3
1 <?xml version="1.0" encoding="utf-8"?>
2 <!-- EN-Revision: 18274 -->
3 <!-- Reviewed: no -->
4 <sect1 id="zend.feed.importing">
5     <title>Importer des flux</title>
7     <para>
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>&#160;:
11     </para>
13     <programlisting language="php"><![CDATA[
14 $flux = Zend_Feed::import('http://flux.example.com/nomDuFlux');
15 ]]></programlisting>
17     <para>
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>&#160;:
20     </para>
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);
28 ]]></programlisting>
30     <para>
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é.
39     </para>
41     <sect2 id="zend.feed.importing.custom">
42         <title>Flux personnalisés</title>
44         <para>
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>.
52         </para>
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');
67 ]]></programlisting>
69             <para>Le format du tableau doit être conforme à cette structure&#160;:</para>
71             <programlisting language="php"><![CDATA[
72 array(
73     // obligatoire
74     'title'       => 'titre du flux',
75     'link'        => 'url canonique du flux',
77     // optionel
78     'lastUpdate'  => 'date de la mise à jour au format timestamp',
79     'published'   => 'date de la publication au format timestamp',
81     // obligatoire
82     'charset'     => 'charset des données textuelles',
84     // optionel
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'
93     // optionel
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
106     'cloud'       => array(
107         // obligatoire
108         'domain'            => 'domaine du nuage, ex. rpc.sys.com',
110         // optionel, par défault port 80
111         'port'              => 'port de connexion',
113         // obligatoire
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',
118     ),
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(
123         // obligatoire
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',
129     )
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
136         // ex. 13 (1pm)
137         'heures dans le format 24H',
138     )
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
145         // ex. Monday
146         'jour'
147     )
149     // optionel, ignoré si le flux est de type atom
150     // Données d'extension iTunes
151     'itunes'      => array(
152         // optionel, par défaut l'auteur principal
153         'author'       => 'nom de l'artiste',
155         // optionel, default l'auteur principal
156         'owner'        => array(
157             'name'  => 'nom du propriétaire' ,
158             'email' => 'email du propriétaire',
159         )
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',
170         // optionel
171         'block'        => 'empêcher l'apparition d'un épisode (yes|no)',
173         // obligatoire, catégorie et information de recherche
174         // dans iTunes Music Store
175         'category'     => array(
176             // jusqu'à 3 lignes
177             array(
178                 // obligatoire
179                 'main' => 'catégorie principale',
180                 // optionel
181                 'sub'  => 'sous-catégorie'
182             ),
183         )
185         // optionel
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',
191     )
193     'entries'     => array(
194         array(
195             // obligatoire
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',
202             // optionel
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',
209             // optionel
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
215             'source'       => array(
216                 // obligatoire
217                 'title' => 'titre de la source originale',
218                 'url' => 'url de la source originale'
219             )
221             // optionel, liste des catégories attachées
222             'category'     => array(
223                 array(
224                     // obligatoire
225                     'term' => 'intitulé de la première catégorie',
227                     // optionel
228                     'scheme' => 'url qui décrit l'organisation de la catégorie'
229                 ),
230                 array(
231                     //données de la seconde catégorie et ainsi de suite
232                 )
233             ),
235             // optionel, liste des pièces jointes à l'item
236             'enclosure'    => array(
237                 array(
238                     // obligatoire
239                     'url' => 'url de la pièce jointe',
241                     // optionel
242                     'type' => 'type mime de la pièce jointe',
243                     'length' => 'length de la pièce jointe en octets'
244                 ),
245                 array(
246                     //données de la seconde pièce jointe et ainsi de suite
247                 )
248             )
249         ),
251         array(
252             //données du second item et ainsi de suite
253         )
254     )
256 ]]></programlisting>
258             <para>
259                 Références :
260                 <itemizedlist>
261                     <listitem>
262                         <para>Spécification <acronym>RSS</acronym> 2.0&#160;:
263                         <ulink url="http://blogs.law.harvard.edu/tech/rss">RSS 2.0</ulink>
264                     </para>
266                 </listitem>
268                 <listitem>
269                     <para>
270                         Spécification Atom&#160;:
271                         <ulink url="http://tools.ietf.org/html/rfc4287">RFC 4287</ulink>
272                     </para>
274                 </listitem>
276                 <listitem>
277                     <para>
278                         Spécification WFW&#160;:
279                         <ulink url="http://wellformedweb.org/news/wfw_namespace_elements">Well
280                         Formed Web</ulink>
281                     </para>
283                 </listitem>
285                 <listitem>
286                     <para>
287                         Spécification iTunes&#160;:
288                         <ulink url="http://www.apple.com/itunes/store/podcaststechspecs.html">
289                         iTunes Technical Specifications</ulink>
290                     </para>
292                 </listitem>
294             </itemizedlist></para>
296         </sect3>
298         <sect3 id="zend.feed.importing.custom.importbuilder">
299             <title>Importer une source de données personnalisée</title>
301             <para>
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>
314             </para>
316             <note>
317                 <para>
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>.
322                 </para>
323             </note>
325             <para>
326                 Voici un exemple d'utilisation de
327                 <methodname>Zend_Feed::importBuilder()</methodname>&#160;:
328             </para>
330             <programlisting language="php"><![CDATA[
331 // importe un flux atom à partir d'un constructeur personnalisé
332 $atomFeedFromArray =
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
337 $atomFeedFromArray =
338     Zend_Feed::importBuilder(new Zend_Feed_Builder($array), 'atom');
340 // importe un flux rss à partir d'un constructeur personnalisé
341 $rssFeedFromArray =
342     Zend_Feed::importBuilder(new Zend_Feed_Builder($array), 'rss');
343 ]]></programlisting>
345         </sect3>
347         <sect3 id="zend.feed.importing.custom.dump">
348             <title>Décharger le contenu d'un flux</title>
350             <para>
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>
354             </para>
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
363 $feed->send();
364 ]]></programlisting>
365         </sect3>
366     </sect2>
367 </sect1>