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