Wadslog

[Zend Framework][php] Zend_Feedを使ってWebページのフィードを生成する

Aug 4, 2008

Zend_Feedを仕様すると、WebページのフィードをRSS形式とAtom形式で簡単に作ることができます。 まずは配列形式でフィードデータを生成します。

$feed\_data = array(
    'title'       => 'wadsのblog',
    'link'        => 'http://wadslab.net/feed/',
    'published'   => time(),
    'charset'     => 'UTF-8',
    'description' => 'wadsのblogです',
    'author'      => 'wads',
    'entries'     => array(
        array(
            'title'        => '\[git\] Subversionからgitへ移行する',
            'link'         => 'http://wadslab.net/2008/07/subversion-git/',
            'description'  => 'ソースコードなどを管理するリポジトリを...',
            'guid'         => 'http://wadslab.net/2008/07/subversion-git/',
            'lastUpdate'   => strtotime('2008-07-17 23:34:45'),
        ),
        array(
            ...
        )
        ....
    )
);

上のフィードのデータは結構省略しています。ちゃんとした配列の構造はリファレンスマニュアルをご覧ください。 続いて、この配列をZend_Feed::importArray()を使って読み込み、出力をすれば完了です。また、imprtArray()は第二引数で、フィードの形式を選択できます(Atom形式か、RSS形式か)。 全体的には以下のような流れになります。

class FeedController extends Zend\_Controller\_Action
{
    public function preDispatch() {
        // viewRendererは切っておく
        $this->getFrontController()->setParam('noViewRenderer', true);
    }

    public function indexAction() {
        $format = $this->getRequest()->getParam('format', 'atom');

        $feed\_data = array(
            ....
        );

        // フィードデータの生成
        $feedArray = Zend\_Feed::importArray($feed\_data, $format);

        // フィードの出力
        print $feedArray->saveXML();
    }
}

これで以下のように、

http://example.com/feed/index

http://example.com/feed/index/format/rss

でフィードを取得することができます。 ただし、このままだとindexがイマイチな感じなので、Zend_Controller_Routerを書き換えてもう少しすきりさせるとベターだと思います。

comments powered by Disqus