Subscribed unsubscribe Subscribe Subscribe

Googleの検索結果に、自分のはてなブックマークからの全文検索を表示するChrome拡張を作りました

はてなブックマークFirefox拡張には、Googleの検索結果に自分のはてなブックマークからの検索を表示する非常に便利な機能があります。ブックマークをタグで管理するのが苦手な自分にとっては、これが無いと日常生活に支障をきたすレベルの嬉しい機能です。
が、しかし、この機能ははてなブックマークChrome拡張に現時点ではありません。ということで、作ってみました。
↓ こんな感じに右のサイドバーに検索結果が追加されます。
f:id:Cside:20101020233939j:image:w700

インストール

http://github.com/Cside/MyBookmarkSearch-onGoogle-forChrome からソースをダウンロード & 解凍した後、

  1. ChromeのURL欄に chrome://extensions/ と入れ、拡張機能の管理画面を開いてください。
  2. 右上の「デベロッパーモード」→「パッケージ化されていない拡張機能を読み込みます」と進んでください。
  3. 解凍したフォルダを選択してください。これでインストールができます。

ご使用上の注意

この機能が利用出来るのははてなブックマークプラスユーザーのみです。ここで使っているマイブックマーク全文検索APIはてなブックマークプラスユーザーでしか叩けないからです。
もしはてなブックマークユーザーでない場合、プラス機能の1ヶ月無料キャンペーンをやっているようなので、以下から試してみることをお勧めします。(マイブックマーク全文検索以外にも、タグを複数エントリまとめて編集できるなど非常に便利な機能がたくさんあります。)
はてなブックマークプラス

ブックマークしたページの本文テキストを対象とした高速な全文検索が可能になります。ブックマークしたけどタイトルも、URL も覚えていないうろ覚えな記事も一発で検索可能です。

今後の予定

使ってくださる方が何人かいらっしゃるようであれば、

  • オプションページ
    • 検索結果のソート方法の変更ができる*1
    • 検索結果の 詳細表示/シンプル表示 の切り替えができる
    • 検索結果の表示件数の変更ができる
  • ページャ

等の機能を今後加えていこうと考えています。

工夫した点

当初はユーザースクリプト1つだけで済ます予定だったのですが、ChromeのユーザースクリプトはGreasemonkeyのGM_関数を完全には実装していなく、クロスドメイン通信*2や外部ファイルのインクルードなどがユーザースクリプト単体ではできそうになかったので、あえてChrome拡張にしました。(Greasemonkeyであればユーザースクリプト1つで済むと思います。)
また、ChromeにはNinjaKitというGreasemonkey相当の機能が使えるようになる拡張が存在しますが、仮にNinjaKit用のユーザースクリプトとして公開しても

インストール方法

  • まずNinjaKitを入れてください
  • NinjaKitから新しくスクリプトを作成し、以下のコードをコピペしてください

では手順が多くて誰にも使ってもらえない気がしたので、やはりクリック1回でインストールできるChrome拡張として公開するに至りました。


また、はまったところは大きく2つありました。
1つは、「Greasemonkeyの中はふつうのcontentWindowと名前空間が違うのでJSONPでは関数を呼び出してもらえない」ということ。しばらくこれに気づけず、原因の分からないエラーと延々格闘してしまいました。(ここはちょっとJavaScriptの基礎知識が欠けていたと反省。)
もう1つは、ログイン中のはてなユーザーIDをどうやって取得するかということでした。これはtwitterで フォロワーの方々からいくつかアドバイスをいただき(123)、結局一番簡単そうだったhttp://b.hatena.ne.jp/my.nameから取得する方法にしました。こんなやり方があったんですね。
さくっと作る予定だったはずが随分と手こずり、だいぶ時間がかかってしまいましたが、ライブラリに頼らないJavaScriptを書く非常に良いトレーニングになったので良かったです。

参考にしたページなど


不具合報告や機能追加の要望は、このダイアリのコメント欄か、@Cside_までリプライでお知らせください。

*1:現在の検索結果のソートは日付順

*2:コールバック関数を指定したJSONPによるデータ取得をサポートしているAPIならクロスドメイン通信できるが、そうでないものは通信できない