Zend_Feed-ConsumingRss.xml 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 17175 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.feed.consuming-rss">
  5. <title>Einen RSS Feed konsumieren</title>
  6. <para>
  7. Einen RSS 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. RSS 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 <code>Iterator</code> Interface
  46. von <acronym>PHP</acronym>, so dass die Ausgabe aller Artikelüberschriften eines Channels
  47. 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 RSS nicht vertraut bist, kommt hier eine Übersicht über die Standardelemente,
  56. die du in einem RSS Channel und in einzelnen RSS Elementen (Einträgen) als verfügbar
  57. erwarten kannst.
  58. </para>
  59. <para>
  60. Erforderliche Elemente eines Channels:
  61. </para>
  62. <para>
  63. <itemizedlist>
  64. <listitem>
  65. <para><code>title</code> - Der Name des Channels</para>
  66. </listitem>
  67. <listitem>
  68. <para>
  69. <code>link</code> - Die <acronym>URL</acronym> einer Website, die dem Channel
  70. entspricht
  71. </para>
  72. </listitem>
  73. <listitem>
  74. <para>
  75. <code>description</code> - Ein oder mehr Sätze, die den Channel beschreiben
  76. </para>
  77. </listitem>
  78. </itemizedlist>
  79. </para>
  80. <para>
  81. Allgemeine optionale Elemente eines Channels:
  82. </para>
  83. <para>
  84. <itemizedlist>
  85. <listitem>
  86. <para><code>pubDate</code> - Das Erscheinungsdatum dieses Informationssatzes, im
  87. RFC 822 Datumsformat</para>
  88. </listitem>
  89. <listitem>
  90. <para><code>language</code> - Die Sprache, in der dieser Channel verfasst ist</para>
  91. </listitem>
  92. <listitem>
  93. <para><code>category</code> - Eine oder mehrere Kategorien (durch mehrfache Tags
  94. spezifiziert), zu denen der Channel gehört</para>
  95. </listitem>
  96. </itemizedlist>
  97. </para>
  98. <para>
  99. RSS <code>&lt;item&gt;</code> Elemente haben keine strikt erforderlichen Elemente. Dennoch
  100. müssen entweder <code>title</code> oder <code>description</code> vorhanden sein.
  101. </para>
  102. <para>
  103. Allgemeine Elements eines Eintrags:
  104. </para>
  105. <para>
  106. <itemizedlist>
  107. <listitem>
  108. <para><code>title</code> - Die Überschrift des Eintrags</para>
  109. </listitem>
  110. <listitem>
  111. <para><code>link</code> - Die <acronym>URL</acronym> des Eintrags</para>
  112. </listitem>
  113. <listitem>
  114. <para><code>description</code> - Eine Zusammenfassung des Eintrags</para>
  115. </listitem>
  116. <listitem>
  117. <para><code>author</code> - Die E-Mail Adresse des Autoren</para>
  118. </listitem>
  119. <listitem>
  120. <para><code>category</code> - Eine oder mehrere Kategorien, zu denen der Eintrag
  121. gehört</para>
  122. </listitem>
  123. <listitem>
  124. <para>
  125. <code>comments</code> - <acronym>URL</acronym> der Kommentare zu diesem Eintrag
  126. </para>
  127. </listitem>
  128. <listitem>
  129. <para><code>pubDate</code> - Das Datum, an dem der Eintrag veröffentlicht wurde,
  130. im RFC 822 Datumsformat</para>
  131. </listitem>
  132. </itemizedlist>
  133. </para>
  134. <para>
  135. In deinem Code kannst du hiermit immer überprüfen, ob ein Element nicht leer ist:
  136. </para>
  137. <programlisting language="php"><![CDATA[
  138. if ($item->propname()) {
  139. // ... fahre fort.
  140. }
  141. ]]></programlisting>
  142. <para>
  143. Wenn du stattdessen <code>$item->propname</code> verwendest, wirst du immer ein leeres
  144. Objekt erhalten, das mit <constant>TRUE</constant> evaluiert, so dass deine Prüfung fehlschlagen
  145. würde.
  146. </para>
  147. <para>
  148. Für weitere Informationen ist die offizielle RSS 2.0 Specification hier verfügbar: <ulink
  149. url="http://blogs.law.harvard.edu/tech/rss">http://blogs.law.harvard.edu/tech/rss</ulink>
  150. </para>
  151. </sect1>
  152. <!--
  153. vim:se ts=4 sw=4 et:
  154. -->