サイト更新をかいつまんで効率的に知らせることのできる仕組みがあります。
それがフィードなどと呼ばれる文書で、RSSやATOMなどいくつかのタイプがあります。
これらは書式が決まっているので、いろんなサイトのフィードを集めれば実に効率的に更新チェックが行えることになります。
このフィードを自分のサイトに設置したい場合に使えるのがZend_Feedというわけです。
RSS2.0とatom1.0が作成できそうなのでこれらを両方作成するコードを書いてみます。
大原則として、UTF-8コードしか使えません。理由は分かりませんが使えないのでこれは従うしかありません。
わたしは宗教上の理由でSJISコードで書いているので、mb_convert_encoding()関数を使ってUTF-8に文字コード変換しています。
なのでUTF-8で書いている人には文字コード変換部分は不要です。
ページ数がもっとあればentries内に配列を追加していく形になります。
filemtime()関数を使ってファイルの最終更新タイムスタンプを取得しています。
いちいちページ更新の度に手入力で書き替えるのはたいへんな作業なのでこの方がいいと思います。
こうやってrss.xmlファイルとatom.xmlファイルを更新の度に作成するようにして、あとはホームページのトップページなんかにリンクを貼っておくと、HPを気に入ってくれた誰かがアクセスしてくれるかも知れません。
<a href="http://www.example.com/rss.xml">RSS</a> /
<a href="http://www.example.com/atom.xml">atom</a>
MVCアプリケーションでもやり方は同じですが、書いておきます。
MVCの場合はフィード専門に行う1つのアクションコントローラとしてクラス作成する形になるので、コントローラ名をFeedで作成します。
[application/controllers/FeedController.php]
RSSがhttp://www.example.com/feed
atomがhttp://www.example.com/feed/atom
と、アドレスが少々不恰好なのでrssAction()を作成して_redirect()するとか、デフォルトアクション名を変えるとか、ルーティングなどして適宜工夫できると思います。
また、トップページなどにフィードのリンクを作成したらそれとは別にHTML文書のHEAD領域にlinkタグを追加してブラウザが自動的にフィードの存在を把握できるようにする方法があります。
アクションコントローラ側で以下を書いておいて、
$this->view->headLink()->appendAlternate($this->_request->getBaseUrl() . '/feed', 'application/rss+xml', 'RSS');
$this->view->headLink()->appendAlternate($this->_request->getBaseUrl() . '/feed/atom', 'application/atom+xml', 'Atom');
ビュースクリプトのHEAD領域に以下を書くと、
<?php echo $this->headLink() ?>
結果、以下のようなlinkタグが描画されることになります。
<link href="/feed" rel="alternate" type="application/rss+xml" title="RSS">
<link href="/feed/atom" rel="alternate" type="application/atom+xml" title="Atom">
MVCの場合は先ほどのファイルを作成する方法と違って、呼ばれる度にXMLを生成してレスポンスすることになります。処理が重い場合にはZend_Cacheとの連携などで対策できると思います。