Importazione di feed Zend_Feed consente agli sviluppatori di recuperare i feed con facilità. Se si conosce l'URI di un feed è sufficiente utilizzare il metodo Zend_Feed::import(): E' anche possibile usare Zend_Feed per recuperare il contenuto di un feed da un file o da una variabile stringa in PHP: Ciascuno degli esempi precedenti restituisce un oggetto di una classe che estende Zend_Feed_Abstract, a seconda del tipo di feed. Se il feed recuperato con uno dei metodi indicati è un RSS, allora sarà restituito un oggetto Zend_Feed_Rss. Allo stesso modo, verrà restituito un oggetto Zend_Feed_Atom se è stato importato un feed Atom. I metodi d'importazione generano un'eccezione Zend_Feed_Exception in caso di errore, come ad esempio un feed non leggibile o non valido. Feed personalizzati Zend_Feed consente agli sviluppatori di creare facilmente i propri feed. E' sufficiente creare un array ed importarlo con Zend_Feed. L'array può essere importato con Zend_Feed::importArray() o con Zend_Feed::importBuilder(). Nell'ultimo caso l'array sarà elaborato al volo da una sorgente di dati personalizzata che implementa Zend_Feed_Builder_Interface. Importazione di un array personalizzato Il formato dell'array deve essere conforme alla seguente struttura: '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 ) ) );]]> Riferimenti: Specifiche RSS 2.0: RSS 2.0 Specifiche Atom: RFC 4287 Specifiche WFW: Well Formed Web Specifiche iTunes: Specifiche Tecniche iTunes Importazione di una sorgente di dati personalizzata E' possibile creare un'istanza di Zend_Feed da una qualsiasi sorgente di dati che implementa Zend_Feed_Builder_Interface. E' sufficiente implementare i metodi getHeader() e getEntries() per essere in grado di utilizzare il proprio oggetto con Zend_Feed::importBuilder(). Come semplice esempio di implementazione è possibile utilizzare Zend_Feed::importBuilder(), che accetta un array in ingresso, esegue alcune validazioni minori ed infine può essere utilizzato nel metodo importBuilder(). Il metodo getHeader() deve restituire un'istanza di Zend_Feed_Builder_Header e getEntries() deve restituire un array di istanze di Zend_Feed_Builder_Entry. Zend_Feed_Builder è utile come concreta implementazione per dimostrare l'utilizzo. Si consiglia agli utenti la creazione di proprie implementazioni personalizzate di Zend_Feed_Builder_Interface. Ecco un esempio di utilizzo di Zend_Feed::importBuilder(): Stampa del contenuto di un feed Per stampare il contenuto di un'istanza di Zend_Feed_Abstract è possibile utilizzare i metodi send() o saveXml(). saveXML(); // invia gli header http e stampa il feed $feed->send();]]>