Zend_Feed-ConsumingRss.xml 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 21606 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.feed.consuming-rss">
  5. <title>Einen RSS Feed konsumieren</title>
  6. <para>
  7. Einen <acronym>RSS</acronym> Feed zu lesen, ist so einfach wie das Instanziieren eines
  8. <classname>Zend_Feed_Rss</classname> Objekts mit der <acronym>URL</acronym> eines Feeds:
  9. </para>
  10. <programlisting language="php"><![CDATA[
  11. $channel = new Zend_Feed_Rss('http://rss.example.com/channelName');
  12. ]]></programlisting>
  13. <para>
  14. Wenn beim Abrufen des Feeds Fehler auftreten, wird eine
  15. <classname>Zend_Feed_Exception</classname> geworfen.
  16. </para>
  17. <para>
  18. Sobald du ein Feed Objekt hast, kannst du auf jeden Channel-Eigenschaften eines Standard
  19. <acronym>RSS</acronym> Feeds direkt über das Objekt zugreifen:
  20. </para>
  21. <programlisting language="php"><![CDATA[
  22. echo $channel->title();
  23. ]]></programlisting>
  24. <para>
  25. Beachte die Syntax der Funktion. <classname>Zend_Feed</classname> verwendet die Konvention,
  26. die Eigenschaften als <acronym>XML</acronym> Objekt zu behandeln, wenn sie durch die
  27. "Getter" Syntax für Variablen (<code>$obj->property</code>) angefordert werden, und als
  28. String zu behandeln, wenn sie durch die Methodensyntax (<code>$obj->property()</code>)
  29. angefordert werden. Dies ermöglicht den Zugriff auf den kompletten Text jedes individuellen
  30. Knotens, während weiterhin der komplette Zugriff auf alle Kindelemente erlaubt ist.
  31. </para>
  32. <para>
  33. Wenn Channel-Eigenschaften Attribute beinhalten, sind diese durch die <acronym>PHP</acronym>
  34. Array Syntax ansprechbar:
  35. </para>
  36. <programlisting language="php"><![CDATA[
  37. echo $channel->category['domain'];
  38. ]]></programlisting>
  39. <para>
  40. Da <acronym>XML</acronym> Attribute keine Kindelemente haben können, ist die Methodensyntax
  41. für den Zugriff auf Attributwerte nicht notwendig.
  42. </para>
  43. <para>
  44. Meistens möchtest Du einen Feed durchlaufen und etwas mit seinen Einträgen machen.
  45. <classname>Zend_Feed_Abstract</classname> implementiert das <classname>Iterator</classname>
  46. Interface von <acronym>PHP</acronym>, so dass die Ausgabe aller Artikelüberschriften eines
  47. Channels nur dies erfordert:
  48. </para>
  49. <programlisting language="php"><![CDATA[
  50. foreach ($channel as $item) {
  51. echo $item->title() . "\n";
  52. }
  53. ]]></programlisting>
  54. <para>
  55. Wenn du mit <acronym>RSS</acronym> nicht vertraut bist, kommt hier eine Übersicht über die
  56. Standardelemente, die du in einem <acronym>RSS</acronym> Channel und in einzelnen
  57. <acronym>RSS</acronym> Elementen (Einträgen) als verfügbar erwarten kannst.
  58. </para>
  59. <para>
  60. Erforderliche Elemente eines Channels:
  61. </para>
  62. <para>
  63. <itemizedlist>
  64. <listitem>
  65. <para><property>title</property> - Der Name des Channels</para>
  66. </listitem>
  67. <listitem>
  68. <para>
  69. <property>link</property> - Die <acronym>URL</acronym> einer Website, die dem
  70. Channel entspricht
  71. </para>
  72. </listitem>
  73. <listitem>
  74. <para>
  75. <property>description</property> - Ein oder mehr Sätze, die den Channel
  76. beschreiben
  77. </para>
  78. </listitem>
  79. </itemizedlist>
  80. </para>
  81. <para>
  82. Allgemeine optionale Elemente eines Channels:
  83. </para>
  84. <para>
  85. <itemizedlist>
  86. <listitem>
  87. <para>
  88. <property>pubDate</property> - Das Erscheinungsdatum dieses Informationssatzes,
  89. im <acronym>RFC</acronym> 822 Datumsformat
  90. </para>
  91. </listitem>
  92. <listitem>
  93. <para>
  94. <property>language</property> - Die Sprache, in der dieser Channel verfasst ist
  95. </para>
  96. </listitem>
  97. <listitem>
  98. <para>
  99. <property>category</property> - Eine oder mehrere Kategorien (durch mehrfache
  100. Tags spezifiziert), zu denen der Channel gehört
  101. </para>
  102. </listitem>
  103. </itemizedlist>
  104. </para>
  105. <para>
  106. <acronym>RSS</acronym> <emphasis>&lt;item&gt;</emphasis> Elemente haben keine strikt
  107. erforderlichen Elemente. Dennoch müssen entweder <property>title</property> oder
  108. <property>description</property> vorhanden sein.
  109. </para>
  110. <para>
  111. Allgemeine Elements eines Eintrags:
  112. </para>
  113. <para>
  114. <itemizedlist>
  115. <listitem>
  116. <para><property>title</property> - Die Überschrift des Eintrags</para>
  117. </listitem>
  118. <listitem>
  119. <para><property>link</property> - Die <acronym>URL</acronym> des Eintrags</para>
  120. </listitem>
  121. <listitem>
  122. <para><property>description</property> - Eine Zusammenfassung des Eintrags</para>
  123. </listitem>
  124. <listitem>
  125. <para><property>author</property> - Die E-Mail Adresse des Autoren</para>
  126. </listitem>
  127. <listitem>
  128. <para>
  129. <property>category</property> - Eine oder mehrere Kategorien, zu denen der
  130. Eintrag gehört
  131. </para>
  132. </listitem>
  133. <listitem>
  134. <para>
  135. <property>comments</property> - <acronym>URL</acronym> der Kommentare zu diesem
  136. Eintrag
  137. </para>
  138. </listitem>
  139. <listitem>
  140. <para>
  141. <property>pubDate</property> - Das Datum, an dem der Eintrag veröffentlicht
  142. wurde, im <acronym>RFC</acronym> 822 Datumsformat
  143. </para>
  144. </listitem>
  145. </itemizedlist>
  146. </para>
  147. <para>
  148. In deinem Code kannst du hiermit immer überprüfen, ob ein Element nicht leer ist:
  149. </para>
  150. <programlisting language="php"><![CDATA[
  151. if ($item->propname()) {
  152. // ... fahre fort.
  153. }
  154. ]]></programlisting>
  155. <para>
  156. Wenn du stattdessen <code>$item->propname</code> verwendest, wirst du immer ein leeres
  157. Objekt erhalten, das mit <constant>TRUE</constant> evaluiert, so dass deine Prüfung
  158. fehlschlagen würde.
  159. </para>
  160. <para>
  161. Für weitere Informationen ist die offizielle <acronym>RSS</acronym> 2.0 Specification hier
  162. verfügbar: <ulink
  163. url="http://blogs.law.harvard.edu/tech/rss">http://blogs.law.harvard.edu/tech/rss</ulink>
  164. </para>
  165. </sect1>