2005年01月11日

Referer Houndの設計と実装・その2

 Referer Houndの実装上、最大の難関はおそらく、リンク元のHTMLの処理である。
 まず、encodingを処理するのが難しい。このことは以前書いた。現在の実装では、
1. レスポンスヘッダのcharsetを見る
2. レスポンスヘッダにcharsetが指定されていない場合、日本語を前提としてテキストから推測する
3. パーサにcharsetを渡す
4. パーサがmeta要素のcharsetを見る
5. meta要素のcharsetが解釈不能である場合、渡されたcharsetを用いる
 という具合になっている。
 HTMLParserは粘りのきくパーサを目指しているらしく、実際かなりのものだが、meta要素のcharsetが解釈不能だと例外を投げる。IEのパーサの粘りは尋常ではなく、おかげで現実世界のHTMLにはすさまじいものがある。もしIEがFirefoxのように簡単に落ちてくれたなら、この世はもう少しよいところになるだろう。
 私はPerlやPHPのことはまるで知らないので、どんなHTMLパーサがあるかわからない。Referer Houndを実装するプラットフォームを選ぶときは、利用できるHTMLパーサの能力をまず確かめるべきである。この点で、IEが使えるASP.NETは有利だ。
 リンクを探すときに、JavaScriptによるリンクのことを忘れてはならない。現在の実装では、script要素内でURLらしき文字列リテラルを探して照合している。

Posted by hajime at 2005年01月11日 20:30
Comments