12.4. RSS フィードの使用

RSS フィードの読み込みは、フィードの URL を指定して Zend_Feed_Rss のインスタンスを作成するのと同じくらい簡単です。

<?php

$channel = new Zend_Feed_Rss('http://rss.example.com/channelName');

?>

フィードの取得時にエラーが発生した場合は Zend_Feed_Exception がスローされます。

フィードオブジェクトを取得すると、標準的な RSS の "channel" プロパティに対して直接アクセスできるようになります。

<?php

echo $channel->title();

?>

関数の構文に注意しましょう。"getter" 方式の構文 ($obj->property) をした場合は、Zend_Feed はプロパティを XML オブジェクトとして扱います。 一方、メソッドの構文 ($obj->property()) を使用した場合は文字列として扱います。 これにより、特定のノードを取得したあとで、さらにその子要素にもアクセスできるようになります。

チャネルのプロパティが属性を保持している場合、PHP の配列構文を使用してそれらにアクセスすることができます。

<?php

echo $channel->category['domain'];

?>

XML の属性は子を持つことができないので、 属性値へアクセスする際にメソッド構文を使用する必要はありません。

たいていの場合は、フィードをループさせたうえで、 個々のエントリに対して何かをすることになるでしょう。 Zend_Feed_Abstract は PHP の Iterator インターフェイスを実装しているので、 例えばチャネル内の全記事のタイトルを表示するには単にこのようにするだけです。

<?php

foreach ($channel as $item) {
    echo $item->title() . "\n";
}

?>

RSS にあまり詳しくない方のために、RSS チャネルおよび個々の RSS アイテム (エントリ) で利用できる標準的な要素をまとめます。

必須のチャネル要素

よく使用されるオプションのチャネル要素

RSS の <item> 要素には必須要素はありません。 しかし title あるいは description が存在しなければなりません。

よく使用されるアイテム要素

要素が空要素であるかどうかは、以下のようにして調べられます。

<?php

if ($item->propname()) {
    // ... 続行できます
}

?>

$item->propname 形式を使用した場合は、 空のオブジェクトについても TRUE と評価されてしまうので、 このように調べることはできません。

詳細な情報は、 http://blogs.law.harvard.edu/tech/rss にある RSS 2.0 の公式仕様を参照ください。