トップページに戻る

Category

AllArchives

Checker

Credit

DLのためのProxomitron(4)

前回で「何故Proxomitronを使いウェブページソースを書き換えるとダウンロードが楽になるのか」という考え方を解説したので、今回は具体的にi-bbsをターゲットにして「初心者向けフィルタ作成法」を解説します。下記の手順で作業を進めれば動作するフィルタが書けます。完全に「手順」として書きますし、この「手順」ならばプログラミングだとか正規表現だとかに関する知識が無くても十分に可能だと思います。


ということで実際の手順。
□1:作業前に対応関係を確認する
DLのためのProxomitron(3)の最後に書いた「Match」「Replace」
  • Match: <a href="/imageDisp.jsp?id=test&file=1112975244921o.jpg" target="_blank">
  • Replace: <a href="http://image.i-bbs.sijex.net/bbs/test/1112975244921o.jpg" target="_blank">
を見て、どこがどこに対応しているのかしっかり確認してから作業に入る。

i-bbsの場合は比較的素直なので「見れば分かる」かもしれませんが、結構ひねくれた対応関係になる場合もあるので、その場合はいくつか画像を開いて自分が頭に描いた対応関係が本当に正しいかどうか確認しておきましょう。
□2:「バイト制限」の設定
前回書いた「Match」を見て文字数を数えます。
  • Match:<a href="/imageDisp.jsp?id=test&file=1112975244921o.jpg" target="_blank">
は74文字。念のため少し余裕を見て(「test」でなくもっと長いIDの場合・将来連番の桁数が変わった場合などに備える程度)、文字数をProxomitronの「Webページ・フィルタエディタ」の「バイト制限」に設定します。とりあえずここでは「80」にしておきます。

何でこんなことをするのか、という理由はこの連載の最後DLのためのProxomitron(7)で解説しますんで今はとりあえず気にせずに。
□3:特殊文字のエスケープ
この連載の最初に軽く書いたんですが、ProxomitronのMatchではワイルドカード「*」が使用可能です。「*」は「あらゆる文字列」を意味します。
「*」だけでなく、このように「自身」を表さず「特殊な意味」を持ってしまう文字が何種類かあるので、そうした文字の前には「\」を付けます(「\」は英語フォントだとバックスラッシュになりますが同じ意味)。「\*」にすれば「*」自身を表す。こういうのを「エスケープ」というんで、まぁ、プログラマー気分に浸るために「エスケープ」という言い方を覚えておいても損はないかな、と。
特殊な意味を持ってしまう文字:「*」「?」「[」「]」「(」「)」「+」「=」「&」
ということで、「<a href="/imageDisp.jsp?id=test&file=1112975244921o.jpg" target="_blank">」自身を表すためには
  • Match:<a href\="/imageDisp.jsp\?id=test\&file\=1112975244921o.jpg" target\="_blank">
とする必要があります。Proxomitronの「Webページ・フィルタエディタ」から「テスト」を開き、とりあえずここまでが正しく動作しているか試してみると良いでしょう。「Replace」に前回書いたReplaceを記入して「テスト」をクリックし、「テスト」ウインドウの上部にソースの一部(前回書いたMatch)を記入し「テスト」をクリック。

この段階で「テスト中〜」ウインドウの「テスト」を押した時、下部に「[合致なし]」と表示されてしまった場合はエスケープが出来ていないので見直し。恥ずかしながら、僕もたまに「=」とかの前に「\」を付け忘れて、フィルタを書き終えてから「何で動かないんだ」と悩むことがあるので、この段階で一度テストをすることを強くオススメします。
※参考
Proxomitron-J内「検索表現テストウィンドウ
□4:可変要素を*に置換
「<a href\="/imageDisp.jsp\?id=test\&file\=1112975244921o.jpg" target\="_blank">」なんですけど、「id=test」の「test」は掲示板IDによって変わりますし、「file\=1112975244921o.jpg」の「1112975244921」はファイルによって変わります。また、「jpg」もアップされたファイルの拡張子によって変わります。こういう部分をワイルドカード「*」に書き換えます。
  • Match:<a href\="/imageDisp.jsp\?id=*\&file\=*o.*" target\="_blank">
こんな感じですね。
□5:Replaceで利用したい可変部分を変数に設定
前回書いたReplaceは
  • Replace: <a href="http://image.i-bbs.sijex.net/bbs/test/1112975244921o.jpg" target="_blank">
です。先ほどワイルドカードに置換した「test」「1112975244921」「jpg」はReplaceにも登場している。このように、Replaceで利用したい可変部分は「*」でなく「(*)\N」に置換する(N=1,2,3,4,・・・,9)。
  • Match:<a href\="/imageDisp.jsp\?id=(*)\1\&file\=(*)\2o.(*)\3" target\="_blank">
この場合は全てのワイルドカードを置換した訳ですが、場合によっては「可変部分だけどReplaceでは使わない」という場所が出てくることもあるので、その場合は「*」のまま残しておきましょう。また、同じ情報が複数回出てくるケース(連番部分がMatchに二回出てくる等)もあるので、その場合二度目以降は「*」のままで構いません。
「(*)\N」は「その部分を\Nという変数に代入する」の意味です。つまり、今の作業によって
  • 「\1」に「test」など掲示板ID
  • 「\2」に「1112975244921」などファイル名の連番
  • 「\3」に「jpg」などファイルの拡張子
がそれぞれ代入された。Replaceにも「\1」等と書けば代入された文字列が表示されるので

  • Replace:1:\1 2:\2 3:\3
こんな風に再びテストを行い、正しく代入されているか確認しておきましょう。(□4までは意図通りの動作が行われていたのに)この段階で意図通りの変数代入が行われていない場合はDLのためのProxomitron(6)を参考に。
また、何故この行程が必要なのか(□4の後□6を行っては何故まずいのか)はDLのためのProxomitron(6)まで読めば分かると思いますんで今はとりあえず気にせずに(ある程度慣れてくれば□5は不要ですが、慣れるまでに□5を飛ばすと「意図しない変数代入」が行われていた時、そのことに気付かず、上手く動かない原因の切り分けが出来なくなる)。
□6:Replaceを設定
前回書いたReplace
  • Replace: <a href="http://image.i-bbs.sijex.net/bbs/test/1112975244921o.jpg" target="_blank">
になるようにReplaceを設定します。□5でIDや連番や拡張子を変数に代入しているので
  • Replace:<a href="http://image.i-bbs.sijex.net/bbs/\1/\2o.\3" target="_blank">
としてテスト。

これが成功すればあと一息です。
□7:「URLのマッチ」を設定
今書いたフィルタはi-bbs用であり、他のサイトでは発動して欲しくない類のフィルタです。i-bbsのURLは「http://i-bbs.sijex.net/〜」なので「http://」部分を抜いて、「URLのマッチ」に「i-bbs.sijex.net/」と入れておく。これでフィルタが完成です。「フィルタ名」に「i-bbs.sijex.net DirectDL」とでも入れて「OK」をクリックし、DLのためのProxomitron(2)と同様にフィルタを有効化すればi-bbs全体で働くはずです。

こんな風に、サムネイル画像のリンク先が(JSPの中継ページでなく)フルサイズ画像になったはず。この状態ならばサムネイルを右クリックしIrvineで落とすことも出来ますし、リンク抽出などで一気にページ内のフルサイズ画像を全て落とすことも出来る。
今回解説した方法は、ぶっちゃけ「一番簡単で一番レベルの低いフィルタの書き方」なんですが、それでも十分実用性はあります。同じようにフィルタを組めば、i-bbsに限らず様々なサイトに関して「そのサイト用」のフィルタを書くことが出来るでしょう。次回からはターゲットを変えて、一歩レベルを上げたフィルタの書き方を解説します。

SeeAlso

SameSubCategory

Footprint

Navigation

TrackBack

この記事へのトラックバック

Comment

ちょっと気になったのですが、
Matchの中のidの後の=のエスケープは
必要無いのでしょうか?

dks 2005/09/09 11:50:53

ぐわ、すみません、完全にポカです(エスケープ必要です
修正しておきます、ご指摘ありがとうございます

tokix 2005/09/13 02:38:00

PostForm

情報を登録  
コメントは本文以外省略可能で、当方の承認後掲載されます