1 <sect1 id="zend.feed.importing">
3 <title>Importowanie kanałów informacyjnych</title>
6 <code>Zend_Feed</code> pozwala programistom bardzo łatwo odbierać wiadomości
7 z kanałów informacyjnych. Jeśli znasz adres URI kanału, w prosty sposób
8 użyj metody <code>Zend_Feed::import()</code>:
11 <programlisting role="php"><![CDATA[
12 $feed = Zend_Feed::import('http://feeds.example.com/feedName');
17 Możesz także użyć <code>Zend_Feed</code> do pobrania zawartości kanału
18 z pliku lub z łańcucha znaków PHP:
21 <programlisting role="php"><![CDATA[
22 // importowanie kanału z pliku tekstowego
23 $feedFromFile = Zend_Feed::importFile('feed.xml');
25 // importowanie kanału z łańcucha znaków PHP
26 $feedFromPHP = Zend_Feed::importString($feedString);
31 We wszystkich powyższych przykładach w razie powodzenia operacji zwracany
32 jest obiekt klasy rozszerzającej <code>Zend_Feed_Abstract</code>, zależenie
33 od typu kanału. Jeśli zostały odebrane dane RSS za pomocą jednej z powyższych
34 metod importu, wtedy będzie zwrócony obiekt <code>Zend_Feed_Rss</code>.
35 Z drugiej strony, gdy będą importowane dane kanału Atom, zwrócony zostanie
36 obiekt <code>Zend_Feed_Atom</code>. Metody importu w razie niepowodzenia
37 wyrzucają wyjątek <code>Zend_Feed_Exception</code>, czyli na przykład wtedy
38 gdy nie jest możliwe odczytanie kanału lub gdy dane są błędne.
41 <sect2 id="zend.feed.importing.custom">
43 <title>Własne kanały</title>
46 <code>Zend_Feed</code> pozwala programistom na bardzo łatwe
47 tworzenie własnych kanałów. Musisz jedynie utworzyć tablicę i
48 zaimportować ją za pomocą Zend_Feed. Ta tablica może być
49 zaimportowana za pomocą metody <code>Zend_Feed::importArray()</code>
50 lub <code>Zend_Feed::importBuilder()</code>. W tym drugim przypadku
51 tablica zostanie utworzona w locie, przez własne źródło danych
52 implementujące interfejs <code>Zend_Feed_Builder_Interface</code>.
55 <sect3 id="zend.feed.importing.custom.importarray">
57 <title>Importowanie własnej tablicy</title>
59 <programlisting role="php"><![CDATA[
60 // importowanie kanału z tablicy
61 $atomFeedFromArray = Zend_Feed::importArray($array);
63 // poniższy kod odpowiada kodowi powyżej;
64 // domyślnie zwracana jest instancja Zend_Feed_Atom
65 $atomFeedFromArray = Zend_Feed::importArray($array, 'atom');
67 // importowanie kanału rss z tablicy
68 $rssFeedFromArray = Zend_Feed::importArray($array, 'rss');
73 Format tablicy musi zgadzać się z taką strukturą:
76 <programlisting role="php"><![CDATA[
78 'title' => 'tytuł kanału', //wymagane
79 'link' => 'adres url kanału', //wymagane
80 'lastUpdate' => 'data aktualizacji w postaci uniksowego znacznika czasu', // opcjonalne
81 'published' => 'data publikacji w postaci uniksowego znacznika czasu', //opcjonalne
82 'charset' => 'zestaw znaków dla danych tekstowych', // wymagane
83 'description' => 'krótki opis kanału', //opcjonalne
84 'author' => 'autor kanału', //opcjonalne
85 'email' => 'adres email autora', //opcjonalne
86 'webmaster' => // opcjonalne, ignorowane jeśli używany jest atom
87 'adres osoby odpowiedzialnej' .
88 'za sprawy techniczne'
89 'copyright' => 'informacje o prawach autorskich', //opcjonalne
90 'image' => 'adres obrazka', //opcjonalne
91 'generator' => 'generator', // opcjonalne
92 'language' => 'język w jakim publikowany jest kanał', // opcjonalne
93 'ttl' => // opcjonalne, ignorowane jeśli używany jest atom
94 'na jak długo, w minutach, kanał może' .
95 'być buforowany przed odświeżeniem',
96 'rating' => // opcjonalne, ignorowane jeśli używany jest atom
97 'Ocena PICS dla kanału.',
99 'domain' => 'domena usługi cloud, np. rpc.sys.com' // wymagane
100 'port' => 'port usługi to' // opcjonalne, domyślnie wartość 80
101 'path' => 'ścieżka usługi cloud, np. /RPC2' //wymagane
102 'registerProcedure' => 'procedura do wywołania, np. myCloud.rssPleaseNotify' // wymagane
103 'protocol' => 'protokół do użycia, np. soap lub xml-rpc' // wymagane
104 ), // dane usługi cloud umożliwiającej powiadamianie użytkowników o zmianach // opcjonalne, ignorowane jeśli używany jest atom
105 'textInput' => array(
106 'title' => 'etykieta przycisku wysyłającego treść pola tekstowego' // wymagane,
107 'description' => 'wyjaśnienie przeznaczenia pola tekstowego' // wymagane
108 'name' => 'nazwa obiektu pola tekstowego' // wymagane
109 'link' => 'adres URL skryptu CGI który przetwarza wysłaną treść' // wymagane
110 ) // pole tekstowe które może być wyświetlone wraz z kanałem // opcjonalne, ignorowane jeśli używany jest atom
111 'skipHours' => array(
112 'godzina do pominięcia w formacie 24 godzinnym', // np. 13 (1pm)
113 // do 24 wierszy których wartościami mogą być numery między 0 a 23
114 ) // Wskazówka mówiąca agregatorom które godziny mogą pominąć // opcjonalne, ignorowane jeśli używany jest atom
115 'skipDays ' => array(
116 'dzień do pominięcia', // np. Monday
117 // do 7 wierszy, których wartościami mogą być Monday, Tuesday, Wednesday, Thursday, Friday, Saturday lub Sunday
118 ) // Wskazówka mówiąca agregatorom które dni mogą pominąć // opcjonalne, ignorowane jeśli używany jest atom
120 'author' => 'nazwa artysty' // opcjonalne, domyślnie wartość z pola author
122 'name' => 'nazwa właściciela' // opcjonalne, domyślnie wartość z głównego pola author
123 'email' => 'adres email właściciela' // opcjonalne, domyślnie wartość z głównego pola email
124 ) // właściciel podcasta // opcjonalne
125 'image' => 'obrazek albumu/podcasta' // opcjonalne, domyślnie wartość z głownego pola image
126 'subtitle' => 'krótki opis' // opcjonalne, domyślnie wartość z głownego pola description
127 'summary' => 'dłuższy opis' // opcjonalne, domyślnie wartość z głownego pola description
128 'block' => 'zapobiega przed pojawieniem się epizodu (yes|no)' // opcjonalne
130 array('main' => 'głowna kategoria', // wymagane
131 'sub' => 'podkategoria' // opcjonalne
134 ) // 'Dane kategorii w iTunes Music Store Browse' // wymagane
135 'explicit' => 'znaczek kontroli rodzicielskiej (yes|no|clean)' // opcjonalne
136 'keywords' => 'lista maksymalnie 12 słów kluczowych oddzielonych przecinkami' // opcjonalne
137 'new-feed-url' => 'używane aby poinformować iTunes o nowym adresie URL kanału' // opcjonalne
138 ) // Dane rozszerzenia Itunes // opcjonalne, ignorowane jeśli używany jest atom
141 'title' => 'tytuł wpisu z kanału', //wymagane
142 'link' => 'adres do wpisu z kanału', //wymagane
143 'description' => 'krótka wersja wpisu z kanału', // jedynie tekst, bez html, wymagane
144 'guid' => 'identyfikator artykułu, jeśli nie podany, zostanie użyta wartość z pola link', //opcjonalne
145 'content' => 'długa wersja', // może zawierać html, opcjonalne
146 'lastUpdate' => 'data publikacji w postaci uniksowego znacznika czasu', // opcjonalne
147 'comments' => 'strona komentarzy powiązanych z wpisem w kanale', // opcjonalne
148 'commentRss' => 'adres kanału z powiązanymi komentarzami', // opcjonalne
150 'title' => 'tytuł oryginalnego źródła' // wymagane,
151 'url' => 'adres oryginalnego źródła' // wymagane
152 ) // oryginalne źródło wpisu z kanału // opcjonalne
155 'term' => 'etykieta pierwszej kategorii' // wymagane,
156 'scheme' => 'adres identyfikujący schemat kategoryzowania' // opcjonalne
159 // dane dla kolejnej kategorii itd.
161 ) // lista powiązanych kategorii // opcjonalne
162 'enclosure' => array(
164 'url' => 'adres powiązanego załącznika' // wymagane
165 'type' => 'typ mime załącznika' // opcjonalne
166 'length' => 'długość załącznika w bajtach' // opcjonalne
169 // dane drugiego załącznika itd.
171 ) // lista załączników dla wpisu kanału // opcjonalne
174 // dane dla drugiego wpisu itd.
186 Specyfikacja RSS 2.0: <ulink url="http://blogs.law.harvard.edu/tech/rss">RSS 2.0</ulink>
191 Specyfikacja Atom: <ulink url="http://tools.ietf.org/html/rfc4287">RFC 4287</ulink>
196 Specyfikacja WFW: <ulink url="http://wellformedweb.org/news/wfw_namespace_elements">Well
203 <ulink url="http://www.apple.com/itunes/store/podcaststechspecs.html">Specyfikacja
204 Techniczna iTunes</ulink>
212 <sect3 id="zend.feed.importing.custom.importbuilder">
214 <title>Importowanie własnego źródła danych</title>
217 Możesz utworzyć instancję Zend_Feed z dowolnego źródła danych
218 implementując interfejs <code>Zend_Feed_Builder_Interface</code>.
219 Aby użyć swojego obiektu za pomocą metody
220 <code>Zend_Feed::importBuilder()</code> musisz po prostu
221 zaimplementować metody <code>getHeader()</code> oraz
222 <code>getEntries()</code>. Jako przykład implementacji możesz
223 użyć klasy <code>Zend_Feed_Builder</code>, która przyjmuje
224 tablicę jako argument konstruktora, przeprowadza pewną
225 weryfikację, a następnie może być użyta za pomocą metody
226 <code>importBuilder()</code>. Metoda <code>getHeader()</code>
227 musi zwracać instancję klasy
228 <code>Zend_Feed_Builder_Header</code>, a metoda
229 <code>getEntries()</code> musi zwracać tablicę instancji klasy
230 <code>Zend_Feed_Builder_Entry</code>.
235 <code>Zend_Feed_Builder</code> jest konkretną implementacją
236 pokazującą sposób użycia. Namawiamy użytkownika do napisania
237 własnej klasy, implementującej interfejs
238 <code>Zend_Feed_Builder_Interface</code>.
243 Oto przykład użycia metody <code>Zend_Feed::importBuilder()</code>:
246 <programlisting role="php"><![CDATA[
247 // importowanie kanału z własnego źródła
249 Zend_Feed::importBuilder(new Zend_Feed_Builder($array));
251 // poniższy kod odpowiada kodowi powyżej;
252 // domyślnie zwracana jest instancja Zend_Feed_Atom
254 Zend_Feed::importArray(new Zend_Feed_Builder($array), 'atom');
256 // importowanie kanału rss z własnego źródła
258 Zend_Feed::importArray(new Zend_Feed_Builder($array), 'rss');
264 <sect3 id="zend.feed.importing.custom.dump">
266 <title>Zrzucanie zawartości kanału</title>
269 Aby zrzucić zawartość instancji <code>Zend_Feed_Abstract</code>,
270 możesz użyć metody <code>send()</code> lub <code>saveXml()</code>.
273 <programlisting role="php">
275 assert($feed instanceof Zend_Feed_Abstract);
277 // zrzuca kanał do standardowego wyjścia
278 print $feed->saveXML();
280 // wysyła nagłówki oraz zrzuca zawartość kanału