読者です 読者をやめる 読者になる 読者になる

Livedoor readerからダブルクリックではてなブックマークにぶくまするGreasemonkey

antipopさんのスクリプトのダブルクリックにイベントを追加しただけです・・・。
処理の詳細はよくわかってません(>_<)
http://d.hatena.ne.jp/antipop/20060427/1146067330

Livedoor readerを普段使っているのですが、ピンを立てた記事をはてなブックマークにも放り込んでおけたらいいなぁ、と思ったのでちょっとだけ(4行ぐらい?)書き換えてみました。



本当は、ピンを立てると同時にはてブにポストしたいのですが、やりかたがよくわからなかったので、記事の上でダブルクリックするとはてなブックマークに登録するようにしています。


はてブにもBookmarkletがありますが、登録作業が1ステップあるのが面倒なのであまり使っていません。
ダブルクリックではてなブックマークできるととても便利。

ただ、はてなブックマークした記事が、「あとで読む」と同義になってしまうので、はてブの意味合いがちょっと変わってしまうのかなぁ、というのが気になっています。読んでいない記事がはてブされているというか。

たまに、ダブルクリックした記事じゃない記事がポストされていることがあるけど。。

// ==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    = 'tittea';
    var password    = 'hogehoge';
    var shortCutKey = 'b';
    var libWSSE     = 'http://reader.livedoor.com/js/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) {
                                      GM_log([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.addEventListener('dblclick', function(){
                        var item = w.get_active_item(true);
               GM_log(item);
                        if (item) {
                            var permalink = item.link.replace(/#/, '%23');
                            var comment   = "[LDR]";//w.prompt('comment for "' + item.title + '"');

                            if (!comment)
                                return;
                               else{
                                atom.post(postURI, permalink, comment);
                                       GM_log("hatena bookmarked!"+postURI);
                               }
                        }
                    },false);
    };

    w.onload = function(){
        _onload();
        onload();
       GM_log("hogehoge");
    };

})();