Zend_Feed-Importing.xml 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- Reviewed: no -->
  3. <!-- EN-Revision: 15103 -->
  4. <sect1 id="zend.feed.importing">
  5. <title>フィードの読み込み</title>
  6. <para>
  7. <classname>Zend_Feed</classname> を使用すると、フィードの取得が非常に簡単に行えます。
  8. フィードの URI がわかれば、単に <classname>Zend_Feed::import()</classname>
  9. メソッドを使用すればよいのです。
  10. </para>
  11. <programlisting role="php"><![CDATA[
  12. $feed = Zend_Feed::import('http://feeds.example.com/feedName');
  13. ]]>
  14. </programlisting>
  15. <para>
  16. <classname>Zend_Feed</classname> を使用して、ファイルや PHP
  17. 文字列変数からフィードを読み込むこともできます。
  18. </para>
  19. <programlisting role="php"><![CDATA[
  20. // テキストファイルからフィードを読み込みます
  21. $feedFromFile = Zend_Feed::importFile('feed.xml');
  22. // PHP の文字列変数からフィードを読み込みます
  23. $feedFromPHP = Zend_Feed::importString($feedString);
  24. ]]>
  25. </programlisting>
  26. <para>
  27. 上のすべての例では、成功した場合に返されるのは
  28. <classname>Zend_Feed_Abstract</classname> を実装したクラスのオブジェクトで、
  29. フィードの形式によって異なります。もし上のメソッドで RSS フィードを取得したのなら、
  30. 返されるオブジェクトは <classname>Zend_Feed_Rss</classname> です。一方、Atom
  31. フィードを読み込んだのなら <classname>Zend_Feed_Atom</classname>
  32. オブジェクトが返されます。読み込みに失敗したりフィードの形式がおかしかったりした場合は
  33. <classname>Zend_Feed_Exception</classname> がスローされます。
  34. </para>
  35. <sect2 id="zend.feed.importing.custom">
  36. <title>独自のフィード</title>
  37. <para>
  38. <classname>Zend_Feed</classname> を使用すると、独自のフィードを簡単に作成することができます。
  39. 単に、配列を作成してそれを <classname>Zend_Feed</classname> で読み込むだけでいいのです。
  40. 配列を読み込むには <classname>Zend_Feed::importArray()</classname> あるいは
  41. <classname>Zend_Feed::importBuilder()</classname> を使用します。
  42. この場合、<classname>Zend_Feed_Builder_Interface</classname>
  43. を実装した独自のデータソースによって配列がその場で算出されます。
  44. </para>
  45. <sect3 id="zend.feed.importing.custom.importarray">
  46. <title>独自の配列の読み込み</title>
  47. <programlisting role="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 role="php"><![CDATA[
  61. array(
  62. // 必須
  63. 'title' => 'フィードのタイトル',
  64. 'link' => 'フィードへの正式な url',
  65. // 任意
  66. 'lastUpdate' => '更新日のタイムスタンプ',
  67. 'published' => '公開日のタイムスタンプ',
  68. // 必須
  69. 'charset' => 'テキストデータの文字セット',
  70. // 任意
  71. 'description' => 'フィードについての短い説明',
  72. 'author' => 'フィードの作者/公開者',
  73. 'email' => '作者のメールアドレス',
  74. // 任意、atom を使用している場合は無視されます
  75. 'webmaster' => '技術的な問題の担当者のメールアドレス',
  76. // 任意
  77. 'copyright' => '著作権に関する情報',
  78. 'image' => '画像への url',
  79. 'generator' => '作成したツール',
  80. 'language' => 'フィードで使用している言語',
  81. // 任意、atom を使用している場合は無視されます
  82. 'ttl' => 'フィードを何分間キャッシュするか',
  83. 'rating' => 'チャネルの PICS レート',
  84. // 任意、atom を使用している場合は無視されます
  85. // 更新を通知するクラウド
  86. 'cloud' => array(
  87. // 必須
  88. 'domain' => 'クラウドのドメイン、たとえば rpc.sys.com',
  89. // 任意、デフォルトは 80
  90. 'port' => '接続するポート',
  91. // 必須
  92. 'path' => 'クラウドのパス、たとえば /RPC2',
  93. 'registerProcedure' => 'コールするプロシージャ、たとえば myCloud.rssPleaseNotify',
  94. 'protocol' => '使用するプロトコル、たとえば soap や xml-rpc'
  95. ),
  96. // 任意、atom を使用している場合は無視されます
  97. // フィードとともに表示させるテキスト入力ボックス
  98. 'textInput' => array(
  99. // 必須
  100. 'title' => 'テキスト入力欄の Submit ボタンのラベル',
  101. 'description' => 'テキスト入力欄についての説明',
  102. 'name' => 'テキスト入力欄のテキストオブジェクトの名前',
  103. 'link' => '入力内容を処理する CGI スクリプトの URL'
  104. ),
  105. // 任意、atom を使用している場合は無視されます
  106. // アグリゲータに対して、特定の時間に処理を飛ばすように伝えるヒント
  107. 'skipHours' => array(
  108. // 最大 24 行までで、値は 0 から 23 までの数値
  109. // たとえば 13 (午後一時)
  110. '24 時間形式の時間'
  111. ),
  112. // 任意、atom を使用している場合は無視されます
  113. // アグリゲータに対して、特定の日に処理を飛ばすように伝えるヒント
  114. 'skipDays ' => array(
  115. // 最大 7 行まで
  116. // 値は Monday、Tuesday、Wednesday、Thursday、Friday、Saturday あるいは Sunday
  117. // たとえば Monday
  118. 'スキップする曜日'
  119. ),
  120. // 任意、atom を使用している場合は無視されます
  121. // Itunes 拡張データ
  122. 'itunes' => array(
  123. // 任意、デフォルトは本体の author の値
  124. 'author' => 'Artist 列',
  125. // 任意、デフォルトは本体の author の値
  126. // ポッドキャストのオーナー
  127. 'owner' => array(
  128. 'name' => 'オーナーの名前',
  129. 'email' => 'オーナーのメールアドレス'
  130. ),
  131. // 任意、デフォルトは本体の image の値
  132. 'image' => 'アルバム/ポッドキャストの画像',
  133. // 任意、デフォルトは本体の description の値
  134. 'subtitle' => '短い説明',
  135. 'summary' => '長い説明',
  136. // 任意
  137. 'block' => 'エピソードを表示しないようにする (yes|no)',
  138. // 必須、Category 列および iTunes Music Store Browse での値
  139. 'category' => array(
  140. // 最大 3 行まで
  141. array(
  142. // 必須
  143. 'main' => 'メインカテゴリ',
  144. // 任意
  145. 'sub' => 'サブカテゴリ'
  146. )
  147. ),
  148. // 任意
  149. 'explicit' => 'ペアレンタルコントロールの警告グラフィック (yes|no|clean)',
  150. 'keywords' => '最大 12 件までのキーワードのカンマ区切りリスト',
  151. 'new-feed-url' => 'iTunes に対して新しいフィード URL の場所を通知するために使用する'
  152. ),
  153. 'entries' => array(
  154. array(
  155. // 必須
  156. 'title' => 'フィードエントリのタイトル',
  157. 'link' => 'フィードエントリへの url',
  158. // 必須、テキストのみで html を含まない
  159. 'description' => 'フィードエントリの短いバージョン',
  160. // 任意
  161. 'guid' => '記事の id。'
  162. . '存在しない場合は link の値を使用します',
  163. // 任意、html を含めることが可能
  164. 'content' => '長いバージョン',
  165. // 任意
  166. 'lastUpdate' => '公開日のタイムスタンプ',
  167. 'comments' => 'フィードエントリに対するコメントページ',
  168. 'commentRss' => '関連するコメントへのフィードの url',
  169. // 任意、フィードエントリの元のソース
  170. 'source' => array(
  171. // 必須
  172. 'title' => '元ソースのタイトル',
  173. 'url' => '元ソースへの url'
  174. ),
  175. // 任意、関連付けるカテゴリの一覧
  176. 'category' => array(
  177. array(
  178. // 必須
  179. 'term' => '最初のカテゴリのラベル',
  180. // 任意
  181. 'scheme' => 'カテゴリのスキームを表す url'
  182. ),
  183. array(
  184. // 二番目以降のカテゴリのデータ
  185. )
  186. ),
  187. // 任意、フィードエントリのエンクロージャの一覧
  188. 'enclosure' => array(
  189. array(
  190. // 必須
  191. 'url' => 'リンクされたエンクロージャの url',
  192. // 任意
  193. 'type' => 'エンクロージャの mime タイプ',
  194. 'length' => 'リンクされたコンテンツのサイズを表すオクテット数'
  195. ),
  196. array(
  197. // 二番目以降のエンクロージャのデータ
  198. )
  199. )
  200. ),
  201. array(
  202. // 二番目のエントリ以降のデータ
  203. )
  204. )
  205. );
  206. ]]>
  207. </programlisting>
  208. <para>
  209. 参考
  210. <itemizedlist>
  211. <listitem>
  212. <para>
  213. RSS 2.0 の仕様: <ulink url="http://blogs.law.harvard.edu/tech/rss">RSS 2.0</ulink>
  214. </para>
  215. </listitem>
  216. <listitem>
  217. <para>
  218. Atom の仕様: <ulink url="http://tools.ietf.org/html/rfc4287">RFC 4287</ulink>
  219. </para>
  220. </listitem>
  221. <listitem>
  222. <para>
  223. WFW の仕様: <ulink url="http://wellformedweb.org/news/wfw_namespace_elements">Well
  224. Formed Web</ulink>
  225. </para>
  226. </listitem>
  227. <listitem>
  228. <para>
  229. iTunes の仕様:
  230. <ulink url="http://www.apple.com/itunes/store/podcaststechspecs.html">iTunes Technical
  231. Specifications</ulink>
  232. </para>
  233. </listitem>
  234. </itemizedlist>
  235. </para>
  236. </sect3>
  237. <sect3 id="zend.feed.importing.custom.importbuilder">
  238. <title>独自のデータソースの読み込み</title>
  239. <para>
  240. <classname>Zend_Feed_Builder_Interface</classname> を実装した任意のデータソースから、
  241. Zend_Feed のインスタンスを作成することができます。単に
  242. <code>getHeader()</code> メソッドおよび <code>getEntries()</code>
  243. メソッドを実装するだけで、自分で作成したオブジェクトが
  244. <classname>Zend_Feed::importBuilder()</classname> で使用できるようになります。
  245. <classname>Zend_Feed_Builder</classname> は、これを単純に実装したものです。
  246. コンストラクタで配列を受け取り、ちょっとした検証を行い、
  247. そして <code>importBuilder()</code> メソッドで使用できるようにします。
  248. <code>getHeader()</code> メソッドは <classname>Zend_Feed_Builder_Header</classname>
  249. のインスタンスを返さなければなりません。また <code>getEntries()</code> は
  250. <classname>Zend_Feed_Builder_Entry</classname> のインスタンスの配列を返さなければなりません。
  251. </para>
  252. <note>
  253. <para>
  254. <classname>Zend_Feed_Builder</classname> は、使用法を説明するための具体的な実装例です。
  255. 実際に使用する際には、
  256. <classname>Zend_Feed_Builder_Interface</classname>
  257. を実装した独自のクラスを作成することを推奨します。
  258. </para>
  259. </note>
  260. <para>
  261. これが、<classname>Zend_Feed::importBuilder()</classname> の使用例です。
  262. </para>
  263. <programlisting role="php"><![CDATA[
  264. // 独自のビルダソースからフィードを読み込みます
  265. $atomFeedFromArray =
  266. Zend_Feed::importBuilder(new Zend_Feed_Builder($array));
  267. // この行は、上と同じ意味です。
  268. // デフォルトで Zend_Feed_Atom のインスタンスを返します
  269. $atomFeedFromArray =
  270. Zend_Feed::importArray(new Zend_Feed_Builder($array), 'atom');
  271. // 独自のビルダ配列から rss フィードを読み込みます
  272. $rssFeedFromArray =
  273. Zend_Feed::importArray(new Zend_Feed_Builder($array), 'rss');
  274. ]]>
  275. </programlisting>
  276. </sect3>
  277. <sect3 id="zend.feed.importing.custom.dump">
  278. <title>フィードの内容の出力</title>
  279. <para>
  280. <classname>Zend_Feed_Abstract</classname> インスタンスの内容を出力するには、
  281. <code>send()</code> メソッドあるいは <code>saveXml()</code> メソッドを使用します。
  282. </para>
  283. <programlisting role="php"><![CDATA[
  284. assert($feed instanceof Zend_Feed_Abstract);
  285. // フィードを標準出力に出力します
  286. print $feed->saveXML();
  287. // http ヘッダを送信し、フィードを出力します
  288. $feed->send();
  289. ]]>
  290. </programlisting>
  291. </sect3>
  292. </sect2>
  293. </sect1>
  294. <!--
  295. vim:se ts=4 sw=4 et:
  296. -->