導入

フィードの読み込み

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

  1. span style="color: #ff0000;">'http://feeds.example.com/feedName');

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

  1. // テキストファイルからフィードを読み込みます
  2. 'feed.xml');
  3.  
  4. // PHP の文字列変数からフィードを読み込みます

上のすべての例では、成功した場合に返されるのは 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. // この行は、上と同じ意味です。
  3. // デフォルトで Zend_Feed_Atom のインスタンスを返します
  4. 'atom');
  5.  
  6. // rss フィードを配列から読み込みます
  7. 'rss');

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

  1. span style="color: #808080; font-style: italic;">// 必須
  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'// 必須
  33.         'domain' => 'クラウドのドメイン、たとえば rpc.sys.com',
  34.  
  35.         // 任意、デフォルトは 80
  36.         'port' => '接続するポート',
  37.  
  38.         // 必須
  39.         'path'              => 'クラウドのパス、たとえば /RPC2',
  40.         'registerProcedure' => 'コールするプロシージャ、たとえば myCloud.rssPleaseNotify',
  41.         'protocol'          => '使用するプロトコル、たとえば soap や xml-rpc'
  42.     ),
  43.  
  44.     // 任意、atom を使用している場合は無視されます
  45.     // フィードとともに表示させるテキスト入力ボックス
  46.     'textInput'// 必須
  47.         'title'       => 'テキスト入力欄の Submit ボタンのラベル',
  48.         'description' => 'テキスト入力欄についての説明',
  49.         'name'        => 'テキスト入力欄のテキストオブジェクトの名前',
  50.         'link'        => '入力内容を処理する CGI スクリプトの URL'
  51.     ),
  52.  
  53.     // 任意、atom を使用している場合は無視されます
  54.     // アグリゲータに対して、特定の時間に処理を飛ばすように伝えるヒント
  55.     'skipHours'// 最大 24 行までで、値は 0 から 23 までの数値
  56.         // たとえば 13 (午後一時)
  57.         '24 時間形式の時間'
  58.     ),
  59.  
  60.     // 任意、atom を使用している場合は無視されます
  61.     // アグリゲータに対して、特定の日に処理を飛ばすように伝えるヒント
  62.     'skipDays '// 最大 7 行まで
  63.         // 値は Monday、Tuesday、Wednesday、Thursday、Friday、Saturday あるいは Sunday
  64.         // たとえば Monday
  65.         'スキップする曜日'
  66.     ),
  67.  
  68.     // 任意、atom を使用している場合は無視されます
  69.     // Itunes 拡張データ
  70.     'itunes'// 任意、デフォルトは本体の author の値
  71.         'author' => 'Artist 列',
  72.  
  73.         // 任意、デフォルトは本体の author の値
  74.         // ポッドキャストのオーナー
  75.         'owner''name'  => 'オーナーの名前',
  76.             'email' => 'オーナーのメールアドレス'
  77.         ),
  78.  
  79.         // 任意、デフォルトは本体の image の値
  80.         'image' => 'アルバム/ポッドキャストの画像',
  81.  
  82.         // 任意、デフォルトは本体の description の値
  83.         'subtitle' => '短い説明',
  84.         'summary'  => '長い説明',
  85.  
  86.         // 任意
  87.         'block' => 'エピソードを表示しないようにする (yes|no)',
  88.  
  89.         // 必須、Category 列および iTunes Music Store Browse での値
  90.         'category'// 最大 3 行まで
  91. // 必須
  92.                 'main' => 'メインカテゴリ',
  93.  
  94.                 // 任意
  95.                 'sub'  => 'サブカテゴリ'
  96.             )
  97.         ),
  98.  
  99.         // 任意
  100.         'explicit'     => 'ペアレンタルコントロールの警告グラフィック (yes|no|clean)',
  101.         'keywords'     => '最大 12 件までのキーワードのカンマ区切りリスト',
  102.         'new-feed-url' => 'iTunes に対して新しいフィード URL の場所を通知するために使用する'
  103.     ),
  104.  
  105.     'entries'// 必須
  106.             'title' => 'フィードエントリのタイトル',
  107.             'link'  => 'フィードエントリへの url',
  108.  
  109.             // 必須、テキストのみで html を含まない
  110.             'description' => 'フィードエントリの短いバージョン',
  111.  
  112.             // 任意
  113.             'guid' => '記事の id。'
  114.                    .  '存在しない場合は link の値を使用します',
  115.  
  116.             // 任意、html を含めることが可能
  117.             'content' => '長いバージョン',
  118.  
  119.             // 任意
  120.             'lastUpdate' => '公開日のタイムスタンプ',
  121.             'comments'   => 'フィードエントリに対するコメントページ',
  122.             'commentRss' => '関連するコメントへのフィードの url',
  123.  
  124.             // 任意、フィードエントリの元のソース
  125.             'source'// 必須
  126.                 'title' => '元ソースのタイトル',
  127.                 'url'   => '元ソースへの url'
  128.             ),
  129.  
  130.             // 任意、関連付けるカテゴリの一覧
  131.             'category'// 必須
  132.                     'term' => '最初のカテゴリのラベル',
  133.  
  134.                     // 任意
  135.                     'scheme' => 'カテゴリのスキームを表す url'// 二番目以降のカテゴリのデータ
  136.                 )
  137.             ),
  138.  
  139.             // 任意、フィードエントリのエンクロージャの一覧
  140.             'enclosure'// 必須
  141.                     'url' => 'リンクされたエンクロージャの url',
  142.  
  143.                     // 任意
  144.                     'type' => 'エンクロージャの mime タイプ',
  145.                     'length' => 'リンクされたコンテンツのサイズを表すオクテット数'// 二番目以降のエンクロージャのデータ
  146. // 二番目のエントリ以降のデータ
  147.         )
  148.     )
  149. );

参考

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

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. // この行は、上と同じ意味です。
  3. // デフォルトで Zend_Feed_Atom のインスタンスを返します
  4. 'atom');
  5.  
  6. // 独自のビルダ配列から rss フィードを読み込みます
  7. 'rss');

フィードの内容の出力

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

  1. span style="color: #808080; font-style: italic;">// フィードを標準出力に出力します
  2. // http ヘッダを送信し、フィードを出力します

導入