Zend_Feed-Importing.xml 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298
  1. <sect1 id="zend.feed.importing">
  2. <title>Импортирование лент с помощью Zend_Feed</title>
  3. <para>
  4. <code>Zend_Feed</code> позволяет легко получать ленты.
  5. Если вам известен URI ленты, то просто используйте метод
  6. <code>Zend_Feed::import()</code>:
  7. </para>
  8. <programlisting language="php"><![CDATA[
  9. $feed = Zend_Feed::import('http://feeds.example.com/feedName');
  10. ]]>
  11. </programlisting>
  12. <para>
  13. Еще вы можете использовать <code>Zend_Feed</code> для извлечения содержимого
  14. ленты из файла или строки:
  15. </para>
  16. <programlisting language="php"><![CDATA[
  17. // импортирование ленты из текстового файла
  18. $feedFromFile = Zend_Feed::importFile('feed.xml');
  19. // импортирование ленты из строки
  20. $feedFromPHP = Zend_Feed::importString($feedString);
  21. ]]>
  22. </programlisting>
  23. <para>
  24. В примерах выше в случае успеха возвращается
  25. объект одного из классов, расширяющих <code>Zend_Feed_Abstract</code>, в
  26. зависимости от типа ленты. Если посредством одного из вышеприведенных
  27. методов для импортирования была извлечена лента RSS, то будет возвращен объект
  28. <code>Zend_Feed_Rss</code>. Если же импортируется лента Atom, то
  29. будет возвращен объект <code>Zend_Feed_Atom</code>. Эти методы для импортирования
  30. будут бросать исключение <code>Zend_Feed_Exception</code> в случае ошибки,
  31. такой, как недоступная для чтения или плохо сформированная лента.
  32. </para>
  33. <sect2 id="zend.feed.importing.custom">
  34. <title>Создание собственных лент</title>
  35. <para>
  36. <code>Zend_Feed</code> позволяет разработчикам легко создавать
  37. собственные ленты. Вам нужно просто создать массив и импортировать
  38. его в Zend_Feed. Импорт из массива может быть выполнен с помощью
  39. методов <code>Zend_Feed::importArray()</code> или
  40. <code>Zend_Feed::importBuilder()</code>. В последнем методе
  41. массив будет сформирован на лету с помощью специального
  42. источника данных, реализующего интерфейс
  43. <code>Zend_Feed_Builder_Interface</code>.
  44. </para>
  45. <sect3 id="zend.feed.importing.custom.importarray">
  46. <title>Импортирование массива</title>
  47. <programlisting language="php"><![CDATA[
  48. // Импортирование ленты из массива
  49. $atomFeedFromArray = Zend_Feed::importArray($array);
  50. // Следующая строка эквивалентна предыдущей
  51. // По умолчанию возвращается экземпляр Zend_Feed_Atom
  52. $atomFeedFromArray = Zend_Feed::importArray($array, 'atom');
  53. // Импортирование ленты RSS из массива
  54. $rssFeedFromArray = Zend_Feed::importArray($array, 'rss');
  55. ]]>
  56. </programlisting>
  57. <para>
  58. Формат массива должен соответствовать следующей структуре:
  59. </para>
  60. <programlisting language="php"><![CDATA[
  61. array(
  62. 'title' => 'заголовок ленты', // обязательный
  63. 'link' => 'канонический URL ленты', // обязательный
  64. 'lastUpdate' => 'время обновления', // опциональный
  65. 'published' => 'время публикации', // опциональный
  66. 'charset' => 'кодировка для текстовых данных', // обязательный
  67. 'description' => 'краткое описание ленты', // опциональный
  68. 'author' => 'автор/издатель ленты', // опциональный
  69. 'email' => 'e-mail автора', // опциональный
  70. 'webmaster' => // опциональный, игнорируется, если используется Atom
  71. 'e-mail лица, отвечающего за технические вопросы'
  72. 'copyright' => 'авторские права', // опциональный
  73. 'image' => 'URL к изображению', // опциональный
  74. 'generator' => 'генератор', // опциональный
  75. 'language' => 'язык, на котором выпускается лента', // опциональный
  76. 'ttl' => // опциональный, игнорируется, если используется Atom
  77. 'сколько минут лента может храниться в кэше ' .
  78. 'до обновления',
  79. 'rating' => // опциональный, игнорируется, если используется Atom
  80. 'рейтинг PICS',
  81. 'cloud' => array(
  82. 'domain' => 'домен, пример: rpc.sys.com', // обязательный
  83. 'port' => 'порт', // опциональный, по умолчанию 80
  84. 'path' => 'путь, пример: /RPC2', // обязательный
  85. 'registerProcedure' => 'процедура для вызова, пример: myCloud.rssPleaseNotify', // обязательный
  86. 'protocol' => 'используемый протокол, например, soap или xml-rpc' // обязательный
  87. ), // веб-сервис, поддерживающий интерфейс
  88. // rssCloud, отвечающий за уведомления об изменениях в канале
  89. // опциональный, игнорируется, если используется Atom
  90. 'textInput' => array(
  91. 'title' => 'надпись для кнопки отправки', // обязательный
  92. 'description' => 'пояснение к текстовому полю', // обязательный
  93. 'name' => 'атрибут name для текстового поля', // обязательный
  94. 'link' => 'URL скрипта, которому будет отправлены данные' // обязательный
  95. ), // текстовое поле для ввода, которое может отображаться в ленте
  96. // опциональный, игнорируется, если используется Atom
  97. 'skipHours' => array(
  98. 'часы в формате 24'
  99. // может содержать до 24 элементов, значения которых должны
  100. // находиться в диапазоне 0..23
  101. ), // Указывает аггрегатору, в какие часы он может не обновлять канал
  102. // опциональный, игнорируется, если используется Atom
  103. 'skipDays ' => array(
  104. 'пропускаемые дни недели'
  105. // может содержать до 7 элементов, значениями которых должны быть
  106. // Monday, Tuesday, Wednesday, Thursday, Friday, Saturday или Sunday
  107. ), // Указывает аггрегатору, в какие дни недели он может не обновлять канал
  108. // опциональный, игнорируется, если используется Atom
  109. 'itunes' => array(
  110. 'author' => 'автор', // опциональный, по умолчанию используется элемент из channel
  111. 'owner' => array(
  112. 'name' => 'имя владельца', // опциональный, по умолчанию используется элемент из channel
  113. 'email' => 'e-mail владельца' // опциональный, по умолчанию используется элемент из channel
  114. ) // владелец подкаста // опциональный
  115. 'image' => 'изображение для альбома/подкаста', // опциональный, по умолчанию используется элемент из channel
  116. 'subtitle' => 'краткое описание', // опциональный, по умолчанию используется элемент из channel
  117. 'summary' => 'полное описание', // опциональный, по умолчанию используется элемент из channel
  118. 'block' => 'блокирует показ (yes|no)', // опциональный
  119. 'category' => array(
  120. array('main' => 'основная категория', // обязательный
  121. 'sub' => 'подкатегория' // опциональный
  122. ),
  123. // до 3-х элементов с парами категория/подкатегория
  124. ) // 'категории для навигации' // обязательный
  125. 'explicit' => 'индикатор наличия материалов откровенного содержания (yes|no|clean)', // опциональный
  126. 'keywords' => 'список из ключевых слов, разделенных запятой (до 12 слов)', // опциональный
  127. 'new-feed-url' => 'используется для того, чтобы сообщить iTunes о новом URL ленты' // опциональный
  128. ) // данные для iTunes // опциональный, игнорируется, если используется Atom
  129. 'entries' => array(
  130. array(
  131. 'title' => 'заголовок сообщения', // обязательный
  132. 'link' => 'URL сообщения', // обязательный
  133. 'description' => 'краткое описание', // только текст без HTML, обязательный
  134. 'guid' => 'идентификатор сообщения, если не передан, то используется URL сообщения', // опциональный
  135. 'content' => 'содержание сообщения', // может содержать HTML, опциональный
  136. 'lastUpdate' => 'дата публикации', // опциональный
  137. 'comments' => 'страница для комментариев к сообщению', // опциональный
  138. 'commentRss' => 'URL ленты для комментариев, относящихся к сообщению', // опциональный
  139. 'source' => array(
  140. 'title' => 'заголовок оригинального источника', // обязательный
  141. 'url' => 'URL оригинального источника', // обязательный
  142. ), // оригинальный источник сообщения // опциональный
  143. 'category' => array(
  144. array(
  145. 'term' => 'имя категории', // обязательный
  146. 'scheme' => 'URL ресурса с классификацией' // опциональный
  147. ),
  148. array(
  149. // данные второй категории и т.д.
  150. )
  151. ), // список прикрепленных категорий // опциональный
  152. 'enclosure' => array(
  153. array(
  154. 'url' => 'URL вложения', // обязательный
  155. 'type' => 'тип MIME вложения', // опциональный
  156. 'length' => 'размер вложения в октетах' // опциональный
  157. ),
  158. array(
  159. // данные для второго вложения и т.д.
  160. )
  161. ) // список вложений для сообщения // опциональный
  162. ),
  163. array(
  164. // данные второго сообщения и т.д.
  165. )
  166. )
  167. );
  168. ]]>
  169. </programlisting>
  170. <para>
  171. Информационные ресурсы:
  172. <itemizedlist>
  173. <listitem>
  174. <para>
  175. Спецификация RSS 2.0: <ulink url="http://blogs.law.harvard.edu/tech/rss">RSS 2.0</ulink>
  176. </para>
  177. </listitem>
  178. <listitem>
  179. <para>
  180. Спецификация Atom: <ulink url="http://tools.ietf.org/html/rfc4287">RFC 4287</ulink>
  181. </para>
  182. </listitem>
  183. <listitem>
  184. <para>
  185. Спецификация WFW: <ulink url="http://wellformedweb.org/news/wfw_namespace_elements">Well
  186. Formed Web</ulink>
  187. </para>
  188. </listitem>
  189. <listitem>
  190. <para>
  191. Спецификация iTunes:
  192. <ulink url="http://www.apple.com/itunes/store/podcaststechspecs.html">Технические спецификации iTunes</ulink>
  193. </para>
  194. </listitem>
  195. </itemizedlist>
  196. </para>
  197. </sect3>
  198. <sect3 id="zend.feed.importing.custom.importbuilder">
  199. <title>Импортирование из специального источника данных</title>
  200. <para>
  201. Вы можете создать экземпляр Zeed_Feed из любого источника
  202. данных, реализующего интерфейс
  203. <code>Zend_Feed_Builder_Interface</code>. Вам нужно только
  204. реализовать методы <code>getHeader()</code> и
  205. <code>getEntries()</code> для того, чтобы можно было
  206. использовать свой объект с
  207. <code>Zend_Feed::importBuilder()</code>. Простой пример -
  208. вы можете использовать компоновщик
  209. <code>Zend_Feed_Builder</code>, который принимает массив в
  210. своем конструкторе, выполняет
  211. некоторую проверку и затем может использоваться в методе
  212. <code>importBuilder()</code>. <code>getEntries()</code>
  213. должен возвращать массив экземпляров
  214. <code>Zend_Feed_Builder_Entry</code>.
  215. </para>
  216. <note>
  217. <para>
  218. <code>Zend_Feed_Builder</code> служит только в качестве
  219. конкретной реализации для демонстрации использования.
  220. Пользователи должны создавать свои классы, реализующие
  221. интерфейс <code>Zend_Feed_Builder_Interface</code>.
  222. </para>
  223. </note>
  224. <para>
  225. Ниже приведен пример использования
  226. <code>Zend_Feed::importBuilder()</code>:
  227. </para>
  228. <programlisting language="php"><![CDATA[
  229. // Импортирование ленты из специального созданного ресурса-компоновщика
  230. $atomFeedFromArray =
  231. Zend_Feed::importBuilder(new Zend_Feed_Builder($array));
  232. // Следующая строка эквивалентна предыдущей.
  233. // По умолчанию возвращается экземпляр Zend_Feed_Atom
  234. $atomFeedFromArray =
  235. Zend_Feed::importArray(new Zend_Feed_Builder($array), 'atom');
  236. // Импортирование RSS-ленты из специально созданного ресурса-компоновщика
  237. $rssFeedFromArray =
  238. Zend_Feed::importArray(new Zend_Feed_Builder($array), 'rss');
  239. ]]>
  240. </programlisting>
  241. </sect3>
  242. <sect3 id="zend.feed.importing.custom.dump">
  243. <title>Дапм содержимого ленты</title>
  244. <para>
  245. Для того, чтобы произвести дамп экземпляра
  246. <code>Zend_Feed_Abstract</code>, вы можете использовать методы
  247. <code>send()</code> или <code>saveXml()</code>.
  248. </para>
  249. <programlisting language="php">
  250. <![CDATA[
  251. assert($feed instanceof Zend_Feed_Abstract);
  252. // вывод дампа ленты
  253. print $feed->saveXML();
  254. // отправка HTTP-заголовков и вывод дампа ленты
  255. $feed->send();
  256. ]]>
  257. </programlisting>
  258. </sect3>
  259. </sect2>
  260. </sect1>
  261. <!--
  262. vim:se ts=4 sw=4 et:
  263. -->