1 <?xml version="1.0" encoding="UTF-8"?>
3 <!-- EN-Revision: 18274 -->
4 <sect1 id="zend.feed.importing">
5 <title>フィードの読み込み</title>
8 <classname>Zend_Feed</classname> を使用すると、フィードの取得が非常に簡単に行えます。
9 フィードの <acronym>URI</acronym> がわかれば、単に <methodname>Zend_Feed::import()</methodname>
13 <programlisting language="php"><![CDATA[
14 $feed = Zend_Feed::import('http://feeds.example.com/feedName');
18 <classname>Zend_Feed</classname> を使用して、ファイルや <acronym>PHP</acronym>
19 文字列変数からフィードを読み込むこともできます。
22 <programlisting language="php"><![CDATA[
23 // テキストファイルからフィードを読み込みます
24 $feedFromFile = Zend_Feed::importFile('feed.xml');
26 // PHP の文字列変数からフィードを読み込みます
27 $feedFromPHP = Zend_Feed::importString($feedString);
31 上のすべての例では、成功した場合に返されるのは
32 <classname>Zend_Feed_Abstract</classname> を実装したクラスのオブジェクトで、
33 フィードの形式によって異なります。もし上のメソッドで <acronym>RSS</acronym> フィードを取得したのなら、
34 返されるオブジェクトは <classname>Zend_Feed_Rss</classname> です。一方、Atom
35 フィードを読み込んだのなら <classname>Zend_Feed_Atom</classname>
36 オブジェクトが返されます。読み込みに失敗したりフィードの形式がおかしかったりした場合は
37 <classname>Zend_Feed_Exception</classname> がスローされます。
40 <sect2 id="zend.feed.importing.custom">
41 <title>独自のフィード</title>
44 <classname>Zend_Feed</classname> を使用すると、独自のフィードを簡単に作成できます。
45 単に、配列を作成してそれを <classname>Zend_Feed</classname> で読み込むだけでいいのです。
46 配列を読み込むには <methodname>Zend_Feed::importArray()</methodname> あるいは
47 <methodname>Zend_Feed::importBuilder()</methodname> を使用します。
48 この場合、<classname>Zend_Feed_Builder_Interface</classname>
49 を実装した独自のデータソースによって配列がその場で算出されます。
52 <sect3 id="zend.feed.importing.custom.importarray">
53 <title>独自の配列の読み込み</title>
55 <programlisting language="php"><![CDATA[
57 $atomFeedFromArray = Zend_Feed::importArray($array);
60 // デフォルトで Zend_Feed_Atom のインスタンスを返します
61 $atomFeedFromArray = Zend_Feed::importArray($array, 'atom');
63 // rss フィードを配列から読み込みます
64 $rssFeedFromArray = Zend_Feed::importArray($array, 'rss');
68 配列の書式は、次のような構造になっていなければなりません。
71 <programlisting language="php"><![CDATA[
74 'title' => 'フィードのタイトル',
75 'link' => 'フィードへの正式な url',
78 'lastUpdate' => '更新日のタイムスタンプ',
79 'published' => '公開日のタイムスタンプ',
82 'charset' => 'テキストデータの文字セット',
85 'description' => 'フィードについての短い説明',
86 'author' => 'フィードの作者/公開者',
87 'email' => '作者のメールアドレス',
89 // 任意、atom を使用している場合は無視されます
90 'webmaster' => '技術的な問題の担当者のメールアドレス',
93 'copyright' => '著作権に関する情報',
94 'image' => '画像への url',
95 'generator' => '作成したツール',
96 'language' => 'フィードで使用している言語',
98 // 任意、atom を使用している場合は無視されます
99 'ttl' => 'フィードを何分間キャッシュするか',
100 'rating' => 'チャネルの PICS レート',
102 // 任意、atom を使用している場合は無視されます
106 'domain' => 'クラウドのドメイン、たとえば rpc.sys.com',
112 'path' => 'クラウドのパス、たとえば /RPC2',
113 'registerProcedure' => 'コールするプロシージャ、たとえば myCloud.rssPleaseNotify',
114 'protocol' => '使用するプロトコル、たとえば soap や xml-rpc'
117 // 任意、atom を使用している場合は無視されます
118 // フィードとともに表示させるテキスト入力ボックス
119 'textInput' => array(
121 'title' => 'テキスト入力欄の Submit ボタンのラベル',
122 'description' => 'テキスト入力欄についての説明',
123 'name' => 'テキスト入力欄のテキストオブジェクトの名前',
124 'link' => '入力内容を処理する CGI スクリプトの URL'
127 // 任意、atom を使用している場合は無視されます
128 // アグリゲータに対して、特定の時間に処理を飛ばすように伝えるヒント
129 'skipHours' => array(
130 // 最大 24 行までで、値は 0 から 23 までの数値
135 // 任意、atom を使用している場合は無視されます
136 // アグリゲータに対して、特定の日に処理を飛ばすように伝えるヒント
137 'skipDays ' => array(
139 // 値は Monday、Tuesday、Wednesday、Thursday、Friday、Saturday あるいは Sunday
144 // 任意、atom を使用している場合は無視されます
147 // 任意、デフォルトは本体の author の値
148 'author' => 'Artist 列',
150 // 任意、デフォルトは本体の author の値
154 'email' => 'オーナーのメールアドレス'
157 // 任意、デフォルトは本体の image の値
158 'image' => 'アルバム/ポッドキャストの画像',
160 // 任意、デフォルトは本体の description の値
161 'subtitle' => '短い説明',
165 'block' => 'エピソードを表示しないようにする (yes|no)',
167 // 必須、Category 列および iTunes Music Store Browse での値
180 'explicit' => 'ペアレンタルコントロールの警告グラフィック (yes|no|clean)',
181 'keywords' => '最大 12 件までのキーワードのカンマ区切りリスト',
182 'new-feed-url' => 'iTunes に対して新しいフィード URL の場所を通知するために使用する'
188 'title' => 'フィードエントリのタイトル',
189 'link' => 'フィードエントリへの url',
191 // 必須、テキストのみで html を含まない
192 'description' => 'フィードエントリの短いバージョン',
196 . '存在しない場合は link の値を使用します',
199 'content' => '長いバージョン',
202 'lastUpdate' => '公開日のタイムスタンプ',
203 'comments' => 'フィードエントリに対するコメントページ',
204 'commentRss' => '関連するコメントへのフィードの url',
209 'title' => '元ソースのタイトル',
210 'url' => '元ソースへの url'
217 'term' => '最初のカテゴリのラベル',
220 'scheme' => 'カテゴリのスキームを表す url'
228 // 任意、フィードエントリのエンクロージャの一覧
229 'enclosure' => array(
232 'url' => 'リンクされたエンクロージャの url',
235 'type' => 'エンクロージャの mime タイプ',
236 'length' => 'リンクされたコンテンツのサイズを表すオクテット数'
259 <acronym>RSS</acronym> 2.0 の仕様: <ulink url="http://blogs.law.harvard.edu/tech/rss">RSS 2.0</ulink>
265 Atom の仕様: <ulink url="http://tools.ietf.org/html/rfc4287">RFC 4287</ulink>
271 <acronym>WFW</acronym> の仕様: <ulink url="http://wellformedweb.org/news/wfw_namespace_elements">Well
279 url="http://www.apple.com/itunes/store/podcaststechspecs.html">iTunes
280 Technical Specifications</ulink>
286 <sect3 id="zend.feed.importing.custom.importbuilder">
287 <title>独自のデータソースの読み込み</title>
290 <classname>Zend_Feed_Builder_Interface</classname> を実装した任意のデータソースから、
291 <classname>Zend_Feed</classname> のインスタンスを作成できます。単に
292 <methodname>getHeader()</methodname> メソッドおよび <methodname>getEntries()</methodname>
293 メソッドを実装するだけで、自分で作成したオブジェクトが
294 <methodname>Zend_Feed::importBuilder()</methodname> で使用できるようになります。
295 <classname>Zend_Feed_Builder</classname> は、これを単純に実装したものです。
296 コンストラクタで配列を受け取り、ちょっとした検証を行い、
297 そして <methodname>importBuilder()</methodname> メソッドで使用できるようにします。
298 <methodname>getHeader()</methodname> メソッドは <classname>Zend_Feed_Builder_Header</classname>
299 のインスタンスを返さなければなりません。また <methodname>getEntries()</methodname> は
300 <classname>Zend_Feed_Builder_Entry</classname> のインスタンスの配列を返さなければなりません。
305 <classname>Zend_Feed_Builder</classname> は、使用法を説明するための具体的な実装例です。
307 <classname>Zend_Feed_Builder_Interface</classname>
308 を実装した独自のクラスを作成することを推奨します。
313 これが、<methodname>Zend_Feed::importBuilder()</methodname> の使用例です。
316 <programlisting language="php"><![CDATA[
317 // 独自のビルダソースからフィードを読み込みます
319 Zend_Feed::importBuilder(new Zend_Feed_Builder($array));
322 // デフォルトで Zend_Feed_Atom のインスタンスを返します
324 Zend_Feed::importBuilder(new Zend_Feed_Builder($array), 'atom');
326 // 独自のビルダ配列から rss フィードを読み込みます
328 Zend_Feed::importBuilder(new Zend_Feed_Builder($array), 'rss');
333 <sect3 id="zend.feed.importing.custom.dump">
335 <title>フィードの内容の出力</title>
338 <classname>Zend_Feed_Abstract</classname> インスタンスの内容を出力するには、
339 <code>send()</code> メソッドあるいは <code>saveXml()</code> メソッドを使用します。
342 <programlisting language="php"><![CDATA[
343 assert($feed instanceof Zend_Feed_Abstract);
346 print $feed->saveXML();
348 // http ヘッダを送信し、フィードを出力します