CakePHPで更新pingを送信(PEARのXML/RPC)+RSS配信

先日公開しました「30日ブログ」
引き続き機能の追加などを行っており、今回は日記作成時に「更新ping」を送信させるようにしました。
「更新ping」とは検索エンジンなどに対する更新通知であり、更新ping送信するとクローラーが巡回してくるので早めに検索エンジンなどに反映されるようになります。

●更新ping送信の実装

ググって以下の二つを参考にしました。
PHPでBlog更新ping (XML-RPC)を送信する|PHPプログラムメモ|プログラムメモ
PHPでPingを送信すべし:High5.log~Webとか~
どちらもPHPの場合ですがcontrollerにほぼ丸々コピペでいけます。
ただCakePHPでPEARライブラリを使う方法がいまいちわからず。
調べると色んな手法があるようですが、小生の場合は下記のようにしました。
1.PEARのRPC.phpを以下に保存
/app/vendors/pear/xml/RPC.php
2.更新pingを送信するfunctionの冒頭に以下の1行を追加。
App::import('Vendor', 'XML_RPC', array('file'=>'pear'.DS.'xml'.DS.'RPC.php'));
PEARライブラリも簡単に使えるとなると拡張性も十分だ。
日記の入力にwiki記法を使えるようにもしました。
CakePHPのヘルパーからPEAR::Text_Wikiを使ってお手軽変換 – 「最果て」の支部
以上で日記作成時に更新pingが送信されている・・・はずです。
#本当にクローラがやってきてるのか動作確認がいまいち。
#successの反応が返ってきてるので、たぶん大丈夫なんだろうけど。

●RSS配信

更新pingを送信すると、クローラはそのサイトのRSSをチェックする場合があるようです。
そこでRSS配信も実装。これはCakePHP1.2単体で実現できます。
参考サイトはこちら。
CakePHP1.2でRSSフィードを使う | エムティシステム
あれ?エラーになる。
どうやらレイアウトファイルが無かったようです。
/cake/libs/view/template/layouts/rss/default.ctp
  ↓
/app/view/layouts/rss/normal.ctp

さらにdebugレベルを0にします。
Configure::write('debug', 0);
CakePHP Note:RSSヘルパー
あれ?それでもダメだ。
試行錯誤の上、normal.ctpの下記をコメントアウトしたら動いた。何で?
//echo $rss->header();
最後にブラウザやクローラにRSSの在り処を知らせるためのリンク、RSS auto-discoveryをviewに仕込みます。
複数の RSS を RSS auto-discovery で提供するには
<link rel="alternate" type="application/rss+xml" title="RSS 2.0" href="xxxx.rss" />
これでRSS配信をブラウザでも確認することができました。
思ってたよりも簡単に二つの機能を実装できて、あらためてフレームワークの威力に驚いています。

コメント

タイトルとURLをコピーしました