Zend_Feed-Importing.xml 14 KB

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