2005-02-11

MovableTypeのサイドバーへRSS表示

MovableTypeのカスタムが楽しい。
今日は、他サイトからRSSフィードを読み込み、サイドバーに貼り付けることにチャレンジする。
幸いなことに情報は多く、文字化けにてこずったもののなんとかうまくいくことができた。
右サイドバーに表示されている、「blogmap - URLランキング Top 100」と「asahi.com」「WIRED NEWS」がそうだ。

まずは、mt-rssfeed.plmt-list.plmt-jcode.plLP.pmの4つのファイルを手に入れる。
(※mt-rssfeed.plとmt-list.pl、LP.pmは配布終了しているようですので、こちらのサイトにアップロードしてあります。右クリックから保存してください)

テキストエディタでmt-rssfeed.plを開き、15行目

my $RSSFEED_DATA_DIR = "./db/";

をRSSフィードを保存するフォルダにしておく。フルパスのほうがいいかも。
また、286行目

return MT->VERSION<strong><</strong>'2.50'?_decode_xml_fallback($value):decode_xml($value);
return MT->VERSION <strong>lt</strong> '2.50'?_decode_xml_fallback($value):decode_xml($value);
に変更する。 (再アップロードしたmt-rssfeed.plは変更済み)


同様に、mt-jcode.plを開き、8行目

my $from = Jcode::getcode($str) || 'utf8';

my $from = 'utf8';

に変更しよう。文字コードがUTF8じゃなければ必要ないかも。

修正が終わったら、mt-rssfeed.pl、mt-list.pl、mt-jcode.plの3つをMTのpluginsフォルダに放り込む。
また、mt-rssfeed.plとセットに入っていたLP.pmは「MT/extlib/XML/RSS/」にアップする。RSSフォルダはないので作成しておく。

あとは、メインに

<MTList name="feeds">
http://1470.net/bm/urlranking.html?mode=rss
http://www3.asahi.com/rss/index.rdf
http://hotwired.goo.ne.jp/news/index.rdf
</MTList>

<MTListLoop name="feeds">
<MTRSSFeed>
<h3><$MTRSSFeedTitle jcode="utf8"$></h3>
<ul><MTRSSFeedItems lastn="5">
<li><a href="<$MTRSSFeedItemLink jcode="utf8"$>"><$MTRSSFeedItemTitle jcode="utf8"$></a></li>
</MTRSSFeedItems></ul>
</MTRSSFeed>
</MTListLoop>

って感じで書けばOK!

参考サイトにさせていただいたサイトは、RSS feedをBlog上に表示するためのPlug-in様。
というか、ほとんどここのまんま。感謝感謝。

で、ここまでだとインデックスを再構築するときにしかRSSフィードの情報を取得しない。
つまり、通常の利用だとエントリーを作成したときにしか更新されないのだ。これは寂しい。
そこで、mt-rssfeed.plと一緒に入ってたmt-rebuild.plを使おう。
mt-rebuild.plは、MTをリビルドしてくれるPerlプログラムで、プラグインではない。MTをインストールしたフォルダに置いて、cronで定期的に実行してやればよい。

mt-rebuild.pl -mode="index" -blog_id=1 -template="mainpage"

こんな感じである。引数の説明すると -mode はリビルドする種類。indexならインデックスのみ。-blogはID、-templateはテンプレート名。

僕は毎時50分にインデックスをリビルドして最新の情報に更新するようにしてみた。
以上で作業は完了!