Zend_Feed-Importing.xml 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252
  1. <sect1 id="zend.feed.importing">
  2. <title>Importazione di feed</title>
  3. <para>
  4. <code>Zend_Feed</code> consente agli sviluppatori di recuperare i feed con facilità.
  5. Se si conosce l'URI di un feed è sufficiente utilizzare il metodo <code>Zend_Feed::import()</code>:
  6. </para>
  7. <programlisting role="php"><![CDATA[<?php
  8. $feed = Zend_Feed::import('http://feeds.example.com/feedName');]]>
  9. </programlisting>
  10. <para>
  11. 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:
  12. </para>
  13. <programlisting role="php"><![CDATA[<?php
  14. // importazione di un feed da un file di testo
  15. $feedDaFile = Zend_Feed::importFile('feed.xml');
  16. // importazione di un feed da una variabile stringa in PHP
  17. $feedDaPHP = Zend_Feed::importString($stringaFeed);]]>
  18. </programlisting>
  19. <para>
  20. Ciascuno degli esempi precedenti restituisce un oggetto di una classe che estende <code>Zend_Feed_Abstract</code>, a seconda del tipo di feed.
  21. 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.
  22. 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.
  23. </para>
  24. <sect2 id="zend.feed.importing.custom">
  25. <title>Feed personalizzati</title>
  26. <para>
  27. <code>Zend_Feed</code> consente agli sviluppatori di creare facilmente i propri feed.
  28. E' sufficiente creare un array ed importarlo con <code>Zend_Feed</code>.
  29. 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>.
  30. </para>
  31. <sect3 id="zend.feed.importing.custom.importarray">
  32. <title>Importazione di un array personalizzato</title>
  33. <programlisting role="php"><![CDATA[<?php
  34. // importazione di un feed da un array
  35. $feedAtomDaArray = Zend_Feed::importArray($array);
  36. // la linea successiva è equivalente alla precedente;
  37. // un'istanza di Zend_Feed_Atom è restituita per impostazione predefinita
  38. $feedAtomDaArray = Zend_Feed::importArray($array, 'atom');
  39. // importazione di un feed RSS da un array
  40. $feedRssDaArray = Zend_Feed::importArray($array, 'rss');]]>
  41. </programlisting>
  42. <para>
  43. Il formato dell'array deve essere conforme alla seguente struttura:
  44. </para>
  45. <programlisting role="php"><![CDATA[<?php
  46. array(
  47. 'title' => 'titolo del feed', // obbligatorio
  48. 'link' => 'url canonico del feed', // obbligatorio
  49. 'lastUpdate' => 'data di aggiornamento nel formato timestamp', // opzionale
  50. 'published' => 'data di pubblicazione nel formato timestamp', // opzionale
  51. 'charset' => 'set di caratteri per il contenuto testuale', // obbligatorio
  52. 'description' => 'breve descrizione del feed', // opzionale
  53. 'author' => 'autore/editore del feed', // opzionale
  54. 'email' => 'indirizzo email dell\'autore', // opzionale
  55. 'webmaster' => 'indirizzo email della persona responsabile degli aspetti tecnici' // opzionale, ignorato nel formato Atom
  56. 'copyright' => 'informazioni sul copyright', // opzionale
  57. 'image' => 'indirizzo dell\'immagine', // opzionale
  58. 'generator' => 'strumento adottato per generare il feed', // opzionale
  59. 'language' => 'lingua nella quale è scritto il feed', // opzionale
  60. 'ttl' => 'lunghezza in minuti del periodo in cui è possibile salvare in cache il feed', // opzionale, ignorato nel formato Atom
  61. 'rating' => 'L\'immagine per la votazione del canale', // opzionale, ignorato nel formato Atom
  62. 'cloud' => array(
  63. 'domain' => 'dominio del cloud, es. rpc.sys.com' // obbligatorio
  64. 'port' => 'porta di connessione' // opzionale, 80 è il valore predefinito
  65. 'path' => 'percorso del cloud, es. /RPC2' // obbligatorio
  66. 'registerProcedure' => 'procedura da chiamare, es. myCloud.rssPleaseNotify' // obbligatorio
  67. 'protocol' => 'protocol da usare, es. soap o xml-rpc' // obbligatorio
  68. ), // un servizio cloud per essere informato degli aggiornamenti // opzionale, ignorato nel formato Atom
  69. 'textInput' => array(
  70. 'title' => 'l\'etichetta del bottone Submit nel campo di testo' // obbligatorio,
  71. 'description' => 'spiega il significato del campo di testo' // obbligatorio
  72. 'name' => 'il nome dell'oggetto testuale nel campo di testo' // obbligatorio
  73. 'link' => 'l'indirizzo dello script CGI che processa le richieste' // obbligatorio
  74. ) // un campo per l'inserimento di testo che può essere mostrato con il feed // opzionale, ignorato nel formato Atom
  75. 'skipHours' => array(
  76. 'ora nel formato 24 ore', // es. 13 (1pm)
  77. // fino a 24 righe dove il valore è un numero compreso tra 0 e 23
  78. ) // Suggerimento agli aggregatori che indica in quali ore è consigliato saltare l'aggiornamento // opzionale, ignorato nel formato Atom
  79. 'skipDays ' => array(
  80. 'il giorno da saltare', // es. Monday
  81. // fino a 7 righe dove il valore è Monday, Tuesday, Wednesday, Thursday, Friday, Saturday o Sunday
  82. ) // Suggerimento agli aggregatori che indica in quali giorni è consigliato saltare l'aggiornamento // opzionale, ignorato nel formato Atom
  83. 'itunes' => array(
  84. 'author' => 'Colonna corrispondente all\'artista' // opzionale, impostazione predefinita l'autore principale
  85. 'owner' => array(
  86. 'name' => 'nome del proprietario' // opzionale, impostazione predefinita l'autore principale
  87. 'email' => 'email del proprietario' // opzionale, impostazione predefinita l'autore principale
  88. ) // Proprietario del podcast // opzionale
  89. 'image' => 'immagine album/podcast' // opzionale, impostazione predefinita l'immagine principale
  90. 'subtitle' => 'sintetica descrizione description' // opzionale, impostazione predefinita la descrizione principale
  91. 'summary' => 'completa descrizione' // opzionale, impostazione predefinita la descrizione principale
  92. 'block' => 'Non mostrare l\'episodio (yes|no)' // opzionale
  93. 'category' => array(
  94. array('main' => 'categoria principale', // obbligatorio
  95. 'sub' => 'categoria secondaria' // opzionale
  96. ),
  97. // fino a 3 righe
  98. ) // 'Colonna categoria e nella navigazione nell'iTunes Music Store' // obbligatorio
  99. 'explicit' => 'immagine avviso contenuti espliciti (yes|no|clean)' // opzionale
  100. 'keywords' => 'una lista di categorie (fino a 12) separate da virgola' // opzionale
  101. 'new-feed-url' => 'utilizzato per informare iTunes di un nuovo indirizzo del feed' // opzionale
  102. ) // Itunes extension data // opzionale, ignorato nel formato Atom
  103. 'entries' => array(
  104. array(
  105. 'title' => 'titolo dell\'elemento del feed', // obbligatorio
  106. 'link' => 'indirizzo ad un elemento del feed', // obbligatorio
  107. 'description' => 'breve versione dell\'elemento del feed', // solo testo, no html, obbligatorio
  108. 'guid' => 'id dell'articolo, il link è utilizzato come alternativa', // opzionale
  109. 'content' => 'versione completa', // può contenere html, opzionale
  110. 'lastUpdate' => 'data di pubblicazione nel formato timestamp', // opzionale
  111. 'comments' => 'pagina dei commenti dell\'elemento del feed', // opzionale
  112. 'commentRss' => 'il feed dei commenti associati all\'elemento', // opzionale
  113. 'source' => array(
  114. 'title' => 'titolo della sorgente originale' // obbligatorio,
  115. 'url' => 'url della sorgente originale' // obbligatorio
  116. ) // sorgente originale dell'elemento del feed // opzionale
  117. 'category' => array(
  118. array(
  119. 'term' => 'l\'etichetta della prima categoria' // obbligatorio,
  120. 'scheme' => 'url che identifica uno schema di categoria' // opzionale
  121. ),
  122. array(
  123. // dati per il secondo elemento ed elementi successivi
  124. )
  125. ) // elenco delle categorie // opzionale
  126. 'enclosure' => array(
  127. array(
  128. 'url' => 'url del contenuto multimediale collegato' // obbligatorio
  129. 'type' => 'mime type del contenuto multimediale' // opzionale
  130. 'length' => 'lunghezza in byte del contenuto multimediale collegato' // opzionale
  131. ),
  132. array(
  133. // dati per il secondo elemento multimediale ed elementi successivi
  134. )
  135. ) // elenco degli elementi multimediali per l'elemento del feed // opzionale
  136. ),
  137. array(
  138. // dati per il secondo elemento del feed ed elementi successivi
  139. )
  140. )
  141. );]]>
  142. </programlisting>
  143. <para>
  144. Riferimenti:
  145. <itemizedlist>
  146. <listitem>
  147. <para>
  148. Specifiche RSS 2.0: <ulink url="http://blogs.law.harvard.edu/tech/rss">RSS 2.0</ulink>
  149. </para>
  150. </listitem>
  151. <listitem>
  152. <para>
  153. Specifiche Atom: <ulink url="http://tools.ietf.org/html/rfc4287">RFC 4287</ulink>
  154. </para>
  155. </listitem>
  156. <listitem>
  157. <para>
  158. Specifiche WFW: <ulink url="http://wellformedweb.org/news/wfw_namespace_elements">Well
  159. Formed Web</ulink>
  160. </para>
  161. </listitem>
  162. <listitem>
  163. <para>
  164. Specifiche iTunes:
  165. <ulink url="http://www.apple.com/itunes/store/podcaststechspecs.html">Specifiche Tecniche iTunes</ulink>
  166. </para>
  167. </listitem>
  168. </itemizedlist>
  169. </para>
  170. </sect3>
  171. <sect3 id="zend.feed.importing.custom.importbuilder">
  172. <title>Importazione di una sorgente di dati personalizzata</title>
  173. <para>
  174. E' possibile creare un'istanza di <code>Zend_Feed</code> da una qualsiasi sorgente di dati che implementa <code>Zend_Feed_Builder_Interface</code>.
  175. 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>.
  176. 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>.
  177. 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>.
  178. </para>
  179. <note>
  180. <para>
  181. <code>Zend_Feed_Builder</code> è utile come concreta implementazione per dimostrare l'utilizzo.
  182. Si consiglia agli utenti la creazione di proprie implementazioni personalizzate di <code>Zend_Feed_Builder_Interface</code>.
  183. </para>
  184. </note>
  185. <para>
  186. Ecco un esempio di utilizzo di <code>Zend_Feed::importBuilder()</code>:
  187. </para>
  188. <programlisting role="php"><![CDATA[<?php
  189. // importazione di un feed da un costruttore personalizzato
  190. $feedAtomDaArray = Zend_Feed::importBuilder(new Zend_Feed_Builder($array));
  191. // la linea successiva è equivalente alla precedente;
  192. // un'istanza di Zend_Feed_Atom è restituita per impostazione predefinita
  193. $feedAtomDaArray = Zend_Feed::importArray(new Zend_Feed_Builder($array), 'atom');
  194. // importazione di un feed RSS da un costruttore personalizzato
  195. $feedRssDaArray = Zend_Feed::importArray(new Zend_Feed_Builder($array), 'rss');]]>
  196. </programlisting>
  197. </sect3>
  198. <sect3 id="zend.feed.importing.custom.dump">
  199. <title>Stampa del contenuto di un feed</title>
  200. <para>
  201. Per stampare il contenuto di un'istanza di <code>Zend_Feed_Abstract</code> è possibile utilizzare i metodi <code>send()</code> o <code>saveXml()</code>.
  202. </para>
  203. <programlisting role="php"><![CDATA[<?php
  204. assert($feed instanceof Zend_Feed_Abstract);
  205. // stampa il feed su standard output
  206. print $feed->saveXML();
  207. // invia gli header http e stampa il feed
  208. $feed->send();]]>
  209. </programlisting>
  210. </sect3>
  211. </sect2>
  212. </sect1>
  213. <!--
  214. vim:se ts=4 sw=4 et:
  215. -->