Hatena::ブログ(Diary)

Okiraku Programming RSSフィード Twitter

2008-09-04 twicliにプラグイン機能を追加

twicliにプラグイン機能を追加

WebブラウザベースTwitterクライアントtwicli

twicliユーザの好みに合わせて機能拡張できるプラグイン機能を追加しました。

といってもまだ追加できるものは余りないのですが、今後に向けて。

仕組み

プラグインJavaScript記述し、どこかのWebサーバ上(localhostでもOK)に置いておき、twicli起動時にscriptタグで読み込みます。

その際、プラグイン自分が提供するメソッド(のハッシュ)をtwicli側に登録しておきます。

twicli側には

callPlugin("〜", arg1, arg2, ...)

という文が各所に埋め込んであります。ここでプラグインの"〜"という名前のメソッドが呼び出されます。呼び出し方はこんな感じ。

function callPlugins(name) {
    var args = [].slice.apply(arguments);  // 引数をArrayに変換
    args.shift();                          // 第1引数(name: メソッド名)を除去
    for (var i in plugins)                 // プラグインの配列 plugins の各要素について
    if (typeof plugins[i][name] == "function")       // 指定メソッドがあれば
        plugins[i][name].apply(plugins[i], args);     // 引数を渡して呼び出す
}

プラグインの追加例

1. プラグインをどこかのWebサーバに用意する

例えばMacユーザ必須の通知ソフトGrowlに、新規発言を通知するプラグインの例。

なお、このスクリプトは次のエントリGrowlWeb APIが入っていることが前提です。gr_cgi部分は自分GrowlWeb APIURLに変更してください。

var gr_cgi = "http://localhost/~YOURNAME/growl.cgi";
registerPlugin({
	update_cnt: 0,
	update: function() { this.update_cnt++; },
	gotNewMessage: function(tw) {
		if (this.update_cnt <= 1) return; //初回は通知しない
		var msg = tw.text + " (" + dateFmt(new Date(tw.created_at)) + ")";
		xds.load(gr_cgi+"?title=Twitter+@"+tw.user.screen_name+"&msg="+msg+"&icon="+tw.user.profile_image_url, function(){});
	},
});

xds.loadについては クロスドメインJavaScript呼び出しをクラス化, クロージャにも対応 - Okiraku Programmingを参照。

registerPlugin に関数オブジェクトハッシュを渡します。ハッシュのキーは今のところ、

キー(メソッド名)内容引数備考
updateTLの更新前に呼び出しなし
gotNewMessage新しい発言を1つ受信発言内容のハッシュ(Twitter APIから渡されたもの)
newMessageElement発言をHTML上に追加発言のDOM要素, 発言内容のハッシュプラグインから表示内容を変更可能

のみです。今後増やす予定。

※こんなのが欲しい!というアイデア募集中です。勝手にCodeReposコミットしてもOKですよ。


2. プラグインURLtwicliに登録

「+」というタブにある Plugins の欄に改行区切りでプラグインURL記述し、Registerをクリック。内容はCookieに記録されます。

3. twicliリロード

リロードすると、twicliプラグインが組み込まれ、発言があるたびにGrowl通知されるように!

はてなユーザーのみコメントできます。はてなへログインもしくは新規登録をおこなってください。