namazu-ml(avocado)


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: MacOS 8.5 Sherlock bug



森本@イマジカです。こんにちは。

On Fri, 23 Oct 1998 17:34:17 +0900,
Kenji Suzuki <kenji@xxxxxxxxxxxxxxxx> wrote:

> > Sherlock の件、以下のはどうでしょう。Namazu 側対応いらんかも。
> > ごめんなさい、いまいろいろテストしている時間がなくて。
> > ヒントだけ投げて逃げる。
		:
> > # この行を追加してみる
> > charset="iso-2022-jp"
		:
> やってみましたが,ダメでした.

昨日は途中で逃げちゃってすいません :-)
Sherlock 定義ファイルに charset="iso-2022-jp" 無し、
NMZ.head.ja に <META HTTP-EQUIV.. 無しで ok でした。

あまり namazu な話題ではありませんが、自分でやってみた結果をまとめます。

● Sherlock 定義ファイル側

Sherlock 定義ファイルはプレインテキストである。
(もちろん MS 漢字コード, 改行は LF)

(namazu 向けの)スケルトンは以下のような感じ:

----------------------------------------------------------------
<search
	name = "検索サービスの名称"
	action = "http://www.foo.co.jp/cgi-bin/namazu.cgi" 
	method = get
	queryEncoding=2561

    # オプション
	description = "より詳しい説明"

    # これもオプション. 検索結果のペインに出す画像
    # うまく出ないときがあるが原因不明
	bannerImage = "http://www.foo.co.jp/buy_it.gif"

    # 上の bannerImage をクリックしたときの飛び先.
    # 本当はオプションだが, bannerImage を指定するなら書いたほうがいい
	bannerLink = "http://www.foo.co.jp/"
>

<input name="key" user>
<input name="max" value="100">
<input name="format" value="long">
<input name="lang" value="ja">

<interpret
	resultEncoding=2080
	resultTranslationEncoding=1
	resultTranslationFont="Osaka"
	resultListStart="<DL>"
	resultListEnd="</DL>"
	resultItemStart="<DT>"
	resultItemEnd="<BR><BR>"    # <BR> ふたつ
	relevanceStart = "</STRONG> (score:"
	relevanceEnd = ")"

    # オプション
	# bannerStart = "pattern"
	# bannerEnd = "pattern"
>
</search>
----------------------------------------------------------------

要は, CGI で返された内容に単純パターンマッチを行って結果を拾い、
活用するもの。
もちろん従来通りローカル/ネットワークディスクの検索機能も持っている。
tkNamazu, bnamazu, namazu.el や Emacs の M-x grep, find, locate の遠い
親戚のようなものか。

`resultListStart' から `resultListEnd' にマッチする間の結果を吟味対象
とし, そのなかの `resultItemStart' から `resultItemEnd' にマッチするも
のを検索結果ひとつとして拾う.

拾われた検索結果の HTML 片において、ある程度の HTML タグは Sherlock の
表示結果に反映される。(A, H1〜H6, B, I, etc..)

さらに, それぞれの検索結果のスコアも意識する.
`resultItemStart' から `resultItemEnd' の*中の*、
`relevanceStart' から `relevanceEnd' の中にある, 最初の数値パターンを
スコア値として拾う.

ただ、このスコアの範囲は 0〜100 なので、namazu と Sherlock を
きちんと対応させるためには、Namazu 側にも工夫が必要。(後述)

単純パターンマッチであり、SGML タグ/エレメントのスタックは意識しないの
で、

  resultListStart="<DIV CLASS=list>"
  resultItemStart="<DIV CLASS=item>"
  resultItemEnd="</DIV>"
  resultListEnd="</DIV>"

  <DIV CLASS=list>
    <DL>
    <DIV CLASS=item>
      <DT>検索結果1: <A HREF="http://www.foo.com/">なんたら</A></DT>
      <DD>かんたら..</DD>
    </DIV>
    <DIV CLASS=item>
      <DT>検索結果2: <A HREF="http://www.bar.com/">ほげほげ</A></DT>
      <DD>もごもご..</DD>
    </DIV>
    </DL>
  </DIV>

のような定義は動作しない.
__

また、検索結果ごとに結果表示ペインに出すべきバナー内容を
(resultItemStart 〜 resultItemEnd の中の)
bannerStart 〜 bannerEnd のパターンマッチで拾う.

これは、各検索結果*ごと*に出てくる HTML 片を拾うものなので注意。

  パソコンに関するリンクだったらパソコン通信販売業者のバナー、
  クルマやバイクの話題だったら結婚相談所..とか..だった ^^;
  商用サーチエンジンではこの機能は死活問題なのかもね。

この機能を活用するならば、少なくとも Sherlock からの検索時に
のみバナー(の HTML)を送出する、など配慮すべきである。(後述)
__

Sherlock 定義ファイルに charset="iso-2022-jp" は*入れない*。
入れるとかえって化ける.

bannerLink 無指定時は, bannerImage クリックにて action の URL に
飛ぶはず。しかし飛び先に 2 バイトほどゴミがついてエラーになる.
(CR とか LF の類ではない) これは Sherlock のバグ.
bannerLink は明示的に指定したほうがよい.

これを Creator: fndf, Type: issp に変更してできあがり.

MacOS はファイルの拡張子なぞ関係ないが、他の Sherlock 定義ファイルは
みな *.src になっているので、同じく *.src にしておいたほうが
なんとなく安全?

また, 定義ファイルのアイコンに任意の画像をペーストしておくと, Sherlock 
画面にて、また検索結果にて反映される. おすすめ.

● CGI Script (namazu) 側

Sherlock に対応させる場合は, NMZ.head.ja に
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-2022-jp">
を入れない。

Sherlock 側は定義ファイルの別項目にてキャラクタセットを独自の数値で
定義できるので、化ける心配はない(だろう).
また, iso-2022-jp は euc-jp or x-sjis と明らかにバイトパターンが異なる
ので、たとえ MSIE 3.x でも、根本的なキャラクタセットの判定間違いは起こ
りにくい(だろう).
__

表示するスコアのすりあわせ.

Sherlock は relevanceStart 〜 relevanceEnd 間の数値をスコアとして
受け取り、棒グラフとして表示し、これに基づいて結果をソートする(ことが
できる)が、対応する値範囲は 0〜100 である。

Namazu のスコアは「比率」ではないので、どうもうまくない。

また、各種サーチエンジンの結果をひとまとめに表示、ソートできるのが
Sherlock の売りのひとつなので、namazu の返すスコアがあまりに大きい、
または小さいと不便。

# 下世話な対策として、サーチエンジン各社がみな 100% に近い
# スコアを返して、なるべく Sherlock の表示上位を狙いだしら
# すっげーイヤかも(笑)

その場しのぎとしては、mknmz 内のスコア値要素をいじる、hlist.c の
552 行あたりに手を入れて、「なんとなく」0〜100% っぽい数値に
してやることは、できる..

なお、100 以上の数値を返しても, Sherlock は 100 で切り捨てるようなので
大丈夫。
__

より進んだ設定としては、HTTP_USER_AGENT =~ / Apple Find / だったら
Sherlock パターンマッチ用のシグネチャを入れる、Sherlock ユーザ向けの
リンクを「検索結果のひとつ」として入れる、簡素な HTML を返す、
などができる。これもおすすめ。

MacOS 8.5 出荷時に Sherlock に定義済みのサーチエンジン各社もこれをやっ
ている。

● 参考

http://www.apple.com/sherlock/plugindev.html
http://developer.apple.com/technotes/tn/tn1141.html

.. 森本 淳 (Jun Morimoto) ...........................................
.. IMAGICA Internet Planning Bureau - `Marib' .......................
.. morimoto@xxxxxxxxxxxxxxxxxxx http://members.xoom.com/morimoto/ ..