Kentaro Kuribayashi's blog

Software Engineering, Management, Books, and Daily Journal.

livedoor Reader から、ショートカットキー一発ではてなブックマークにぶくまする greasemonkey スクリプト

2006-04-28 追記。
以下のスクリプトの機能に追加して、del.icio.us へも対応したものを、yoko さんが作成しました。

del.icio.us ユーザ、あるいは、はてぶと del.icio.us 兼用ユーザは、そっちを使う方がいいと思います。

まぁ見出しがすべてを物語っていて、それ以上の説明の余地がないのですが、ともあれ livedoor Reader で読んでいるエントリを、はてなブックマーク AtomAPI を通して、ショートカットキー一発ではてなブックマークにぶくまするための greasemonkey スクリプトを書きました。
以下、設定方法。

  1. 下記のスクリプトをエディタかなんかに貼り付けて、はてなのユーザ名、パスワードを記入
  2. "Blogging in the wind: WSSE for JavaScript" から wsse.js をダウンロードしてきて、どこか適当な場所におき、その URL を記入
  3. あらかじめ設定されているショートカットキーが "b" ってのがイヤなら、なんか適当に変更
  4. 以上が済んだら、そのファイルを保存して、それを Firefox で開くと現れる、"Install" ボタンを押してインストール

以上の設定・インストールが成功したら、以下の画像ような感じで、上で設定したショートカットキーによりプロンプトが出てきて、livedoor Reader でエントリを読みながらはてなブックマークにぶくまできるようになります。
WS000000
少しわかりにくいのですが、ショートカット "p" でピンが立つ対象がぶくま対象のエントリです。
プロンプトを空のまま OK するか、あるいはキャンセルすると、ブックマークしません。また、ブックマークが成功したら "201 - Created" とかなんとか alert が表示されます。
外部 JavaScript ライブラリを持ってこなきゃならなかったりしてちと導入がめんどうだけど、わりと便利かも。

// ==UserScript==
// @name        livedoor Reader 2 Hatena::Bookmark
// @description bookmark the entry gets your attention on the spot
// @namespace   http://antipop.gs/ns/greasemonkey/ldr_post2hatebu
// @include     http://reader.livedoor.com/reader/*
// ==/UserScript==

(function(){

     // 設定
     // wsse.js は http://rvr.typepad.com/wind/2005/07/wsse_for_javasc.html から取ってきてぉ><ノ
     var username    = 'hatena_id';
     var password    = 'hatena_password';
     var shortCutKey = 'b';
     var libWSSE     = 'http://yourdomain/path/to/wsse.js';

     var postURI     = 'http://b.hatena.ne.jp/atom/post';
     var w = unsafeWindow;
     var _onload = w.onload;

     function ATOM (username, password) {
         this.username = username;
         this.password = password;
     }

     ATOM.prototype = {
         post: function (postURI, permalink, comment) {
             var requestBody =
                 <entry xmlns="http://purl.org/atom/ns#">
                     <title>dummy</title>
                     <link rel="related" type="text/html" href={permalink} />
                     <summary type="text/plain">{comment}</summary>
                 </entry>;

             GM_xmlhttpRequest({
                                   method: 'POST',
                                   url: postURI,
                                   headers: {
                                       'Accept': 'application/x.atom+xml, application/xml, text/xml, */*',
                                       'X-WSSE': w.wsseHeader(this.username, this.password),
                                   },
                                   data: requestBody.toString(),
                                   onload: function (details) {
                                       alert([details.status, details.statusText].join(' - '));
                                   }
                               });
         }
     };

     var onload  = function () {
         var script = document.createElement('script');
         script.type = 'text/javascript';
         script.src  = libWSSE;
         document.getElementsByTagName('head')[0].appendChild(script);

         var atom = new ATOM(username, password);

         w.Keybind.add(shortCutKey, function(){
                         var item = w.get_active_item(true);
                         if (item) {
                             var permalink = item.link.replace(/#/, '%23');
                             var comment   = w.prompt('comment for "' + item.title + '"');

                             if (!comment)
                                 return;
                             else
                                 atom.post(postURI, permalink, comment);
                         }
                     });
     };

     w.onload = function(){
         _onload();
         onload();
     };

})();

Greasemonkey Hacks (Hacks)
Greasemonkey Hacks (Hacks)
posted with amazlet on 06.04.27
Mark Pilgrim
Oreilly & Associates Inc (2005/11)