del.icio.us自分のブックマークのフィードがJSON形式で取れるようになってますね。これってJavaScriptと親和性が高いので、XMLで書かれているものをXPathやDOMでごにょごにょやるのに比べたら、Ajaxとかでいじったりする場合にはとても楽ですし、Perl使いとしてはこの形式(JSON)がなんとなく見易いので重宝しそうです。ということで、MTでもこれと同じようにJSON形式でフィードを出せるようにするプラグインを作ってみた。

作ったプラグインは、mt-jsonfeed.plです。RSSフィードと同じようにファイルに書き出すために簡単なテンプレートを作らなければならないのが、ちょっとめんどくさいのですが。。。

インストール方法は下記。

  1. まず上記のプラグインをダウンロードして$MT_HOME/plugins/以下に配置します。
  2. 次に必要なモジュールをCPANからインストールしておきましょう。必要なものはJSONJcodeです。
  3. 次に適当な名前を付けてテンプレートを1つ追加します。テンプレートの内容は下記のような感じ。charset_fromとcharset_toは元のコードと出力コード(デフォルトは両方utf-8)、obj_nameは出力するjsに使うオブジェクト名、numは出力するエントリの数です。
  4. <$MTJSONFeed charset_from="euc" charset_to="utf8" obj_name="JSONFeed" num="10"$>
    
  5. 最後に上記で作成したテンプレートを作成すると、JSON形式のフィードが出力されます。
あとは、これを下記のようにJavaScriptから読み込めるようにすればどこでもくっつきフィードが簡単に使えます。
<div id="container"><h2>my json feeds</h2></div>
<script type="text/javascript" src="http://example.com/jsonfeed.js" charset="UTF-8"></script>
<script type="text/javascript">
var ul = document.createElement('ul')
for (var i=0, post; post = JSONFeed.posts[i]; i++) {
        var li = document.createElement('li')
        var a = document.createElement('a')
        a.setAttribute('href', post.permalink)
        a.appendChild(document.createTextNode(post.title))
        li.appendChild(a)
        ul.appendChild(li)
}
document.getElementById('container').appendChild(ul)
</script>
ちなみに自分の環境だと<script>タグにcharsetを指定してやらないと日本語が入ってる場合にはブラウザで文字コードが解析できず、JavaScriptエンジンでコケました。でもSafariだとcharsetを指定してやってもだめっぽいです。charsetを指定する以外にもJSONのjsを出力するときのヘッダのContent-Typeにcharset=を付けてもイケます。 表示例は続きにありますです。

my json feeds