Firefox の拡張「Google ツールバー」の「マウスオーバー辞書」で調べた単語を Twitter に投稿する方法

英語のページを読む時には、Google ツールバーの「マウスオーバー辞書」を愛用しています。しかし僕の場合、調べた時だけ分った気になっているだけで、その後は完全に忘れてしまっているので、もう一度くらいその単語を見直したいな、ということでその解決策を考えました。

ここでは、Twitter に投稿してアーカイブを見直す解決策を説明していますが、本当はローカルファイルか何かに保存し、今日調べた単語をまとめて携帯に送るというのがベストだと思っています。というか、調べた単語をいちいち Twitter に送ってたらうざくてしかたないでしょう。ban されるかもしれません。ちょっとおもしろそうなので、やってみただけで、実際には使わないと思います。

ところで、1 日分をまとめて携帯に送るというのは、いつも眠る時間に送るようにすれば、目覚まし時計の逆の役割みたいでいい感じです。それに、夜眠る前というのは、新しく覚えるより、頭が冴えている時にまとめたもの(例えば単語帳)を見直した方が効果的に脳を使える、と本で読んだことがあります。Plagger で解決できる感じでしょうか。

さて、Twitter に投稿する方法ですが、始めはマウスオーバー時の単語をなんらかの Web API で送信し、日本語訳を取得しているのかと思っていたのですが、どうやら辞書をローカルで保持しているらしい。となると、ローカルのプロキシで特定の URL を捕まえてって訳にはいかないので、Google ツールバーに直接手を入れました。

手順は以下の通りです。Google ツールバーがインストール済みであるのを前提にしています。

インストールされている拡張の保存ディレクトリ(extensions)に移動する

OS X だとこのあたり。

/Users/USERNAME/Library/Application Support/Firefox/Profiles/XXXXX.default/extensions/

Windows だとこのあたり。

C:/Documents and Settings/USERNAME/Application Data/Mozilla/Firefox/Profiles/XXXXX.default/extensions/

ディレクトリ extensions 以下の toolbar.js を見つける

google-toolbar-win/lib にあるファイルですが、ディレクトリ名が暗号化されているので、検索してしまう方が早いです。

toolbar.js を編集する

マウスオーバー辞書が訳を表示する処理は以下の箇所になります。"translator.png" で検索すると見つけやすいと思います(実際は整形されていません)。

var text = str.substring(start, end), translation = this.getTranslation(text);
if (translation != "") {
  var desc = this.doc_.createElement("description"), img = this.doc_.createElement("image");
  img.setAttribute("src", "chrome://google-toolbar/skin/translator.png");
  img.style.verticalAlign = "middle";
  img.width = "16px";
  img.height = "16px";
  desc.appendChild(img);
  desc.appendChild(this.doc_.createTextNode(translation));
  return[desc]
}

そして、この if 文の先頭に、次の処理を挿入します。

var r=G_NewXMLHttpRequest();
r.open('POST', 'http://twitter.com/statuses/update.json', true);
r.setRequestHeader("Content-Type" , "application/x-www-form-urlencoded");
r.send('status='+encodeURIComponent('[translate] '+translation));

編集後のコードは次の通りです(挿入したコードの色を変えたかったが分からず)。

if(translation!=""){var r=G_NewXMLHttpRequest();r.open('POST', 'http://twitter.com/statuses/update.json', true);r.setRequestHeader("Content-Type" , "application/x-www-form-urlencoded");r.send('status='+encodeURIComponent('[translate] '+translation));var desc=this.doc_.createElement("description"),img=this.doc_.createElement("image");img.setAttribute("src","chrome://google-toolbar/skin/translator.png");img.style.verticalAlign="middle";img.width="16px";img.height="16px";desc.appendChild(img);desc.appendChild(this.doc_.createTextNode(translation));return[desc]}};

Firefox を再起動する

これでマウスオーバー辞書を使うとこんな感じで投稿されます。World の意味が分からないほど、アホなわけではありませんよ。

ユーザ名と "translate" で検索すれば、「一応」当初の目的は達成できたのではないかと思えますが、冒頭の理由から、別の場所に貯めて 1 日 1 回メールを送るようにしようと考えています。