[注:2006-10-29] アップデートしました。10/29 以前に greader-sbm.user.js をインストールされた方は、アップデートをお願いします。
ヒビノキロクさんが、Google Reader とはてなブックマークを連携させる Greasemonkey スクリプトを公開された。「b」キーで閲覧中の記事をはてなブックマークにブックマークする (正確には、ブックマーク用の画面を別ウィンドウで開く)。とっても便利。
さて、ぼくははてなブックマークの他に livedoor clip も愛用している。こちらにもワン・キーでブックマークできると嬉しい。というわけで
- b キーで、はてなブックマーク
- B キーで、livedoor clip
する拡張版 Greasemonkey を書いた。
ソースはこんな感じ。
// ==UserScript== // @name Google Reader - Social Bookmark // @namespace http://at-aka.blogspot.com/ // @description Add shortcut keys 'b' for bookmarking Hatena Bookmark and 'B' for livedoor clip. // @include http://www.google.com/reader/* // @include https://www.google.com/reader/* // @include http://reader.google.com/* // @include https://reader.google.com/* // ==/UserScript== var entry = new Array(); function greader_get_title_and_url () { var current_entry = document.getElementById('current-entry'); var a = current_entry.getElementsByTagName('a')[0]; var h2 = current_entry.getElementsByTagName('h2')[0]; var title = ''; if (h2.firstChild == a) { title = a.firstChild.textContent; } else { title = h2.textContent; } entry['title'] = encodeURIComponent(title); entry['url'] = encodeURIComponent(a.href); } function greader_open_link (link) { window.open(link); // if you prefer to open a tab in background, you can use this alternative. // GM_openInTab(link); } function greader_hatena_bookmark () { var b_hatena = 'http://b.hatena.ne.jp/add?mode=confirm&is_bm=1'; var link = b_hatena + '&title=' + entry['title'] + '&url=' + entry['url']; greader_open_link(link); } function greader_livedoor_clip () { var livedoor_clip = 'http://clip.livedoor.com/clip/add?'; var link = livedoor_clip + 'title=' + entry['title'] + '&link=' + entry['url']; greader_open_link(link); } function greader_delicious () { var delicious = 'http://del.icio.us/post?v=4'; var link = delicious + ';title=' + entry['title'] + ';url=' + entry['url']; greader_open_link(link); } function GRT_key(event) { var element = event.target; elementName = element.nodeName.toLowerCase(); var typing = false; if (elementName == "input") { typing = (element.type == "text" || element.type == "password"); } else { typing = (elementName == "textarea"); } if (typing) return true; var key = String.fromCharCode(event.which); if ((key == "B" || key == "b") && !event.ctrlKey && !event.altKey) { greader_get_title_and_url(); if (key == "B"){ greader_livedoor_clip(); } else { // "b" greader_hatena_bookmark(); } try { event.preventDefault(); } catch (e) { } return false; } return true; } document.addEventListener("keypress", GRT_key, false);
こんなことを書いてると、del.icio.us にも対応したいという人があるでせう。そんな人の為に、greader_delicous という関数を用意しておいた。関数 GRT_key の中で greader_hatena_bookmark(); を見付けて greader_delicious(); に書き換えると、b キーで del.icio.us にブックマークできるようになる。
それ以外のソーシャル・ブックマーク・サービスを使う場合は、次のコードを雛型に自分用のブックマーク関数を作られたし。
function greader_hatena_bookmark () { var b_hatena = 'http://b.hatena.ne.jp/add?mode=confirm&is_bm=1'; var link = b_hatena + '&title=' + entry['title'] + '&url=' + entry['url']; greader_open_link(link); }
そして、上の greader_delicious と同じ要領で GRT_key を書き換える。
本当は、もっと簡単にソーシャル・ブックマーク・サービスの切り替えが出来ればいいんだけどねぇ。よいアイデアがあればコメント下さい。
細かい話ですが、 greader_delicious() のとこ、s/livedoor_clip/delicious/ ですね。
ReplyDeleteおっしゃる通りです。ご指摘ありがとうございます。
ReplyDeleteブログ、user script ともに、修正致しました m(_ _)m