Zend_Feed-ConsumingRss.xml 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. <sect1 id="zend.feed.consuming-rss">
  2. <title>Работа с лентой RSS</title>
  3. <para>
  4. Чтение ленты такое же простое, как создание объекта <code>Zend_Feed_Rss</code>
  5. с URI ленты:
  6. </para>
  7. <programlisting language="php"><![CDATA[
  8. $channel = new Zend_Feed_Rss('http://rss.example.com/channelName');
  9. ]]>
  10. </programlisting>
  11. <para>
  12. Если при извлечении ленты произошла ошибка, то будет сгенерировано исключение
  13. <code>Zend_Feed_Exception</code>.
  14. </para>
  15. <para>
  16. Создав объект ленты, вы можете получить доступ к любым стандартным
  17. свойствам канала RSS (channel) непосредственно в объекте:
  18. </para>
  19. <programlisting language="php"><![CDATA[
  20. echo $channel->title();
  21. ]]>
  22. </programlisting>
  23. <para>
  24. Обратите внимание на синтаксис функции. <code>Zend_Feed</code> использует соглашение
  25. об интерпретации свойств как объекта XML, если они запрошены в синтаксисе
  26. получения переменной (<varname>$obj->property</varname> и как строки, если они запрошены
  27. в синтаксисе метода (<varname>$obj->property()</varname>). Это позволяет получить доступ
  28. к полному тексту любого отдельного узла, что одновременно дает полный доступ
  29. и ко всем дочерним элементам.
  30. </para>
  31. <para>
  32. Если свойства канала имеют атрибуты, то к ним можно получить доступ, используя
  33. синтаксис массива PHP:
  34. </para>
  35. <programlisting language="php"><![CDATA[
  36. echo $channel->category['domain'];
  37. ]]>
  38. </programlisting>
  39. <para>
  40. Поскольку атрибуты не могут иметь дочерние элементы, то нет
  41. необходимости в синтаксисе метода для получения значений атрибутов.
  42. </para>
  43. <para>
  44. Скорее всего, вам потребуется произвести обход ленты и выполнить
  45. какие-либо операции с ее сообщениями. <code>Zend_Feed_Abstract</code>
  46. реализует интерфейс PHP <code>Iterator</code>, поэтому вывод заголовков
  47. всех статей в канале будет выглядеть следующим образом:
  48. </para>
  49. <programlisting language="php"><![CDATA[
  50. foreach ($channel as $item) {
  51. echo $item->title() . "\n";
  52. }
  53. ]]>
  54. </programlisting>
  55. <para>
  56. На тот случай, если вы не знакомы с RSS, здесь приведены стандартные
  57. элементы, которые должны присутствовать в канале (элемент
  58. <code>&lt;channel&gt;</code>) и отдельных сообщениях RSS
  59. (элемент <code>&lt;item&gt;</code>).
  60. </para>
  61. <para>
  62. Обязательные элементы канала:
  63. </para>
  64. <para>
  65. <itemizedlist>
  66. <listitem>
  67. <para>
  68. <code>title</code> - имя канала
  69. </para>
  70. </listitem>
  71. <listitem>
  72. <para>
  73. <code>link</code> - URL веб-сайта, соответствующего каналу
  74. </para>
  75. </listitem>
  76. <listitem>
  77. <para>
  78. <code>description</code> - одно или несколько предложений, составляющих
  79. описание канала
  80. </para>
  81. </listitem>
  82. </itemizedlist>
  83. </para>
  84. <para>
  85. Обычно используемые необязательные элементы канала:
  86. </para>
  87. <para>
  88. <itemizedlist>
  89. <listitem>
  90. <para>
  91. <code>pubDate</code> - дата публикации канала в формате RFC 822
  92. </para>
  93. </listitem>
  94. <listitem>
  95. <para>
  96. <code>language</code> - язык, на котором написано содержимое канала
  97. </para>
  98. </listitem>
  99. <listitem>
  100. <para>
  101. <code>category</code> - одна или несколько (задается несколькими тегами) категорий,
  102. к которым принадлежит канал
  103. </para>
  104. </listitem>
  105. </itemizedlist>
  106. </para>
  107. <para>
  108. Элементы <code>&lt;item&gt;</code> не имеют обязательных вложенных элементов.
  109. Тем не менее, должны быть представлены заголовок
  110. <code>&lt;title&gt;</code> или описание
  111. <code>&lt;description&gt;</code>.
  112. </para>
  113. <para>
  114. Обычно используемые элементы сообщения:
  115. </para>
  116. <para>
  117. <itemizedlist>
  118. <listitem>
  119. <para>
  120. <code>title</code> - заголовок сообщения
  121. </para>
  122. </listitem>
  123. <listitem>
  124. <para>
  125. <code>link</code> - URL сообщения
  126. </para>
  127. </listitem>
  128. <listitem>
  129. <para>
  130. <code>description</code> - краткое описание
  131. </para>
  132. </listitem>
  133. <listitem>
  134. <para>
  135. <code>author</code> - e-mail автора
  136. </para>
  137. </listitem>
  138. <listitem>
  139. <para>
  140. <code>category</code> - одна или несколько категорий,
  141. к которым принадлежит сообщение
  142. </para>
  143. </listitem>
  144. <listitem>
  145. <para>
  146. <code>comments</code> - URL комментариев к данному сообщению
  147. </para>
  148. </listitem>
  149. <listitem>
  150. <para>
  151. <code>pubDate</code> - дата публикации в формате RFC 822
  152. </para>
  153. </listitem>
  154. </itemizedlist>
  155. </para>
  156. <para>
  157. В своем коде вы можете проверить, имеет ли элемент непустое значение,
  158. следующим образом:
  159. </para>
  160. <programlisting language="php"><![CDATA[
  161. if ($item->propname()) {
  162. // ... обработка
  163. }
  164. ]]>
  165. </programlisting>
  166. <para>
  167. Если вместо этого использовать <varname>$item->propname</varname>, то всегда будете
  168. получать объект. Пустой объект расценивается как <constant>TRUE</constant>,
  169. поэтому такая проверка будет некорректной.
  170. </para>
  171. <para>
  172. Для получения более подробной информации читайте официальное описание
  173. спецификации RSS 2.0:
  174. <ulink url="http://blogs.law.harvard.edu/tech/rss">http://blogs.law.harvard.edu/tech/rss</ulink>
  175. </para>
  176. </sect1>
  177. <!--
  178. vim:se ts=4 sw=4 et:
  179. -->