| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286 |
- <sect1 id="zend.feed.importing">
- <title>Importowanie kanałów informacyjnych</title>
- <para>
- <code>Zend_Feed</code> pozwala programistom bardzo łatwo odbierać wiadomości
- z kanałów informacyjnych. Jeśli znasz adres URI kanału, w prosty sposób
- użyj metody <code>Zend_Feed::import()</code>:
- </para>
- <programlisting role="php"><![CDATA[
- $feed = Zend_Feed::import('http://feeds.example.com/feedName');
- ]]>
- </programlisting>
- <para>
- Możesz także użyć <code>Zend_Feed</code> do pobrania zawartości kanału
- z pliku lub z łańcucha znaków PHP:
- </para>
- <programlisting role="php"><![CDATA[
- // importowanie kanału z pliku tekstowego
- $feedFromFile = Zend_Feed::importFile('feed.xml');
- // importowanie kanału z łańcucha znaków PHP
- $feedFromPHP = Zend_Feed::importString($feedString);
- ]]>
- </programlisting>
- <para>
- We wszystkich powyższych przykładach w razie powodzenia operacji zwracany
- jest obiekt klasy rozszerzającej <code>Zend_Feed_Abstract</code>, zależenie
- od typu kanału. Jeśli zostały odebrane dane RSS za pomocą jednej z powyższych
- metod importu, wtedy będzie zwrócony obiekt <code>Zend_Feed_Rss</code>.
- Z drugiej strony, gdy będą importowane dane kanału Atom, zwrócony zostanie
- obiekt <code>Zend_Feed_Atom</code>. Metody importu w razie niepowodzenia
- wyrzucają wyjątek <code>Zend_Feed_Exception</code>, czyli na przykład wtedy
- gdy nie jest możliwe odczytanie kanału lub gdy dane są błędne.
- </para>
- <sect2 id="zend.feed.importing.custom">
- <title>Własne kanały</title>
- <para>
- <code>Zend_Feed</code> pozwala programistom na bardzo łatwe
- tworzenie własnych kanałów. Musisz jedynie utworzyć tablicę i
- zaimportować ją za pomocą Zend_Feed. Ta tablica może być
- zaimportowana za pomocą metody <code>Zend_Feed::importArray()</code>
- lub <code>Zend_Feed::importBuilder()</code>. W tym drugim przypadku
- tablica zostanie utworzona w locie, przez własne źródło danych
- implementujące interfejs <code>Zend_Feed_Builder_Interface</code>.
- </para>
- <sect3 id="zend.feed.importing.custom.importarray">
- <title>Importowanie własnej tablicy</title>
- <programlisting role="php"><![CDATA[
- // importowanie kanału z tablicy
- $atomFeedFromArray = Zend_Feed::importArray($array);
- // poniższy kod odpowiada kodowi powyżej;
- // domyślnie zwracana jest instancja Zend_Feed_Atom
- $atomFeedFromArray = Zend_Feed::importArray($array, 'atom');
- // importowanie kanału rss z tablicy
- $rssFeedFromArray = Zend_Feed::importArray($array, 'rss');
- ]]>
- </programlisting>
- <para>
- Format tablicy musi zgadzać się z taką strukturą:
- </para>
- <programlisting role="php"><![CDATA[
- array(
- 'title' => 'tytuł kanału', //wymagane
- 'link' => 'adres url kanału', //wymagane
- 'lastUpdate' => 'data aktualizacji w postaci uniksowego znacznika czasu', // opcjonalne
- 'published' => 'data publikacji w postaci uniksowego znacznika czasu', //opcjonalne
- 'charset' => 'zestaw znaków dla danych tekstowych', // wymagane
- 'description' => 'krótki opis kanału', //opcjonalne
- 'author' => 'autor kanału', //opcjonalne
- 'email' => 'adres email autora', //opcjonalne
- 'webmaster' => // opcjonalne, ignorowane jeśli używany jest atom
- 'adres osoby odpowiedzialnej' .
- 'za sprawy techniczne'
- 'copyright' => 'informacje o prawach autorskich', //opcjonalne
- 'image' => 'adres obrazka', //opcjonalne
- 'generator' => 'generator', // opcjonalne
- 'language' => 'język w jakim publikowany jest kanał', // opcjonalne
- 'ttl' => // opcjonalne, ignorowane jeśli używany jest atom
- 'na jak długo, w minutach, kanał może' .
- 'być buforowany przed odświeżeniem',
- 'rating' => // opcjonalne, ignorowane jeśli używany jest atom
- 'Ocena PICS dla kanału.',
- 'cloud' => array(
- 'domain' => 'domena usługi cloud, np. rpc.sys.com' // wymagane
- 'port' => 'port usługi to' // opcjonalne, domyślnie wartość 80
- 'path' => 'ścieżka usługi cloud, np. /RPC2' //wymagane
- 'registerProcedure' => 'procedura do wywołania, np. myCloud.rssPleaseNotify' // wymagane
- 'protocol' => 'protokół do użycia, np. soap lub xml-rpc' // wymagane
- ), // dane usługi cloud umożliwiającej powiadamianie użytkowników o zmianach // opcjonalne, ignorowane jeśli używany jest atom
- 'textInput' => array(
- 'title' => 'etykieta przycisku wysyłającego treść pola tekstowego' // wymagane,
- 'description' => 'wyjaśnienie przeznaczenia pola tekstowego' // wymagane
- 'name' => 'nazwa obiektu pola tekstowego' // wymagane
- 'link' => 'adres URL skryptu CGI który przetwarza wysłaną treść' // wymagane
- ) // pole tekstowe które może być wyświetlone wraz z kanałem // opcjonalne, ignorowane jeśli używany jest atom
- 'skipHours' => array(
- 'godzina do pominięcia w formacie 24 godzinnym', // np. 13 (1pm)
- // do 24 wierszy których wartościami mogą być numery między 0 a 23
- ) // Wskazówka mówiąca agregatorom które godziny mogą pominąć // opcjonalne, ignorowane jeśli używany jest atom
- 'skipDays ' => array(
- 'dzień do pominięcia', // np. Monday
- // do 7 wierszy, których wartościami mogą być Monday, Tuesday, Wednesday, Thursday, Friday, Saturday lub Sunday
- ) // Wskazówka mówiąca agregatorom które dni mogą pominąć // opcjonalne, ignorowane jeśli używany jest atom
- 'itunes' => array(
- 'author' => 'nazwa artysty' // opcjonalne, domyślnie wartość z pola author
- 'owner' => array(
- 'name' => 'nazwa właściciela' // opcjonalne, domyślnie wartość z głównego pola author
- 'email' => 'adres email właściciela' // opcjonalne, domyślnie wartość z głównego pola email
- ) // właściciel podcasta // opcjonalne
- 'image' => 'obrazek albumu/podcasta' // opcjonalne, domyślnie wartość z głownego pola image
- 'subtitle' => 'krótki opis' // opcjonalne, domyślnie wartość z głownego pola description
- 'summary' => 'dłuższy opis' // opcjonalne, domyślnie wartość z głownego pola description
- 'block' => 'zapobiega przed pojawieniem się epizodu (yes|no)' // opcjonalne
- 'category' => array(
- array('main' => 'głowna kategoria', // wymagane
- 'sub' => 'podkategoria' // opcjonalne
- ),
- // do 3 wierszy
- ) // 'Dane kategorii w iTunes Music Store Browse' // wymagane
- 'explicit' => 'znaczek kontroli rodzicielskiej (yes|no|clean)' // opcjonalne
- 'keywords' => 'lista maksymalnie 12 słów kluczowych oddzielonych przecinkami' // opcjonalne
- 'new-feed-url' => 'używane aby poinformować iTunes o nowym adresie URL kanału' // opcjonalne
- ) // Dane rozszerzenia Itunes // opcjonalne, ignorowane jeśli używany jest atom
- 'entries' => array(
- array(
- 'title' => 'tytuł wpisu z kanału', //wymagane
- 'link' => 'adres do wpisu z kanału', //wymagane
- 'description' => 'krótka wersja wpisu z kanału', // jedynie tekst, bez html, wymagane
- 'guid' => 'identyfikator artykułu, jeśli nie podany, zostanie użyta wartość z pola link', //opcjonalne
- 'content' => 'długa wersja', // może zawierać html, opcjonalne
- 'lastUpdate' => 'data publikacji w postaci uniksowego znacznika czasu', // opcjonalne
- 'comments' => 'strona komentarzy powiązanych z wpisem w kanale', // opcjonalne
- 'commentRss' => 'adres kanału z powiązanymi komentarzami', // opcjonalne
- 'source' => array(
- 'title' => 'tytuł oryginalnego źródła' // wymagane,
- 'url' => 'adres oryginalnego źródła' // wymagane
- ) // oryginalne źródło wpisu z kanału // opcjonalne
- 'category' => array(
- array(
- 'term' => 'etykieta pierwszej kategorii' // wymagane,
- 'scheme' => 'adres identyfikujący schemat kategoryzowania' // opcjonalne
- ),
- array(
- // dane dla kolejnej kategorii itd.
- )
- ) // lista powiązanych kategorii // opcjonalne
- 'enclosure' => array(
- array(
- 'url' => 'adres powiązanego załącznika' // wymagane
- 'type' => 'typ mime załącznika' // opcjonalne
- 'length' => 'długość załącznika w bajtach' // opcjonalne
- ),
- array(
- // dane drugiego załącznika itd.
- )
- ) // lista załączników dla wpisu kanału // opcjonalne
- ),
- array(
- // dane dla drugiego wpisu itd.
- )
- )
- );
- ]]>
- </programlisting>
- <para>
- Odnośniki:
- <itemizedlist>
- <listitem>
- <para>
- Specyfikacja RSS 2.0: <ulink url="http://blogs.law.harvard.edu/tech/rss">RSS 2.0</ulink>
- </para>
- </listitem>
- <listitem>
- <para>
- Specyfikacja Atom: <ulink url="http://tools.ietf.org/html/rfc4287">RFC 4287</ulink>
- </para>
- </listitem>
- <listitem>
- <para>
- Specyfikacja WFW: <ulink url="http://wellformedweb.org/news/wfw_namespace_elements">Well
- Formed Web</ulink>
- </para>
- </listitem>
- <listitem>
- <para>
- Specyfikacja iTunes:
- <ulink url="http://www.apple.com/itunes/store/podcaststechspecs.html">Specyfikacja
- Techniczna iTunes</ulink>
- </para>
- </listitem>
- </itemizedlist>
- </para>
- </sect3>
- <sect3 id="zend.feed.importing.custom.importbuilder">
- <title>Importowanie własnego źródła danych</title>
- <para>
- Możesz utworzyć instancję Zend_Feed z dowolnego źródła danych
- implementując interfejs <code>Zend_Feed_Builder_Interface</code>.
- Aby użyć swojego obiektu za pomocą metody
- <code>Zend_Feed::importBuilder()</code> musisz po prostu
- zaimplementować metody <code>getHeader()</code> oraz
- <code>getEntries()</code>. Jako przykład implementacji możesz
- użyć klasy <code>Zend_Feed_Builder</code>, która przyjmuje
- tablicę jako argument konstruktora, przeprowadza pewną
- weryfikację, a następnie może być użyta za pomocą metody
- <code>importBuilder()</code>. Metoda <code>getHeader()</code>
- musi zwracać instancję klasy
- <code>Zend_Feed_Builder_Header</code>, a metoda
- <code>getEntries()</code> musi zwracać tablicę instancji klasy
- <code>Zend_Feed_Builder_Entry</code>.
- </para>
- <note>
- <para>
- <code>Zend_Feed_Builder</code> jest konkretną implementacją
- pokazującą sposób użycia. Namawiamy użytkownika do napisania
- własnej klasy, implementującej interfejs
- <code>Zend_Feed_Builder_Interface</code>.
- </para>
- </note>
- <para>
- Oto przykład użycia metody <code>Zend_Feed::importBuilder()</code>:
- </para>
- <programlisting role="php"><![CDATA[
- // importowanie kanału z własnego źródła
- $atomFeedFromArray =
- Zend_Feed::importBuilder(new Zend_Feed_Builder($array));
- // poniższy kod odpowiada kodowi powyżej;
- // domyślnie zwracana jest instancja Zend_Feed_Atom
- $atomFeedFromArray =
- Zend_Feed::importArray(new Zend_Feed_Builder($array), 'atom');
- // importowanie kanału rss z własnego źródła
- $rssFeedFromArray =
- Zend_Feed::importArray(new Zend_Feed_Builder($array), 'rss');
- ]]>
- </programlisting>
- </sect3>
- <sect3 id="zend.feed.importing.custom.dump">
- <title>Zrzucanie zawartości kanału</title>
- <para>
- Aby zrzucić zawartość instancji <code>Zend_Feed_Abstract</code>,
- możesz użyć metody <code>send()</code> lub <code>saveXml()</code>.
- </para>
- <programlisting role="php">
- <![CDATA[
- assert($feed instanceof Zend_Feed_Abstract);
- // zrzuca kanał do standardowego wyjścia
- print $feed->saveXML();
- // wysyła nagłówki oraz zrzuca zawartość kanału
- $feed->send();
- ]]>
- </programlisting>
- </sect3>
- </sect2>
- </sect1>
|