File: Zend_Feed-Importing.xml

package info (click to toggle)
zendframework 1.12.9%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: jessie-kfreebsd
  • size: 133,584 kB
  • sloc: xml: 1,311,829; php: 570,173; sh: 170; makefile: 125; sql: 121
file content (367 lines) | stat: -rw-r--r-- 14,175 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 24249 -->
<!-- Reviewed: no -->
<sect1 id="zend.feed.importing">
    <title>Importer des flux</title>

    <para>
        <classname>Zend_Feed</classname> permet aux développeurs d'obtenir très facilement
        des flux. Si vous connaissez l'URI d'un flux, utilisez simplement la méthode
        <methodname>Zend_Feed::import()</methodname>&#160;:
    </para>

    <programlisting language="php"><![CDATA[
$flux = Zend_Feed::import('http://flux.example.com/nomDuFlux');
]]></programlisting>

    <para>
        Vous pouvez aussi utiliser <classname>Zend_Feed</classname> pour aller chercher le
        contenu d'un flux à partir d'un fichier ou d'une chaîne <acronym>PHP</acronym>&#160;:
    </para>

    <programlisting language="php"><![CDATA[
// 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);
]]></programlisting>

    <para>
        Dans chacun des exemples ci-dessus, une instance d'une classe étendant
        <classname>Zend_Feed_Abstract</classname> est renvoyée en cas de succès, selon le type du
        flux. Si un flux <acronym>RSS</acronym> a été obtenu au moyen de l'une des méthodes d'importation décrites
        ci-dessus, alors un objet <classname>Zend_Feed_Rss</classname> sera renvoyé. Par contre, si
        un flux Atom a été importé, alors un objet <classname>Zend_Feed_Atom</classname> est
        renvoyé. Les méthodes d'importation déclencheront aussi une exception
        <classname>Zend_Feed_Exception</classname> en cas d'échec, par exemple si le flux est
        illisible ou malformé.
    </para>

    <sect2 id="zend.feed.importing.custom">
        <title>Flux personnalisés</title>

        <para>
            <classname>Zend_Feed</classname> 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
            <methodname>Zend_Feed::importArray()</methodname> ou avec
            <methodname>Zend_Feed::importBuilder()</methodname>. Dans ce dernier cas, le tableau sera
            calculé instantanément par une source de données personnalisée implémentant
            <classname>Zend_Feed_Builder_Interface</classname>.
        </para>

        <sect3 id="zend.feed.importing.custom.importarray">
            <title>Importer un tableau personnalisé</title>

            <programlisting language="php"><![CDATA[
// 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');
]]></programlisting>

            <para>Le format du tableau doit être conforme à cette structure&#160;:</para>

            <programlisting language="php"><![CDATA[
array(
    // obligatoire
    'title'       => 'titre du flux',
    'link'        => 'url canonique du flux',

    // optionel
    'lastUpdate'  => 'date de la mise à jour au format timestamp',
    'published'   => 'date de la publication au format timestamp',

    // obligatoire
    'charset'     => 'charset des données textuelles',

    // optionel
    'description' => 'description courte du flux',
    'author'      => 'auteur du flux',
    'email'       => 'email de l'auteur du flux',

     // optionel, ignoré si le flux est de type atom
    'webmaster'   => 'email de la personne responsable'
                   . 'en cas de problème technique'

    // optionel
    'copyright'   => 'informations de copyright',
    'image'       => 'url de l'image',
    'generator'   => 'générateur du flux',
    'language'    => 'langue dans la quelle le flux est écrit',

    // optionel, ignoré si le flux est de type atom
    'ttl'         => 'combien de temps en minutes un flux peut être'
                   . 'mis en cache avant rafraichissement',
    'rating'      => 'l'évaluation PICS du canal',

    // optionel, ignoré si le flux est de type atom
    // un nuage pour être averti des mises à jour
    'cloud'       => array(
        // obligatoire
        'domain'            => 'domaine du nuage, ex. rpc.sys.com',

        // optionel, par défault port 80
        'port'              => 'port de connexion',

        // obligatoire
        'path'              => 'chemin du nuage, ex. /RPC2',
        'registerProcedure' => 'procédure à appeler, '
                             . 'ex. myCloud.rssPleaseNotify',
        'protocol'          => 'protocole à utiliser , ex. soap ou xml-rpc',
    ),

    // optionel, ignoré si le flux est de type atom
    // une boîte de saisie qui peut être montrée avec le flux
    'textInput'   => array(
        // obligatoire
        'title'       => 'l'intitulé du bouton de validation '
                       . 'de la boîte de saisie',
        'description' => 'explication de la boîte de saisie',
        'name'        => 'le nom de l'objet texte',
        'link'        => 'l'URL du CGI qui va analyser la requête',
    )

    // optionel, ignoré si le flux est de type atom
    // Information disant aux aggrégateurs quelles heures ils peuvent ignorer
    'skipHours'   => array(
        // jusqu'à 24 lignes dont les valeurs
        // sont des nombres commpris entre 0 et 23
        // ex. 13 (1pm)
        'heures dans le format 24H',
    )

    // optionel, ignoré si le flux est de type atom
    // Information disant aux aggrégateurs quels jours ils peuvent ignorer
    'skipDays '   => array(
        // jusqu'à 7 lignes dont les valeurs peuvent être
        // Monday, Tuesday, Wednesday, Thursday, Friday, Saturday or Sunday
        // ex. Monday
        'jour'
    )

    // optionel, ignoré si le flux est de type atom
    // Données d'extension iTunes
    'itunes'      => array(
        // optionel, par défaut l'auteur principal
        'author'       => 'nom de l'artiste',

        // optionel, default l'auteur principal
        'owner'        => array(
            'name'  => 'nom du propriétaire' ,
            'email' => 'email du propriétaire',
        )

        // optionel, default to the main image value
        'image'        => 'image de l'album/podcast',

        // optionel, default to the main description value
        'subtitle'     => 'description courte',

        // optionel, default to the main description value
        'summary'      => 'description longue',

        // optionel
        'block'        => 'empêcher l'apparition d'un épisode (yes|no)',

        // obligatoire, catégorie et information de recherche
        // dans iTunes Music Store
        'category'     => array(
            // jusqu'à 3 lignes
            array(
                // obligatoire
                'main' => 'catégorie principale',
                // optionel
                'sub'  => 'sous-catégorie'
            ),
        )

        // optionel
        'explicit'     => 'graphique d'avertissement parental (yes|no|clean)',
        'keywords'     => 'une liste d'au maximum 12 mot clés'
                        . 'séparés par des virgules',
        'new-feed-url' => 'utiliser pour informer iTunes'
                        . 'd'un nouvel URL de flux',
    )

    'entries'     => array(
        array(
            // obligatoire
            'title'        => 'titre de l'item',
            'link'         => 'url de cet item',

            // obligatoire, seulement du text, pas d'html
            'description'  => 'version raccourci du texte',

            // optionel
            'guid'         => 'id de l'article, si aucun alors'
                            . 'la valeur link est utilisée',

             // optionel, peut contenir html
            'content'      => 'version complète de l'information',

            // optionel
            'lastUpdate'   => 'date de publication au format timestamp',
            'comments'     => 'page de commentaires de l'item',
            'commentRss'   => 'l'url du flux des commentaires associés',

            // optionel, source originale de l'item
            'source'       => array(
                // obligatoire
                'title' => 'titre de la source originale',
                'url' => 'url de la source originale'
            )

            // optionel, liste des catégories attachées
            'category'     => array(
                array(
                    // obligatoire
                    'term' => 'intitulé de la première catégorie',

                    // optionel
                    'scheme' => 'url qui décrit l'organisation de la catégorie'
                ),
                array(
                    //données de la seconde catégorie et ainsi de suite
                )
            ),

            // optionel, liste des pièces jointes à l'item
            'enclosure'    => array(
                array(
                    // obligatoire
                    'url' => 'url de la pièce jointe',

                    // optionel
                    'type' => 'type mime de la pièce jointe',
                    'length' => 'length de la pièce jointe en octets'
                ),
                array(
                    //données de la seconde pièce jointe et ainsi de suite
                )
            )
        ),

        array(
            //données du second item et ainsi de suite
        )
    )
);
]]></programlisting>

            <para>
                Références :
                <itemizedlist>
                    <listitem>
                        <para>Spécification <acronym>RSS</acronym> 2.0&#160;:
                        <ulink url="http://blogs.law.harvard.edu/tech/rss">RSS 2.0</ulink>
                    </para>

                </listitem>

                <listitem>
                    <para>
                        Spécification Atom&#160;:
                        <ulink url="http://tools.ietf.org/html/rfc4287">RFC 4287</ulink>
                    </para>

                </listitem>

                <listitem>
                    <para>
                        Spécification WFW&#160;:
                        <ulink url="http://wellformedweb.org/news/wfw_namespace_elements">Well
                        Formed Web</ulink>
                    </para>

                </listitem>

                <listitem>
                    <para>
                        Spécification iTunes&#160;:
                        <ulink url="http://www.apple.com/itunes/store/podcaststechspecs.html">
                        iTunes Technical Specifications</ulink>
                    </para>

                </listitem>

            </itemizedlist></para>

        </sect3>

        <sect3 id="zend.feed.importing.custom.importbuilder">
            <title>Importer une source de données personnalisée</title>

            <para>
                Vous pouvez créer une instance Zeed_Feed à partir de n'importe quelle source
                de données implémentant <classname>Zend_Feed_Builder_Interface</classname>. Vous
                devez juste implémenter les méthodes <methodname>getHeader()</methodname> et
                <methodname>getEntries()</methodname> pour pouvoir utiliser votre objet avec
                <methodname>Zend_Feed::importBuilder()</methodname>. Par une simple référence
                d'implémentation vous pouvez utiliser <classname>Zend_Feed_Builder</classname>, qui
                prend un tableau dans son constructeur, réalise quelques validations mineures, et
                peut être utilisé dans la méthode <methodname>importBuilder()</methodname>. La méthode
                <methodname>getHeader()</methodname> doit retourner une instance de
                <classname>Zend_Feed_Builder_Header</classname>, et <methodname>getEntries()</methodname> doit
                retourner un tableau d'instances
                <classname>Zend_Feed_Builder_Entry</classname>
            </para>

            <note>
                <para>
                    <classname>Zend_Feed_Builder</classname> fournit une mise en oeuvre
                    concrète afin de montrer l'utilisation. Les utilisateurs sont encouragés à
                    faire leurs classes propres mettre en oeuvre
                    <classname>Zend_Feed_Builder_Interface</classname>.
                </para>
            </note>

            <para>
                Voici un exemple d'utilisation de
                <methodname>Zend_Feed::importBuilder()</methodname>&#160;:
            </para>

            <programlisting language="php"><![CDATA[
// 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::importBuilder(new Zend_Feed_Builder($array), 'atom');

// importe un flux rss à partir d'un constructeur personnalisé
$rssFeedFromArray =
    Zend_Feed::importBuilder(new Zend_Feed_Builder($array), 'rss');
]]></programlisting>

        </sect3>

        <sect3 id="zend.feed.importing.custom.dump">
            <title>Décharger le contenu d'un flux</title>

            <para>
                Pour décharger le contenu d'une instance
                <classname>Zend_Feed_Abstract</classname>, vous pouvez utiliser les méthodes
                <methodname>send()</methodname> ou <code>saveXml().</code>
            </para>

            <programlisting language="php"><![CDATA[
assert($feed instanceof Zend_Feed_Abstract);

// décharge le flux dans l'affichage standard
print $feed->saveXML();

// envoie les en-têtes et décharge le flux
$feed->send();
]]></programlisting>
        </sect3>
    </sect2>
</sect1>