Zend_Feed-Importing.xml 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 15156 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.feed.importing">
  5. <title>Feeds importieren</title>
  6. <para>
  7. <classname>Zend_Feed</classname> ermöglicht es Entwicklern, Feeds sehr einfach abzurufen. Wenn Du die
  8. URI eines Feeds kennst, verwende einfach die <classname>Zend_Feed::import()</classname> Methode:
  9. </para>
  10. <programlisting role="php"><![CDATA[
  11. $feed = Zend_Feed::import('http://feeds.example.com/feedName');
  12. ]]></programlisting>
  13. <para>
  14. Du kannst <classname>Zend_Feed</classname> außerdem verwenden, um Inhalte eines Feeds aus einer Datei
  15. oder die Inhalte aus einem PHP String Variable zu abzurufen.
  16. </para>
  17. <programlisting role="php"><![CDATA[
  18. // Feeds von einer Textdatei importieren
  19. $feedFromFile = Zend_Feed::importFile('feed.xml');
  20. // Feeds von einer PHP String Variable importieren
  21. $feedFromPHP = Zend_Feed::importString($feedString);
  22. ]]></programlisting>
  23. <para>
  24. In jedem der obigen Beispiele wird bei Erfolg abhängig vom Typ des Feeds ein Objekt einer
  25. Klasse zurück gegeben, welche <classname>Zend_Feed_Abstract</classname> erweitert. Wird ein RSS Feed
  26. durch eine der obigen Importiermethoden abgerufen, wird eine <classname>Zend_Feed_Rss</classname>
  27. Objekt zurückgegeben. Auf der anderen Seite wird beim Importieren eines Atom Feeds ein
  28. <classname>Zend_Feed_Atom</classname> Objekt zurückgegeben. Bei Fehlern, wie z.B. ein unlesbarer oder
  29. nicht wohlgeformter Feed, werfen die Importiermethoden auch ein
  30. <classname>Zend_Feed_Exception</classname> Objekt.
  31. </para>
  32. <sect2 id="zend.feed.importing.custom">
  33. <title>Eigene Feeds</title>
  34. <para>
  35. <classname>Zend_Feed</classname> ermöglicht es Entwicklern Ihre eigenen Feeds sehr einfach zu erstellen. Man
  36. muß nur ein Array erstellen und es in <classname>Zend_Feed</classname> importieren, Dieses Array kann mit
  37. <classname>Zend_Feed::importArray()</classname> oder mit <classname>Zend_Feed::importBuilder()</classname>
  38. importiert werden. Im letzteren Fall wird das Array on the Fly durch eine eigene Datenquelle
  39. berechnet die <classname>Zend_Feed_Builder_Interface</classname> implementiert.
  40. </para>
  41. <sect3 id="zend.feed.importing.custom.importarray">
  42. <title>Importieren eines eigenen Arrays</title>
  43. <programlisting role="php"><![CDATA[
  44. // Importieren eines Feeds von einem Array
  45. $atomFeedFromArray = Zend_Feed::importArray($array);
  46. // Die folgende Zeile ist identisch mit der obigen; standardmäßig
  47. // wird eine Zend_Feed_Atom Instanz zurückgegeben
  48. $atomFeedFromArray = Zend_Feed::importArray($array, 'atom');
  49. // Importieren eines RSS Feeds von einem Array
  50. $rssFeedFromArray = Zend_Feed::importArray($array, 'rss');
  51. ]]></programlisting>
  52. <para>
  53. Das Format des Arrays muß dieser Struktur entsprechen:
  54. </para>
  55. <programlisting role="php"><![CDATA[
  56. array(
  57. // benötigt
  58. 'title' => 'Titel des Feeds',
  59. 'link' => 'Kanonische URL zu dem Feed',
  60. // optional
  61. 'lastUpdate' => 'Zeitstempel des Update Datums',
  62. 'published' => 'Zeitstempel des Veröffentlichungs Datums',
  63. // benötigt
  64. 'charset' => 'Zeichensatz der textuellen Daten',
  65. //optional
  66. 'description' => 'Kurzbeschreibung des Feeds',
  67. 'author' => 'Author, Veröffentlicher des Feeds',
  68. 'email' => 'Email des Authors',
  69. // optional, ignoriert wenn Atom verwendet wird
  70. 'webmaster' => 'Email Adresse der Person die für technische '
  71. . 'Belange verantwortlich ist',
  72. //optional
  73. 'copyright' => 'Copyright Notiz',
  74. 'image' => 'URL zu Bildern',
  75. 'generator' => 'Ersteller',
  76. 'language' => 'Sprache in der der Feed geschrieben ist',
  77. // optional, ignoriert wenn Atom verwendet wird
  78. 'ttl' => 'Wie lange ein Feed gecached werden kann '
  79. . 'bevor er erneut werden muß',
  80. 'rating' => 'Die PICS Rate dieses Kanals',
  81. // optional, ignoriert wenn Atom verwendet wird
  82. // eine Wolke die über Updates benachrichtigt wird
  83. 'cloud' => array(
  84. // benötigt
  85. 'domain' => 'Domain der Wolke, e.g. rpc.sys.com',
  86. // optional, Standard ist 80
  87. 'port' => 'Port zu dem verbunden wird',
  88. // benötigt
  89. 'path' => 'Pfad der Wolke, e.g. /RPC2',
  90. 'registerProcedure' => 'Prozedur die aufgerufen wird, '
  91. . 'z.B. myCloud.rssPleaseNotify'
  92. 'protocol' => 'Protokoll das verwendet wird, z.B. '
  93. . 'soap oder xml-rpc'
  94. ),
  95. // optional, ignoriert wenn Atom verwendet wird
  96. // Eine Texteingabebox die im Feed angezeigt werden kann
  97. 'textInput' => array(
  98. // benötigt
  99. 'title' => 'Die Überschrift des Senden Buttons im '
  100. . 'Texteingabefeld',
  101. 'description' => 'Beschreibt das Texteingabefeld',
  102. 'name' => 'Der Name des Text Objekts im '
  103. . 'Texteingabefeld',
  104. 'link' => 'Die URL des CGI Skripts das Texteingabe '
  105. . 'Anfragen bearbeitet'
  106. ),
  107. // optional, ignoriert wenn Atom verwendet wird
  108. // Hinweise geben welche Stunden übersprungen werden können
  109. 'skipHours' => array(
  110. // bis zu 24 Zeilen dessen Werte eine Nummer zwischen 0 und 23 ist
  111. // z.B. 13 (1pm)
  112. 'hour in 24 format'
  113. ),
  114. // optional, ignoriert wenn Atom verwendet wird
  115. // Hinweise geben welche Tage übersprungen werden können
  116. 'skipDays ' => array(
  117. // bis zu 7 Zeilen dessen Werte Montag, Dienstag, Mittwoch,
  118. // Donnerstag, Freitag, Samstag oder Sonntag sind
  119. // z.B. Montag
  120. 'a day to skip'
  121. ),
  122. // optional, ignoriert wenn Atom verwendet wird
  123. // Itunes Erweiterungsdaten
  124. 'itunes' => array(
  125. // optional, Standard ist der Wert der author Spalte
  126. 'author' => 'Musiker Spalte',
  127. // optional, Standard ist der Wert der author Spalte
  128. // Eigentümer des Podcasts
  129. 'owner' => array(
  130. 'name' => 'Name des Eigentümers',
  131. 'email' => 'Email des Eigentümers'
  132. ),
  133. // optional, Standard ist der image Wert
  134. 'image' => 'Album/Podcast Bild',
  135. // optional, Standard ist der description Wert
  136. 'subtitle' => 'Kurzbeschreibung',
  137. 'summary' => 'Langbeschreibung',
  138. // optional
  139. 'block' => 'Verhindern das eine Episode erscheint (ja|nein)',
  140. // benötigt
  141. // 'Kategoriespalte und iTunes Music Store Browse'
  142. 'category' => array(
  143. // bis zu 3 Zeilen
  144. array(
  145. // benötigt
  146. 'main' => 'Hauptkategorie',
  147. // optional
  148. 'sub' => 'Unterkategorie'
  149. ),
  150. ),
  151. // optional
  152. 'explicit' => 'Elterliche Anweisungsspalte (ja|nein|löschen)',
  153. 'keywords' => 'Eine kommagetrennte Liste von maximal '
  154. . '12 Schlüsselwörtern',
  155. 'new-feed-url' => 'Verwendet um iTunes über eine neue URL '
  156. . 'Lokation zu informieren'
  157. ),
  158. 'entries' => array(
  159. array(
  160. // benötigt
  161. 'title' => 'Titel des Feedeintrags',
  162. 'link' => 'URL zum Feedeintrag',
  163. // benötigt, nur Text, kein HTML
  164. 'description' => 'Kurzversion des Feedeintrags',
  165. //optional
  166. 'guid' => 'Id des Artikels, wenn nicht angegeben '
  167. . 'wird der link Wert verwendet',
  168. // optional, kann HTML enthalten
  169. 'content' => 'Langversion',
  170. // optional
  171. 'lastUpdate' => 'Zeitstempel des Veröffnetlichungsdatums',
  172. 'comments' => 'Kommentarseite des Feedeintrags',
  173. 'commentRss' => 'Die FeedURL der zugehörenden Kommentare',
  174. // optional, Originale Quelle des Feedeintrags
  175. 'source' => array(
  176. // benötigt
  177. 'title' => 'Titel der Originalen Quelle',
  178. 'url' => 'URL der originalen Quelle'
  179. ),
  180. // optional, Liste der zugeordneten Kategorien
  181. 'category' => array(
  182. array(
  183. // benötigt
  184. 'term' => 'Überschrift der ersten Kategorie',
  185. // optional
  186. 'scheme' => 'URL die das Kategorisierungsschema '
  187. . 'identifiziert'
  188. ),
  189. array(
  190. //Daten der zweiten Kategorie und so weiter
  191. )
  192. ),
  193. // optional, Liste der Anhänge des Feedeintrags
  194. 'enclosure' => array(
  195. array(
  196. // benötigt
  197. 'url' => 'URL des verlinkten Anhangs',
  198. // optional
  199. 'type' => 'Mime Typ des Anhangs',
  200. 'length' => 'Länge des verlinkten Inhalts oktal'
  201. ),
  202. array(
  203. // Daten für den zweiten Anhang und so weiter
  204. )
  205. )
  206. ),
  207. array(
  208. // Daten für den zweiten Eintrag und so weiter
  209. )
  210. )
  211. );
  212. ]]></programlisting>
  213. <para>
  214. Referenzen:
  215. <itemizedlist>
  216. <listitem>
  217. <para>
  218. RSS 2.0 Spezifikation: <ulink url="http://blogs.law.harvard.edu/tech/rss">RSS 2.0</ulink>
  219. </para>
  220. </listitem>
  221. <listitem>
  222. <para>
  223. Atom Spezifikation: <ulink url="http://tools.ietf.org/html/rfc4287">RFC 4287</ulink>
  224. </para>
  225. </listitem>
  226. <listitem>
  227. <para>
  228. WFW Spezifikation: <ulink url="http://wellformedweb.org/news/wfw_namespace_elements">Gut
  229. geformtes Web</ulink>
  230. </para>
  231. </listitem>
  232. <listitem>
  233. <para>
  234. iTunes Spezifikation:
  235. <ulink url="http://www.apple.com/itunes/store/podcaststechspecs.html">iTunes Technische
  236. Spezifikation</ulink>
  237. </para>
  238. </listitem>
  239. </itemizedlist>
  240. </para>
  241. </sect3>
  242. <sect3 id="zend.feed.importing.custom.importbuilder">
  243. <title>Importieren einer eigenen Daten Quelle</title>
  244. <para>
  245. Eine Zend_Feed Instanz kann von jeder Datenquelle erstellt werden die
  246. <classname>Zend_Feed_Builder_Interface</classname> implementiert. Die <code>getHeader()</code> und
  247. <code>getEntries()</code> Methoden müssen implementiert werden damit das Objekt mit
  248. <classname>Zend_Feed::importBuilder()</classname> verwendet werden kann. Als einfache Referenz
  249. Implementation kann <classname>Zend_Feed_Builder</classname> verwendet werden, welches ein Array im
  250. Kontruktor entgegen nimmt, einige einfache Prüfungen durchführt, und anschließend in der
  251. <code>importBuilder()</code> Methode verwendet werden kann. Die <code>getHeader()</code>
  252. Methode muß eine Instanz von <classname>Zend_Feed_Builder_Header</classname> zurückgeben, und
  253. <code>getEntries()</code> muß ein Array von <classname>Zend_Feed_Builder_Entry</classname> Instanzen
  254. zurückgeben.
  255. </para>
  256. <note>
  257. <para>
  258. <classname>Zend_Feed_Builder</classname> arbeitet als konkrete Implementation um die Verwendung zu
  259. demonstrieren. Benutzer sind angehlaten Ihre eigenen Klassen zu Erstellen um
  260. <classname>Zend_Feed_Builder_Interface</classname> zu implementieren.
  261. </para>
  262. </note>
  263. <para>
  264. Hier ist ein Beispiel der Verwendung von <classname>Zend_Feed::importBuilder()</classname>:
  265. </para>
  266. <programlisting role="php"><![CDATA[
  267. // Einen Feed von einer eigenen Erstellungsquelle importieren
  268. $atomFeedFromArray =
  269. Zend_Feed::importBuilder(new Zend_Feed_Builder($array));
  270. // Die folgende Zeile ist mit der obigen äquivalent; standardmäßig
  271. // wird eine Zend_Feed_Atom Instanz zurückgegeben
  272. $atomFeedFromArray =
  273. Zend_Feed::importArray(new Zend_Feed_Builder($array), 'atom');
  274. // Einen RSS Feeed von einem Array von eigenen Erstellungsquellen importieren
  275. $rssFeedFromArray =
  276. Zend_Feed::importArray(new Zend_Feed_Builder($array), 'rss');
  277. ]]></programlisting>
  278. </sect3>
  279. <sect3 id="zend.feed.importing.custom.dump">
  280. <title>Ausgeben des Inhalts eines Feeds</title>
  281. <para>
  282. Um den Inhalt einer <classname>Zend_Feed_Abstract</classname> Instanz auszugeben können die
  283. <code>send()</code> oder <code>saveXml()</code> Methoden verwendet werden.
  284. </para>
  285. <programlisting role="php"><![CDATA[
  286. assert($feed instanceof Zend_Feed_Abstract);
  287. // Den Feed an der Standardausgabe ausgeben
  288. print $feed->saveXML();
  289. // HTTP Header und den Feed ausgeben
  290. $feed->send();
  291. ]]></programlisting>
  292. </sect3>
  293. </sect2>
  294. </sect1>
  295. <!--
  296. vim:se ts=4 sw=4 et:
  297. -->