Zend_Feed-ConsumingRss.xml 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. <sect1 id="zend.feed.consuming-rss">
  2. <title>RSS Feed的使用</title>
  3. <para>
  4. 用一个<code>Zend_Feed_Rss</code>对象实例和一个Feed的URL来读取一个RSS Feed再简单不过了:
  5. </para>
  6. <programlisting role="php"><![CDATA[
  7. $channel = new Zend_Feed_Rss('http://rss.example.com/channelName');
  8. ]]>
  9. </programlisting>
  10. <para>
  11. 如果在获得feed时发生任何错误,那么一个<code>Zend_Feed_Exception</code>异常将被抛出。
  12. </para>
  13. <para>
  14. 一旦你获得一个Feed对象,那么你就能在这个对象上直接访问任何RSS 标准定义的channel属性:
  15. </para>
  16. <programlisting role="php"><![CDATA[
  17. echo $channel->title();?>
  18. ]]>
  19. </programlisting>
  20. <para>
  21. 注意函数语法。如果用 "getter" 的语法 (<code>$obj->property</code>) 取一个对象变量或是调用一个对象方法(<code>$obj->property()</code>)时,<code>Zend_Feed</code>将把这个变量名或方法名作为一个XML对象的属性处理(就像访问XML中的某个节点)。这样在取得指定的节点内容后还能访问其子节点。
  22. </para>
  23. <para>
  24. 如果RSS的channel有属性,那么可以用访问 PHP 数组的语法获得他们:
  25. </para>
  26. <programlisting role="php"><![CDATA[
  27. echo $channel->category['domain'];?>
  28. ]]>
  29. </programlisting>
  30. <para>
  31. 因为XML的属性不能拥有子节点,所以不需要用方法的语法访问其属性。
  32. values.
  33. </para>
  34. <para>
  35. 最常用的是您可以通过循环遍历Feed的条目来作些事情。<code>Zend_Feed_Abstract</code> 实现的是PHP 的Iterator接口,因此要打印channel中的文章标题可以像下面这样:
  36. </para>
  37. <programlisting role="php"><![CDATA[
  38. foreach ($channel as $item) {
  39. echo $item->title() . "\n";
  40. }
  41. ]]>
  42. </programlisting>
  43. <para>
  44. 如果你对RSS不是很熟,那这有一分关于RSS channel和各个RSS item(条目)标准元素的列表可能对你有帮助。
  45. </para>
  46. <para>
  47. 必须的 channel 元素:
  48. </para>
  49. <para>
  50. <itemizedlist>
  51. <listitem>
  52. <para><code>title</code> - channel 名</para>
  53. </listitem>
  54. <listitem>
  55. <para><code>link</code> - channel相关的站点URL</para>
  56. </listitem>
  57. <listitem>
  58. <para><code>description</code> - 一句或者若干关于channel的描述</para>
  59. </listitem>
  60. </itemizedlist>
  61. </para>
  62. <para>
  63. 可选的channel元素:
  64. </para>
  65. <para>
  66. <itemizedlist>
  67. <listitem>
  68. <para><code>pubDate</code> - 这份内容发布的时间,用 RFC 822 的日期格式</para>
  69. </listitem>
  70. <listitem>
  71. <para><code>language</code> - channel的书写语言</para>
  72. </listitem>
  73. <listitem>
  74. <para><code>category</code> - channel属于的一个或多个分类(用多个标记指名)</para>
  75. </listitem>
  76. </itemizedlist>
  77. </para>
  78. <para>
  79. RSS 的<code>&lt;item&gt;</code> 组成没有严格的要求。但是<code>title</code> 或 <code>description</code>必须至少有一个。
  80. </para>
  81. <para>
  82. 常用的item元素:
  83. </para>
  84. <para>
  85. <itemizedlist>
  86. <listitem>
  87. <para><code>title</code> - item的标题</para>
  88. </listitem>
  89. <listitem>
  90. <para><code>link</code> - item的链接</para>
  91. </listitem>
  92. <listitem>
  93. <para><code>description</code> - item的概述</para>
  94. </listitem>
  95. <listitem>
  96. <para><code>author</code> - 作者Email</para>
  97. </listitem>
  98. <listitem>
  99. <para><code>category</code> - item所属的一个或者多个分类</para>
  100. </listitem>
  101. <listitem>
  102. <para><code>comments</code> - item相关评论的URL链接</para>
  103. </listitem>
  104. <listitem>
  105. <para><code>pubDate</code> - item的发布日期( RFC 822 日期格式)</para>
  106. </listitem>
  107. </itemizedlist>
  108. </para>
  109. <para>
  110. 在你的代码中,一个非空元素总是被能测到:
  111. </para>
  112. <programlisting role="php"><![CDATA[
  113. if ($item->propname()) {
  114. // ... proceed.
  115. }
  116. ]]>
  117. </programlisting>
  118. <para>
  119. 如果你用<code>$item->propname</code>代替<code>$item->propname()</code>,那么你将总是得到一个空对象使条件判断为<code>TRUE</code>,因此条件判断将失效。
  120. </para>
  121. <para>
  122. 更多信息,请参看RSS 2.0的官方说明:<ulink url="http://blogs.law.harvard.edu/tech/rss">http://blogs.law.harvard.edu/tech/rss</ulink>。
  123. </para>
  124. </sect1>
  125. <!--
  126. vim:se ts=4 sw=4 et:
  127. -->