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 (252 lines) | stat: -rw-r--r-- 15,760 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
<sect1 id="zend.feed.importing">

    <title>Importazione di feed</title>

    <para>
        <code>Zend_Feed</code> consente agli sviluppatori di recuperare i feed con facilità.
        Se si conosce l'URI di un feed è sufficiente utilizzare il metodo <code>Zend_Feed::import()</code>:
    </para>

    <programlisting role="php"><![CDATA[<?php
$feed = Zend_Feed::import('http://feeds.example.com/feedName');]]>
    </programlisting>

    <para>
        E' anche possibile usare <code>Zend_Feed</code> per recuperare il contenuto di un feed da un file o da una variabile stringa in PHP:
    </para>

    <programlisting role="php"><![CDATA[<?php
// importazione di un feed da un file di testo
$feedDaFile = Zend_Feed::importFile('feed.xml');

// importazione di un feed da una variabile stringa in PHP
$feedDaPHP = Zend_Feed::importString($stringaFeed);]]>
    </programlisting>

    <para>
        Ciascuno degli esempi precedenti restituisce un oggetto di una classe che estende <code>Zend_Feed_Abstract</code>, a seconda del tipo di feed.
        Se il feed recuperato con uno dei metodi indicati è un RSS, allora sarà restituito un oggetto <code>Zend_Feed_Rss</code>. Allo stesso modo, verrà restituito un oggetto <code>Zend_Feed_Atom</code> se è stato importato un feed Atom.
        I metodi d'importazione generano un'eccezione <code>Zend_Feed_Exception</code> in caso di errore, come ad esempio un feed non leggibile o non valido.
    </para>

    <sect2 id="zend.feed.importing.custom">

        <title>Feed personalizzati</title>

        <para>
            <code>Zend_Feed</code> consente agli sviluppatori di creare facilmente i propri feed.
            E' sufficiente creare un array ed importarlo con <code>Zend_Feed</code>.
            L'array può essere importato con <code>Zend_Feed::importArray()</code> o con <code>Zend_Feed::importBuilder()</code>. Nell'ultimo caso l'array sarà elaborato al volo da una sorgente di dati personalizzata che implementa <code>Zend_Feed_Builder_Interface</code>.
        </para>

        <sect3 id="zend.feed.importing.custom.importarray">

            <title>Importazione di un array personalizzato</title>

            <programlisting role="php"><![CDATA[<?php
// importazione di un feed da un array
$feedAtomDaArray = Zend_Feed::importArray($array);

// la linea successiva è equivalente alla precedente;
// un'istanza di Zend_Feed_Atom è restituita per impostazione predefinita
$feedAtomDaArray = Zend_Feed::importArray($array, 'atom');

// importazione di un feed RSS da un array
$feedRssDaArray = Zend_Feed::importArray($array, 'rss');]]>
            </programlisting>

            <para>
                Il formato dell'array deve essere conforme alla seguente struttura:
            </para>

            <programlisting role="php"><![CDATA[<?php
array(
      'title'       => 'titolo del feed', // obbligatorio
      'link'        => 'url canonico del feed', // obbligatorio
      'lastUpdate'  => 'data di aggiornamento nel formato timestamp', // opzionale
      'published'   => 'data di pubblicazione nel formato timestamp', // opzionale
      'charset'     => 'set di caratteri per il contenuto testuale', // obbligatorio
      'description' => 'breve descrizione del feed', // opzionale
      'author'      => 'autore/editore del feed', // opzionale
      'email'       => 'indirizzo email dell\'autore', // opzionale
      'webmaster'   => 'indirizzo email della persona responsabile degli aspetti tecnici' // opzionale, ignorato nel formato Atom
      'copyright'   => 'informazioni sul copyright', // opzionale
      'image'       => 'indirizzo dell\'immagine', // opzionale
      'generator'   => 'strumento adottato per generare il feed', // opzionale
      'language'    => 'lingua nella quale è scritto il feed', // opzionale
      'ttl'         => 'lunghezza in minuti del periodo in cui è possibile salvare in cache il feed', // opzionale, ignorato nel formato Atom
      'rating'      => 'L\'immagine per la votazione del canale', // opzionale, ignorato nel formato Atom
      'cloud'       => array(
                             'domain'            => 'dominio del cloud, es. rpc.sys.com' // obbligatorio
                             'port'              => 'porta di connessione' // opzionale, 80 è il valore predefinito
                             'path'              => 'percorso del cloud, es. /RPC2' // obbligatorio
                             'registerProcedure' => 'procedura da chiamare, es. myCloud.rssPleaseNotify' // obbligatorio
                             'protocol'          => 'protocol da usare, es. soap o xml-rpc' // obbligatorio
                             ), // un servizio cloud per essere informato degli aggiornamenti // opzionale, ignorato nel formato Atom
      'textInput'   => array(
                             'title'       => 'l\'etichetta del bottone Submit nel campo di testo' // obbligatorio,
                             'description' => 'spiega il significato del campo di testo' // obbligatorio
                             'name'        => 'il nome dell'oggetto testuale nel campo di testo' // obbligatorio
                             'link'        => 'l'indirizzo dello script CGI che processa le richieste' // obbligatorio
                             ) // un campo per l'inserimento di testo che può essere mostrato con il feed // opzionale, ignorato nel formato Atom
      'skipHours'   => array(
                             'ora nel formato 24 ore', // es. 13 (1pm)
                             // fino a 24 righe dove il valore è un numero compreso tra 0 e 23
                             ) // Suggerimento agli aggregatori che indica in quali ore è consigliato saltare l'aggiornamento // opzionale, ignorato nel formato Atom
      'skipDays '   => array(
                             'il giorno da saltare', // es. Monday
                             // fino a 7 righe dove il valore è Monday, Tuesday, Wednesday, Thursday, Friday, Saturday o Sunday
                             ) // Suggerimento agli aggregatori che indica in quali giorni è consigliato saltare l'aggiornamento // opzionale, ignorato nel formato Atom
      'itunes'      => array(
                             'author'       => 'Colonna corrispondente all\'artista' // opzionale, impostazione predefinita l'autore principale
                             'owner'        => array(
                                                     'name' => 'nome del proprietario' // opzionale, impostazione predefinita l'autore principale
                                                     'email' => 'email del proprietario' // opzionale, impostazione predefinita l'autore principale
                                                     ) // Proprietario del podcast // opzionale
                             'image'        => 'immagine album/podcast' // opzionale, impostazione predefinita l'immagine principale
                             'subtitle'     => 'sintetica descrizione description' // opzionale, impostazione predefinita la descrizione principale
                             'summary'      => 'completa descrizione' // opzionale, impostazione predefinita la descrizione principale
                             'block'        => 'Non mostrare l\'episodio (yes|no)' // opzionale
                             'category'     => array(
                                                     array('main' => 'categoria principale', // obbligatorio
                                                           'sub'  => 'categoria secondaria' // opzionale
                                                           ),
                                                     // fino a 3 righe
                                                     ) // 'Colonna categoria e nella navigazione nell'iTunes Music Store' // obbligatorio
                             'explicit'     => 'immagine avviso contenuti espliciti (yes|no|clean)' // opzionale
                             'keywords'     => 'una lista di categorie (fino a 12) separate da virgola' // opzionale
                             'new-feed-url' => 'utilizzato per informare iTunes di un nuovo indirizzo del feed' // opzionale
                             ) // Itunes extension data // opzionale, ignorato nel formato Atom
      'entries'     => array(
                             array(
                                   'title'        => 'titolo dell\'elemento del feed', // obbligatorio
                                   'link'         => 'indirizzo ad un elemento del feed', // obbligatorio
                                   'description'  => 'breve versione dell\'elemento del feed', // solo testo, no html, obbligatorio
                                   'guid'         => 'id dell'articolo, il link è utilizzato come alternativa', // opzionale
                                   'content'      => 'versione completa', // può contenere html, opzionale
                                   'lastUpdate'   => 'data di pubblicazione nel formato timestamp', // opzionale
                                   'comments'     => 'pagina dei commenti dell\'elemento del feed', // opzionale
                                   'commentRss'   => 'il feed dei commenti associati all\'elemento', // opzionale
                                   'source'       => array(
                                                           'title' => 'titolo della sorgente originale' // obbligatorio,
                                                           'url' => 'url della sorgente originale' // obbligatorio
                                                           ) // sorgente originale dell'elemento del feed // opzionale
                                   'category'     => array(
                                                           array(
                                                                 'term' => 'l\'etichetta della prima categoria' // obbligatorio,
                                                                 'scheme' => 'url che identifica uno schema di categoria' // opzionale
                                                                 ),
                                                           array(
                                                                 // dati per il secondo elemento ed elementi successivi
                                                                 )
                                                           ) // elenco delle categorie // opzionale
                                   'enclosure'    => array(
                                                           array(
                                                                 'url' => 'url del contenuto multimediale collegato' // obbligatorio
                                                                 'type' => 'mime type del contenuto multimediale' // opzionale
                                                                 'length' => 'lunghezza in byte del contenuto multimediale collegato' // opzionale
                                                                 ),
                                                           array(
                                                                 // dati per il secondo elemento multimediale ed elementi successivi
                                                                 )
                                                           ) // elenco degli elementi multimediali per l'elemento del feed // opzionale
                                   ),
                             array(
                                   // dati per il secondo elemento del feed ed elementi successivi
                                   )
                             )
       );]]>
            </programlisting>

            <para>
                Riferimenti:
                <itemizedlist>
                    <listitem>
                        <para>
                            Specifiche RSS 2.0: <ulink url="http://blogs.law.harvard.edu/tech/rss">RSS 2.0</ulink>
                        </para>
                    </listitem>
                    <listitem>
                        <para>
                            Specifiche Atom: <ulink url="http://tools.ietf.org/html/rfc4287">RFC 4287</ulink>
                        </para>
                    </listitem>
                    <listitem>
                        <para>
                            Specifiche WFW: <ulink url="http://wellformedweb.org/news/wfw_namespace_elements">Well
                            Formed Web</ulink>
                        </para>
                    </listitem>
                    <listitem>
                        <para>
                            Specifiche iTunes:
                            <ulink url="http://www.apple.com/itunes/store/podcaststechspecs.html">Specifiche Tecniche iTunes</ulink>
                        </para>
                    </listitem>
                </itemizedlist>
            </para>

        </sect3>

        <sect3 id="zend.feed.importing.custom.importbuilder">

            <title>Importazione di una sorgente di dati personalizzata</title>

            <para>
                E' possibile creare un'istanza di <code>Zend_Feed</code> da una qualsiasi sorgente di dati che implementa <code>Zend_Feed_Builder_Interface</code>.
                E' sufficiente implementare i metodi <code>getHeader()</code> e <code>getEntries()</code> per essere in grado di utilizzare il proprio oggetto con <code>Zend_Feed::importBuilder()</code>.
                Come semplice esempio di implementazione è possibile utilizzare <code>Zend_Feed::importBuilder()</code>, che accetta un array in ingresso, esegue alcune validazioni minori ed infine può essere utilizzato nel metodo <code>importBuilder()</code>.
                Il metodo <code>getHeader()</code> deve restituire un'istanza di <code>Zend_Feed_Builder_Header</code> e <code>getEntries()</code> deve restituire un array di istanze di <code>Zend_Feed_Builder_Entry</code>.
            </para>

            <note>
                <para>
                    <code>Zend_Feed_Builder</code> è utile come concreta implementazione per dimostrare l'utilizzo.
                    Si consiglia agli utenti la creazione di proprie implementazioni personalizzate di <code>Zend_Feed_Builder_Interface</code>.
                </para>
            </note>

            <para>
                Ecco un esempio di utilizzo di <code>Zend_Feed::importBuilder()</code>:
            </para>

            <programlisting role="php"><![CDATA[<?php
// importazione di un feed da un costruttore personalizzato
$feedAtomDaArray = Zend_Feed::importBuilder(new Zend_Feed_Builder($array));

// la linea successiva è equivalente alla precedente;
// un'istanza di Zend_Feed_Atom è restituita per impostazione predefinita
$feedAtomDaArray = Zend_Feed::importArray(new Zend_Feed_Builder($array), 'atom');

// importazione di un feed RSS da un costruttore personalizzato
$feedRssDaArray = Zend_Feed::importArray(new Zend_Feed_Builder($array), 'rss');]]>
            </programlisting>

        </sect3>

        <sect3 id="zend.feed.importing.custom.dump">

            <title>Stampa del contenuto di un feed</title>

            <para>
                Per stampare il contenuto di un'istanza di <code>Zend_Feed_Abstract</code> è possibile utilizzare i metodi <code>send()</code> o <code>saveXml()</code>.
            </para>

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

// stampa il feed su standard output
print $feed->saveXML();

// invia gli header http e stampa il feed
$feed->send();]]>
            </programlisting>

        </sect3>

    </sect2>

</sect1>
<!--
vim:se ts=4 sw=4 et:
-->