Zend_Feed
を使用すると、フィードの取得が非常に簡単に行えます。
フィードの URI がわかれば、単に Zend_Feed::import()
メソッドを使用すればよいのです。
$feed = Zend_Feed::import('http://feeds.example.com/feedName');
Zend_Feed
を使用して、ファイルや PHP
文字列変数からフィードを読み込むこともできます。
// テキストファイルからフィードを読み込みます $feedFromFile = Zend_Feed::importFile('feed.xml'); // PHP の文字列変数からフィードを読み込みます $feedFromPHP = Zend_Feed::importString($feedString);
上のすべての例では、成功した場合に返されるのは
Zend_Feed_Abstract
を実装したクラスのオブジェクトで、
フィードの形式によって異なります。もし上のメソッドで RSS フィードを取得したのなら、
返されるオブジェクトは Zend_Feed_Rss
です。一方、Atom
フィードを読み込んだのなら Zend_Feed_Atom
オブジェクトが返されます。読み込みに失敗したりフィードの形式がおかしかったりした場合は
Zend_Feed_Exception
がスローされます。
Zend_Feed
を使用すると、独自のフィードを簡単に作成できます。
単に、配列を作成してそれを Zend_Feed
で読み込むだけでいいのです。
配列を読み込むには Zend_Feed::importArray()
あるいは
Zend_Feed::importBuilder()
を使用します。
この場合、Zend_Feed_Builder_Interface
を実装した独自のデータソースによって配列がその場で算出されます。
// フィードを配列から読み込みます $atomFeedFromArray = Zend_Feed::importArray($array); // この行は、上と同じ意味です。 // デフォルトで Zend_Feed_Atom のインスタンスを返します $atomFeedFromArray = Zend_Feed::importArray($array, 'atom'); // rss フィードを配列から読み込みます $rssFeedFromArray = Zend_Feed::importArray($array, 'rss');
配列の書式は、次のような構造になっていなければなりません。
array( // 必須 'title' => 'フィードのタイトル', 'link' => 'フィードへの正式な url', // 任意 'lastUpdate' => '更新日のタイムスタンプ', 'published' => '公開日のタイムスタンプ', // 必須 'charset' => 'テキストデータの文字セット', // 任意 'description' => 'フィードについての短い説明', 'author' => 'フィードの作者/公開者', 'email' => '作者のメールアドレス', // 任意、atom を使用している場合は無視されます 'webmaster' => '技術的な問題の担当者のメールアドレス', // 任意 'copyright' => '著作権に関する情報', 'image' => '画像への url', 'generator' => '作成したツール', 'language' => 'フィードで使用している言語', // 任意、atom を使用している場合は無視されます 'ttl' => 'フィードを何分間キャッシュするか', 'rating' => 'チャネルの PICS レート', // 任意、atom を使用している場合は無視されます // 更新を通知するクラウド 'cloud' => array( // 必須 'domain' => 'クラウドのドメイン、たとえば rpc.sys.com', // 任意、デフォルトは 80 'port' => '接続するポート', // 必須 'path' => 'クラウドのパス、たとえば /RPC2', 'registerProcedure' => 'コールするプロシージャ、たとえば myCloud.rssPleaseNotify', 'protocol' => '使用するプロトコル、たとえば soap や xml-rpc' ), // 任意、atom を使用している場合は無視されます // フィードとともに表示させるテキスト入力ボックス 'textInput' => array( // 必須 'title' => 'テキスト入力欄の Submit ボタンのラベル', 'description' => 'テキスト入力欄についての説明', 'name' => 'テキスト入力欄のテキストオブジェクトの名前', 'link' => '入力内容を処理する CGI スクリプトの URL' ), // 任意、atom を使用している場合は無視されます // アグリゲータに対して、特定の時間に処理を飛ばすように伝えるヒント 'skipHours' => array( // 最大 24 行までで、値は 0 から 23 までの数値 // たとえば 13 (午後一時) '24 時間形式の時間' ), // 任意、atom を使用している場合は無視されます // アグリゲータに対して、特定の日に処理を飛ばすように伝えるヒント 'skipDays ' => array( // 最大 7 行まで // 値は Monday、Tuesday、Wednesday、Thursday、Friday、Saturday あるいは Sunday // たとえば Monday 'スキップする曜日' ), // 任意、atom を使用している場合は無視されます // Itunes 拡張データ 'itunes' => array( // 任意、デフォルトは本体の author の値 'author' => 'Artist 列', // 任意、デフォルトは本体の author の値 // ポッドキャストのオーナー 'owner' => array( 'name' => 'オーナーの名前', 'email' => 'オーナーのメールアドレス' ), // 任意、デフォルトは本体の image の値 'image' => 'アルバム/ポッドキャストの画像', // 任意、デフォルトは本体の description の値 'subtitle' => '短い説明', 'summary' => '長い説明', // 任意 'block' => 'エピソードを表示しないようにする (yes|no)', // 必須、Category 列および iTunes Music Store Browse での値 'category' => array( // 最大 3 行まで array( // 必須 'main' => 'メインカテゴリ', // 任意 'sub' => 'サブカテゴリ' ) ), // 任意 'explicit' => 'ペアレンタルコントロールの警告グラフィック (yes|no|clean)', 'keywords' => '最大 12 件までのキーワードのカンマ区切りリスト', 'new-feed-url' => 'iTunes に対して新しいフィード URL の場所を通知するために使用する' ), 'entries' => array( array( // 必須 'title' => 'フィードエントリのタイトル', 'link' => 'フィードエントリへの url', // 必須、テキストのみで html を含まない 'description' => 'フィードエントリの短いバージョン', // 任意 'guid' => '記事の id。' . '存在しない場合は link の値を使用します', // 任意、html を含めることが可能 'content' => '長いバージョン', // 任意 'lastUpdate' => '公開日のタイムスタンプ', 'comments' => 'フィードエントリに対するコメントページ', 'commentRss' => '関連するコメントへのフィードの url', // 任意、フィードエントリの元のソース 'source' => array( // 必須 'title' => '元ソースのタイトル', 'url' => '元ソースへの url' ), // 任意、関連付けるカテゴリの一覧 'category' => array( array( // 必須 'term' => '最初のカテゴリのラベル', // 任意 'scheme' => 'カテゴリのスキームを表す url' ), array( // 二番目以降のカテゴリのデータ ) ), // 任意、フィードエントリのエンクロージャの一覧 'enclosure' => array( array( // 必須 'url' => 'リンクされたエンクロージャの url', // 任意 'type' => 'エンクロージャの mime タイプ', 'length' => 'リンクされたコンテンツのサイズを表すオクテット数' ), array( // 二番目以降のエンクロージャのデータ ) ) ), array( // 二番目のエントリ以降のデータ ) ) );
参考
-
RSS 2.0 の仕様: RSS 2.0
-
Atom の仕様: RFC 4287
-
WFW の仕様: Well Formed Web
-
iTunes の仕様: iTunes Technical Specifications
Zend_Feed_Builder_Interface
を実装した任意のデータソースから、
Zend_Feed
のインスタンスを作成できます。単に
getHeader()
メソッドおよび getEntries()
メソッドを実装するだけで、自分で作成したオブジェクトが
Zend_Feed::importBuilder()
で使用できるようになります。
Zend_Feed_Builder
は、これを単純に実装したものです。
コンストラクタで配列を受け取り、ちょっとした検証を行い、
そして importBuilder()
メソッドで使用できるようにします。
getHeader()
メソッドは Zend_Feed_Builder_Header
のインスタンスを返さなければなりません。また getEntries()
は
Zend_Feed_Builder_Entry
のインスタンスの配列を返さなければなりません。
注記
Zend_Feed_Builder
は、使用法を説明するための具体的な実装例です。
実際に使用する際には、
Zend_Feed_Builder_Interface
を実装した独自のクラスを作成することを推奨します。
これが、Zend_Feed::importBuilder()
の使用例です。
// 独自のビルダソースからフィードを読み込みます $atomFeedFromArray = Zend_Feed::importBuilder(new Zend_Feed_Builder($array)); // この行は、上と同じ意味です。 // デフォルトで Zend_Feed_Atom のインスタンスを返します $atomFeedFromArray = Zend_Feed::importBuilder(new Zend_Feed_Builder($array), 'atom'); // 独自のビルダ配列から rss フィードを読み込みます $rssFeedFromArray = Zend_Feed::importBuilder(new Zend_Feed_Builder($array), 'rss');