Proxomitron

 プロクシとして動作し、webページを見るときのサーバとのやりとりを覗いたり、内容を変更したりするプログラムがある。

 たとえば広告を非表示にしたり、悪意有るスクリプトを無効にしたり、使い方は色々。たぶん知ってる人も多いかと思うけれどもその中の一つであるProxomitron。まず読み方が分からない。プロクソミトロンって読んでるけど、ほんとはどう読むんだろうか。

 これまで広告を消すフィルターしか作ったことが無くて、今回初めて置換元の文字列の一部を置換後に使うという物を作った。

 広告を消すのであれば、マッチした範囲を適当なコメントにごっそり置き換えてやればいいだけだから凄く簡単。

 難しかったのはやはり正規表現正規表現自体は以前からperlでずっと使ってきているし、テキストエディタでも正規表現を用いた検索や置換が行える物もあり、普通に使う分にはそれほど難しい物でもないんだけど、やっかいなのはソフトによって実装方法が違うと言うこと。

 自分ではperl正規表現を使うことが一番多いため、どうしてもperlの方法が標準的な物だと思ってしまう。だからその規則に従って書いてみてもうまくいかない。

 このproxomitronの場合、そこまで厳密なマッチングをする必要がないからか、ちょっとゆるいというか、なんか書きにくい。

 まず一体どんなものを作ったのか。iswebという無料でホームページサービスを提供しているところがある。ここでスペースを借りていないからよくわからないけど、いつからかURLの形式が変わったらしい。で、以前のURLを入れてもちゃんと新しいURLに転送してくれるからあまり意識することはない。しかもそれが画像の場合、URLは右クリックでプロパティーを見ないことには表示されないからさらによく分からない。

 もちろんここでもURLの転送が行われるため、画像が表示されないということはない。

 でも困ったことに、IEで画像を保存しようとすると、転送されて表示された画像はプロパティーに「使用不可」と表示され、bmpでしか保存できないようになってしまう。

 画像のURLをアドレスバーに入れてやれば保存できるようになるんだけれども毎回これをやるのは面倒くさい。

 というわけでProxomitronでやってやろうじゃないかと。そういう話になったわけで。

 できあがりはこんなもん。

Bounds = "<img*>"
Limit = 1000
Match = "(*src="http://)\0isweb[^.]*.infoseek.co.jp/[^/]+/([^/]+)\1(/*)\2"
Replace = "\0\1.hp.infoseek.co.jp\2"

 要するにimgタグの中のsrcを、新アドレスに置き換えてしまおうと。

 なんでこんな括弧の後ろにいちいち\0とかを書かなければならないのか。括弧自体が変数への代入を指示するものではないのか…。よくわからない。わからないけどこれで動いているから良しとしてしまう。

 とりあえずこのフィルターをかけて開いてみたらちゃんと最初からそのままで保存できるようになってましたとさ。

 まあページの作者に「こうなってるよー」と言えば済むことかも知れないけど、なんか面倒くさいからこっちで対処することに。こんなん作る方が面倒とか言わないで。