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:
-->
|