WebOS Goodies

WebOS の未来を模索する、ゲームプログラマあがりの Web 開発者のブログ。

WebOS Goodies へようこそ! WebOS はインターネットの未来形。あらゆる Web サイトが繋がり、共有し、協力して創り上げる、ひとつの巨大な情報システムです。そこでは、あらゆる情報がネットワーク上に蓄積され、我々はいつでも、どこからでも、多彩なデバイスを使ってそれらにアクセスできます。 WebOS Goodies は、さまざまな情報提供やツール開発を通して、そんな世界の実現に少しでも貢献するべく活動していきます。
Subscribe       

Firefox 検索プラグインの作成方法

先日Firefox 検索プラグインジェネレータを公開したついでに、検索プラグインの作成方法をご紹介しておこうと思います。それぞれのタグに関してもできるだけ詳しく書いたつもりですので、お役立てください!(^^)

2006/3/18 追記
Firefox 検索プラグインの作成方法(実践編) として、Yahoo! 辞書を題材にして実際に検索プラグインを追加する手順を記事にしました。併せてご参照ください。
2006/7/24 追記
Firefox 2.0 検索プラグインの作り方(基礎編)として、 Firefox 2.0 の新しい検索プラグインの作成方法を記事にしました。併せてご参照ください。

検索プラグインの保存場所

検索プラグインは、Firefox のインストールディレクトリ、もしくは各ユーザーのプロファイルディレクトリの中の "serachplugins" ディレクトリに格納されています。主にインストールディレクトリにはデフォルトの検索プラグインが保存されており、後から追加したプラグインはプロファイルディレクトリに保存されます。ただし、両者に機能的な違いは存在せず、アクセス権さえあればインストールディレクトリに検索プラグインを追加することも可能です。インストールディレクトリやプロファイルディレクトリの位置はインストール時の指定やプラットフォームによって異なります。以下に各プラットフォームのデフォルト位置を示します。

プラットフォームインストールディレクトリプロファイルディレクトリ
Windows 2000/XPC:\Program Files\Mozilla FirefoxC:\Documents and Settings\<ユーザー名>\Application Data\Mozilla\Firefox\Profiles\xxxxxxxx.default
UNIX/Linux/usr/lib/firefox~/.mozilla/firefox/xxxxxxxx.default
Mac OS X~/Desktop/Firefox.app/Contents/MacOS~/Library/Application Support/Firefox/Profiles/xxxxxxxx.default

"xxxxxxxx" はランダムに生成される文字列です。

"searchplugins" ディレクトリには、検索プラグインの本体である ".src" ファイルと、それらと同じファイル名の画像ファイル(主に .png か .gif)が格納されています。画像ファイルは検索窓に表示されるアイコンとして使われるのみで、もし存在しなくても動作に支障はありません。

検索プラグインの概要

では、例として Google 検索プラグインのソースを以下に示します。

# Mozilla/Google plug-in by amitp+mozilla@google.com
# Localized by dynamis

<search 
   name="Google"
   description="Google Search"
   method="GET"
   action="http://www.google.co.jp/search"
   queryEncoding="utf-8"
   queryCharset="utf-8"
>

<input name="q" user>
<inputnext name="start" factor="10">
<inputprev>
<input name="hl" value="ja">
<input name="lr" value="lang_ja">
#<input name="num" value="100">
<input name="ie" value="utf-8">
<input name="oe" value="utf-8">

<interpret 
    browserResultType="result" 
    charset = "UTF-8"
#    resultEncoding = "UTF-8"
    resultListStart="<!--a-->" 
    resultListEnd="<!--z-->" 
    resultItemStart="<!--m-->" 
    resultItemEnd="<!--n-->"
>
</search>

<browser
    update="https://addons.mozilla.org/searchplugins/updates/google-jp.src"
    updateIcon="https://addons.mozilla.org/searchplugins/updates/google-jp.gif"
    updateCheckDays="7"
>

一見すると XML のようですが、見た目に騙されてはいけません。XML 宣言も閉じタグもないので XML ではありませんし、search タグなどは、属性を改行で区切らないと認識されないようです(Firefox 1.5 で確認)。行頭 # でコメントになるという規則も含めて、かなり行志向の解析を行っているようです。だったらタグとか使うなよ・・・(´ー`;)。

それはともかく、それぞれのタグの属性で検索に必要な情報を与えてやることにより、検索プラグインになります。主なタグは以下の通りです。

タグ機能
search検索サイトの情報の記述
inputクエリーのパラメータを記述
interpret検索結果の解析に使う情報の記述
browser検索プラグインの自動更新に使う情報の記述

最低限、search タグと適切な input タグの記述があれば検索プラグインとして動作します。interpret タグの内容は searchsidebar 拡張で使用される情報、browser タグは検索プラグインの自動更新チェックに使用される情報です。

タグリファレンス

以下、それぞれのタグの使用方法の詳細をご紹介します。

search

search タグは、検索サイトの情報を記述します。属性で検索サイトとプラグインの基本的な情報を定義し、内部のに input*interpret などのタグを記述できます。search タグの属性には以下のものがあります。

version
検索プラグインのバージョン。現在は "7.1" を指定しておけばよいと思います。
name
検索窓に表示される検索プラグインの名前です。日本語を使う場合は、後述の sourceTextEncoding の指定を忘れないでください。
description
検索プラグインの説明です。実際には使用されていません。
action
検索クエリーを送信する URL です。検索窓から検索を実行すると、この URL に後述の intput タグなどで指定したパラメータが追加された URL のページが表示されます。
searchForm
検索窓があるページの URL です。検索サイトのトップページなどを指定しておけばよいでしょう。たぶん Firefox では使用されていません。
queryCharset
検索文字列をエンコードするのに使う文字コードの指定です(設定できる値のリスト)。検索窓に日本語などの ASCII 以外の文字が入力された場合、ここで指定した文字コードに変換されて送信されます。
method
検索クエリーに使用する HTTP のメソッドを指定します。現在は "GET" に固定です。
sourceTextEncoding
".src" ファイルの文字コードを指定。日本語の場合は "1"(Shift JIS)を指定します(設定できる値のリスト)。UTF-8 は使えないのか・・・(´ー`;

input

input タグは、検索エンジンに渡すパラメータを定義します。search タグの内部に記述されなければなりません。これらのパラメータは、検索結果ページのURL の一部として以下のように渡されます。

http://<検索ページのアドレス>?<パラメータ名1>=<値1>&<パラメータ名2>=<値2>...

このようなパラメータの渡し方を「GET メソッド」と呼びます。そのほかに「PUT メソッド」というものがあり、そちらは URL ではなく HTTP リクエストの中にパラメータを格納する方法です。ブログの書き込みや、ファイルアップロードなど、容量の大きいパラメータを渡すときに使用されます。Firefox の検索プラグインは現在のところ GET メソッドしかサポートしていないので、PUT メソッドでパラメータを渡す検索サイトは使用できません(bookmarklet を使用するトリックはあるようですが)。

input タグの書式としては以下の 2 つがあります。

<input name="パラメータ名" value="値">
<input name="パラメータ名" user>

前者は固定のパラメータを渡すための記述です。後者は検索窓に入力された検索文字列を渡すための特殊な記述で、uservalue="検索窓に入力された文字列" に置き換わると考えればよいと思います。

inputnext, inputprev

このタグは searchsidebar 拡張で使用されるものだと思います。サイドバーに検索結果を表示した際に、次のページや前のページに移動する機能を提供するものです。input 同様、search タグの内部に記述されなければなりません。この指定はオプショナルで、実際標準の検索プラグインでも指定されているのは Google 用のものだけです。書式は双方とも同じで、以下の 3 つがあります。

<inputnext name="パラメータ名" factor="10">
<inputnext name="パラメータ名" value="next10">
<inputnext>

前者は表示するクエリーの番号を指定するタイプの検索エンジン(Google など)に対する記述で、各ページごとに factor 分だけ増減した値を検索エンジンに渡します。2 番目の書式は常に固定の値を渡すときの指定です。3 番目の書式は、直前の inputnext タグ(あるいは inputprev タグ)とまったく同じパラメータが使用されます。

interpret

このタグも searchsidebar 拡張で使用されるものです。サイドバーに表示するためのデータを検索結果から抽出する方法を記述します。search タグの内部に記述されなければなりません。

なお、私は searchsidebar 拡張は使っていませんので、下記の情報は検証できていません。もし間違いなどありましたら、コメントでご報告いただけると助かります。

interpret タグの属性は以下のものがあります。

resultListStart, resultListEnd
検索結果を切り出す範囲の指定です。この範囲から後述の resultItemStartresultItemEnd などでサイドバーに表示する検索結果を抽出します。文字列のマッチングは単純な文字列比較によるもののようです。
resultItemStart, resultItemEnd
ひとつの検索結果を切り出す範囲を指定します。実際には、この範囲の中から <a href="〜"> のタグを探して、その中身を表示するようです。
bannerStart, bannerEnd
resultItemStartresultItemEnd で切り出した中から、バナーとして表示したい範囲を指定します。メタ検索モードで使用されるようです(?)。
relevanceStart, relevanceEnd
resultItemStartresultItemEnd で切り出した中から、各アイテムのスコアなどを切り出すためのものです。範囲の中身は必ず数値でなければなりません。検索結果をスコアでソートする、などの目的で使われるようです。
skipLocal
検索サイトの内のページへのリンク(Google のキャッシュなどでしょうか)をスキップするかどうかを示すフラグです。"true", "false" のどちらかを指定します。
charset
結果ページの文字コードを指定します。search タグの queryCharset と同じ指定が使用できます。
priceStart, priceEnd
ショッピングサイトの検索結果などから、各アイテムの値段を取得するのに使用します。中身は数値でなくてもよいようです。
availStart, availEnd
同じくショッピングサイトの検索結果から、入手可能かどうか(?)の情報を切り出すために使用されます。
dateStart, dateEnd
各アイテムの日付情報を抽出するために使用されます。
nameStart, nameEnd
各アイテムの人の名前(著者などでしょうか?)を抽出するために使用されます。
emailStart, emailEnd
各アイテムの e-mail アドレスを抽出するために使用されます。
browserResultType
interpret タグを複数記述するような場合に使用するようです。それがどのような意味を持つのかははっきりしません・・・orz。通常は "result" を指定しておけばよいようです。

browser

プラグインの更新チェックなどに使用される情報を記述します。このタグは search タグの中ではなく、独立したタグとして記述しなければなりません。属性は以下のものがあります。

alsomatch
検索結果ページがリダイレクトされる場合に、そのリダイレクト先ページの URL を指定します。この指定があると、サイドバーに結果を表示する際にリダイレクト先のページを使用します。リダイレクト先が複数ある場合は、"'http://site1','http://site2'..." のような記述をします。本来は interpret タグに記述すべき情報のような気もしますが・・・(^^;
update
検索プラグインの更新チェックをするために、プラグインのソースの URL を指定します。
updateIcon
update 属性と同様に、プラグインのアイコンの URL を指定します。
updateCheckDays
更新をチェックする間隔を日数で指定します。

アイコンについて

アイコンとして使用できるのは、16x16 のサイズで以下の拡張子(フォーマット)のファイルです。

  • gif
  • jpg
  • jpeg
  • png

以前 Firefox 1.0 で試したところ、サイズの大きいアイコンを指定すると、縮小されずにそのままのサイズで表示されました(^^;。非常にウザいので、きちんとしたサイズにしましょう(笑)。

JavaScript による自動登録

JavaScript の window.sidebar.addSearchEngine メソッドを使用すると、Web ページ上から簡単に検索プラグインのインストールが行えます。addSearchEngine メソッドの書式は以下のようになります。

window.sidebar.addSearchEngine(
    <ソースのURL>,
    <アイコンのURL>,
    <プラグインの名前>,
    <カテゴリ名>);
ソースの URL
".src" ファイルの URL を指定します。
アイコンの URL
検索窓などに表示するアイコンの URL を指定します。ファイル名(拡張子を除く)はソースの URL と一致しなければなりません。
プラグインの名前
確認ダイアログに表示されるプラグイン名です。
カテゴリ名
とりあえず、"Web" を指定しておけばよいようです。(^^;

もちろんこのメソッドは Firefox(というか Mozilla ブラウザ全般)の独自拡張なので、以下のようにしてサポートしているかを判別するのがよいでしょう。

if((typeof window.sidebar == "object") &&
   (typeof window.sidebar.addSearchEngine == "function"))
{
    window.sidebar.addSearchEngine(...);
}
else
{
    alert("このブラウザは、Mozilla 検索プラグインをサポートしていません。");
}

以上で、検索プラグインに関する情報はじゅうぶんではないでしょうか。皆さんもお気に入りのサイトの検索プラグインをどんどん追加して、Firefox を活用しましょう!(^^)

関連記事

この記事にコメントする

Recommendations
Books
「Closure Library」の入門書です。
詳しくはこちらの記事をどうぞ!
Categories
Recent Articles