導入

フィードの読み込み

Zend_Feed を使用すると、フィードの取得が非常に簡単に行えます。 フィードの URI がわかれば、単に Zend_Feed::import() メソッドを使用すればよいのです。

  1. $feed = Zend_Feed::import('http://feeds.example.com/feedName');

Zend_Feed を使用して、ファイルや PHP 文字列変数からフィードを読み込むこともできます。

  1. // テキストファイルからフィードを読み込みます
  2. $feedFromFile = Zend_Feed::importFile('feed.xml');
  3.  
  4. // PHP の文字列変数からフィードを読み込みます
  5. $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 を実装した独自のデータソースによって配列がその場で算出されます。

独自の配列の読み込み

  1. // フィードを配列から読み込みます
  2. $atomFeedFromArray = Zend_Feed::importArray($array);
  3.  
  4. // この行は、上と同じ意味です。
  5. // デフォルトで Zend_Feed_Atom のインスタンスを返します
  6. $atomFeedFromArray = Zend_Feed::importArray($array, 'atom');
  7.  
  8. // rss フィードを配列から読み込みます
  9. $rssFeedFromArray = Zend_Feed::importArray($array, 'rss');

配列の書式は、次のような構造になっていなければなりません。

  1.     // 必須
  2.     'title' => 'フィードのタイトル',
  3.     'link'  => 'フィードへの正式な url',
  4.  
  5.     // 任意
  6.     'lastUpdate' => '更新日のタイムスタンプ',
  7.     'published'  => '公開日のタイムスタンプ',
  8.  
  9.     // 必須
  10.     'charset' => 'テキストデータの文字セット',
  11.  
  12.     // 任意
  13.     'description' => 'フィードについての短い説明',
  14.     'author'      => 'フィードの作者/公開者',
  15.     'email'       => '作者のメールアドレス',
  16.  
  17.     // 任意、atom を使用している場合は無視されます
  18.     'webmaster' => '技術的な問題の担当者のメールアドレス',
  19.  
  20.     // 任意
  21.     'copyright' => '著作権に関する情報',
  22.     'image'     => '画像への url',
  23.     'generator' => '作成したツール',
  24.     'language'  => 'フィードで使用している言語',
  25.  
  26.     // 任意、atom を使用している場合は無視されます
  27.     'ttl'    => 'フィードを何分間キャッシュするか',
  28.     'rating' => 'チャネルの PICS レート',
  29.  
  30.     // 任意、atom を使用している場合は無視されます
  31.     // 更新を通知するクラウド
  32.     'cloud'       => array(
  33.         // 必須
  34.         'domain' => 'クラウドのドメイン、たとえば rpc.sys.com',
  35.  
  36.         // 任意、デフォルトは 80
  37.         'port' => '接続するポート',
  38.  
  39.         // 必須
  40.         'path'              => 'クラウドのパス、たとえば /RPC2',
  41.         'registerProcedure' => 'コールするプロシージャ、たとえば myCloud.rssPleaseNotify',
  42.         'protocol'          => '使用するプロトコル、たとえば soap や xml-rpc'
  43.     ),
  44.  
  45.     // 任意、atom を使用している場合は無視されます
  46.     // フィードとともに表示させるテキスト入力ボックス
  47.     'textInput'   => array(
  48.         // 必須
  49.         'title'       => 'テキスト入力欄の Submit ボタンのラベル',
  50.         'description' => 'テキスト入力欄についての説明',
  51.         'name'        => 'テキスト入力欄のテキストオブジェクトの名前',
  52.         'link'        => '入力内容を処理する CGI スクリプトの URL'
  53.     ),
  54.  
  55.     // 任意、atom を使用している場合は無視されます
  56.     // アグリゲータに対して、特定の時間に処理を飛ばすように伝えるヒント
  57.     'skipHours' => array(
  58.         // 最大 24 行までで、値は 0 から 23 までの数値
  59.         // たとえば 13 (午後一時)
  60.         '24 時間形式の時間'
  61.     ),
  62.  
  63.     // 任意、atom を使用している場合は無視されます
  64.     // アグリゲータに対して、特定の日に処理を飛ばすように伝えるヒント
  65.     'skipDays ' => array(
  66.         // 最大 7 行まで
  67.         // 値は Monday、Tuesday、Wednesday、Thursday、Friday、Saturday あるいは Sunday
  68.         // たとえば Monday
  69.         'スキップする曜日'
  70.     ),
  71.  
  72.     // 任意、atom を使用している場合は無視されます
  73.     // Itunes 拡張データ
  74.     'itunes' => array(
  75.         // 任意、デフォルトは本体の author の値
  76.         'author' => 'Artist 列',
  77.  
  78.         // 任意、デフォルトは本体の author の値
  79.         // ポッドキャストのオーナー
  80.         'owner' => array(
  81.             'name'  => 'オーナーの名前',
  82.             'email' => 'オーナーのメールアドレス'
  83.         ),
  84.  
  85.         // 任意、デフォルトは本体の image の値
  86.         'image' => 'アルバム/ポッドキャストの画像',
  87.  
  88.         // 任意、デフォルトは本体の description の値
  89.         'subtitle' => '短い説明',
  90.         'summary'  => '長い説明',
  91.  
  92.         // 任意
  93.         'block' => 'エピソードを表示しないようにする (yes|no)',
  94.  
  95.         // 必須、Category 列および iTunes Music Store Browse での値
  96.         'category' => array(
  97.             // 最大 3 行まで
  98.             array(
  99.                 // 必須
  100.                 'main' => 'メインカテゴリ',
  101.  
  102.                 // 任意
  103.                 'sub'  => 'サブカテゴリ'
  104.             )
  105.         ),
  106.  
  107.         // 任意
  108.         'explicit'     => 'ペアレンタルコントロールの警告グラフィック (yes|no|clean)',
  109.         'keywords'     => '最大 12 件までのキーワードのカンマ区切りリスト',
  110.         'new-feed-url' => 'iTunes に対して新しいフィード URL の場所を通知するために使用する'
  111.     ),
  112.  
  113.     'entries' => array(
  114.         array(
  115.             // 必須
  116.             'title' => 'フィードエントリのタイトル',
  117.             'link'  => 'フィードエントリへの url',
  118.  
  119.             // 必須、テキストのみで html を含まない
  120.             'description' => 'フィードエントリの短いバージョン',
  121.  
  122.             // 任意
  123.             'guid' => '記事の id。'
  124.                    .  '存在しない場合は link の値を使用します',
  125.  
  126.             // 任意、html を含めることが可能
  127.             'content' => '長いバージョン',
  128.  
  129.             // 任意
  130.             'lastUpdate' => '公開日のタイムスタンプ',
  131.             'comments'   => 'フィードエントリに対するコメントページ',
  132.             'commentRss' => '関連するコメントへのフィードの url',
  133.  
  134.             // 任意、フィードエントリの元のソース
  135.             'source' => array(
  136.                 // 必須
  137.                 'title' => '元ソースのタイトル',
  138.                 'url'   => '元ソースへの url'
  139.             ),
  140.  
  141.             // 任意、関連付けるカテゴリの一覧
  142.             'category' => array(
  143.                 array(
  144.                     // 必須
  145.                     'term' => '最初のカテゴリのラベル',
  146.  
  147.                     // 任意
  148.                     'scheme' => 'カテゴリのスキームを表す url'
  149.                 ),
  150.  
  151.                 array(
  152.                     // 二番目以降のカテゴリのデータ
  153.                 )
  154.             ),
  155.  
  156.             // 任意、フィードエントリのエンクロージャの一覧
  157.             'enclosure'    => array(
  158.                 array(
  159.                     // 必須
  160.                     'url' => 'リンクされたエンクロージャの url',
  161.  
  162.                     // 任意
  163.                     'type' => 'エンクロージャの mime タイプ',
  164.                     'length' => 'リンクされたコンテンツのサイズを表すオクテット数'
  165.                 ),
  166.  
  167.                 array(
  168.                     // 二番目以降のエンクロージャのデータ
  169.                 )
  170.             )
  171.         ),
  172.  
  173.         array(
  174.             // 二番目のエントリ以降のデータ
  175.         )
  176.     )
  177. );

参考

独自のデータソースの読み込み

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 のインスタンスの配列を返さなければなりません。

Note: Zend_Feed_Builder は、使用法を説明するための具体的な実装例です。 実際に使用する際には、 Zend_Feed_Builder_Interface を実装した独自のクラスを作成することを推奨します。

これが、 Zend_Feed::importBuilder() の使用例です。

  1. // 独自のビルダソースからフィードを読み込みます
  2. $atomFeedFromArray =
  3.     Zend_Feed::importBuilder(new Zend_Feed_Builder($array));
  4.  
  5. // この行は、上と同じ意味です。
  6. // デフォルトで Zend_Feed_Atom のインスタンスを返します
  7. $atomFeedFromArray =
  8.     Zend_Feed::importBuilder(new Zend_Feed_Builder($array), 'atom');
  9.  
  10. // 独自のビルダ配列から rss フィードを読み込みます
  11. $rssFeedFromArray =
  12.     Zend_Feed::importBuilder(new Zend_Feed_Builder($array), 'rss');

フィードの内容の出力

Zend_Feed_Abstract インスタンスの内容を出力するには、 send() メソッドあるいは saveXml() メソッドを使用します。

  1. assert($feed instanceof Zend_Feed_Abstract);
  2.  
  3. // フィードを標準出力に出力します
  4. print $feed->saveXML();
  5.  
  6. // http ヘッダを送信し、フィードを出力します
  7. $feed->send();

導入