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