vimperator の copy.js で短縮 URL を取得できるようにした
twitter とかで短縮 URL を使いたくなることがある。でも僕の使ってる twitter クライアントはそういうのをサポートしてない。http:// ... って書いたらそのまま出てくる。長い。
というわけで、vimperator の copy.js を使って、今見てるページの短縮 URL をクリップボードにコピーできるようにしてみた。
短縮 URL を取得する Web API
「常識で考えて bit.ly だろ」と思って bit.ly の API ドキュメントを読んでみたら、どうやらユーザー登録がいるもよう。むう、なんかめんどくさそう。やめ。
代わりに Google URL Shortener(goo.gl) を使うことにした。API のドキュメントを読んでみる。うん、簡単そうだ。ユーザー登録とかいらない。
普通に http://ggl-shortener.appspot.com/?url=encodeURIComponent(URL)
で GET リクエストを投げればよさげ。
で、レスポンスとしてこんな感じの JSON が返ってくる。
{"short_url": "http://goo.gl/fbsS"}
いいよー、いいよー。
copy.js 側の設定
copy.js の方は「copy.js をアップデート よりカスタマイズ可能になりました - hogehoge」の記事を参考に書いてみた。
ポイントは custom
ってとこ。そこに関数を登録しておくと、関数を呼び出した戻り値の文字列がクリップボードにコピーされるようになる。
結局こんな感じで .vimperatorrc に書いた。
js <<EOF liberator.globalVariables.copy_templates = [ { label: 'goo.gl', value: 'get goo.gl short url', custom: function() { var ret = ""; var url = 'http://ggl-shortener.appspot.com/' url += '?url=' + encodeURIComponent(content.location.href); var xhr = new XMLHttpRequest(); xhr.open("GET", url, false); // 同期的に処理する xhr.send(null); if (xhr.status === 200) { ret = JSON.parse(xhr.responseText).short_url; } return ret; } } ]; EOF
2010/01/19 追記
コメントで紹介してもらったページを参考に、 util.httpGet を使って書き直してみた。短くなってすっきり。
js <<EOF liberator.globalVariables.copy_templates = [ { label: 'goo.gl', value: 'get goo.gl short url', custom: function() { var ret = ""; var xhr = util.httpGet( "http://ggl-shortener.appspot.com/?url=" + encodeURIComponent(buffer.URL)); if (xhr && xhr.status === 200) { ret = JSON.parse(xhr.responseText).short_url; } return ret; } } ]; EOF
試してみる
これで :copy goo.gl
で今表示してるページの短縮 URL がコピーされるはず。早速このブログのトップページで試してみる。
よしよし、ちゃんとできてる。
最新の copy.js は CodeRepos にあるので、みんなも参考にしてね。