livedoor ReaderからはてなブックマークにポストするGreasemonkeyスクリプト

ユーザー名とパスワード設定して使う。はてなブックマークにbでコメントなしで登録、Shift+bでコメントを書いて登録する。
インストール

// ==UserScript==
// @name           postbhatena
// @namespace      http://d.hatena.ne.jp/f96q/
// @include        http://reader.livedoor.com/reader/
// ==/UserScript==

var user = "user";
var pass = "pass";
var w = unsafeWindow;

function useWsse() {
    var script = document.createElement("script");
    script.type = "text/javascript";
    script.src = "http://reader.livedoor.com/js/wsse.js";
    document.getElementsByTagName("head")[0].appendChild(script);
}

function post(name, pass, link, comment) {
    var body = ['<entry xmlns="http://purl.org/atom/ns#">',
		"<title>dummy</title>",
		'<link rel="related" type="text/html" href="', link, '" />',
		((comment != "") ? '<summary type="text/plain">' + comment + "</summary>" : ""),
		"</entry>"].join("");
    var req = {
        method: "POST",
        url: "http://b.hatena.ne.jp/atom/post",
        headers: {
            "Accept": "application/x.atom+xml, application/xml, text/xml, */*",
            "X-WSSE": w.wsseHeader(user, pass),
        },
        data: body,

        onload: function(r) {
            w.message("bookmerk:" + r.status + r.statusText);
        }
    };
    setTimeout(function() {GM_xmlhttpRequest(req); }, 0);
}

function bookmerk(comment) {
    var item = w.get_active_item(true);
    if (item) {
	var link = item.link.replace(/#/, "%23");
	var r   = comment ? w.prompt(item.title) : "";
	post(name, pass, link, r);
	w.message(["bookmerk:",
	           item.title,
		   comment ? ":" + r : ""
		  ].join(""));
    }
}

var _onload = w.onload;
w.onload = function() {
    _onload();
    useWsse();
    w.Keybind.add("b", function() {
	bookmerk(false);
    });
    w.Keybind.add("B", function() {
	bookmerk(true);	
    });
}

参考

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