毎月の利用料金を払わないと利用できないウェブサービスがあって
一か月だけ契約して,そのあいだにクローラースクリプトを書いて
根こそぎダウンロードしようなんて言うあさましいことを考えていたのだけど,
いざスクリプトを書いてログインしようとすると,IDかパスワードが違うとか
何故かそんなことを言われて蹴られる.
パケットを解析すれば何が原因か分かるだろうとか思っても,SSLで暗号化されててさっぱり.
小一時間悩んで諦めかけたところで,FireFoxのScrapBook AddOnを発見.
リンクをたどってページを根こそぎとってきて保存してくれるアドオンだ.
ログイン情報もブラウザのものを使ってくれるので,やりたかったことができる.
さっそく使ってみると非常に快調.
でも,リンクをたどるページの選択のフィルタリングに正規表現は対応していないみたい.
ちょっと手を加えると対応させることが可能なようなのでやってみました.
この記事は,そのための(自分用の)メモです.
まずScrapBook AddOn. この記事を書いている時点ではversion 1.5.9 です.
https://addons.mozilla.org/ja/firefox/addon/scrapbook/
インストールするとアドオン本体は以下のフォルダに格納されている.
%UserProfile%\AppData\Roaming\Mozilla\Firefox\Profiles\[なんか文字列]\extensions
{53A03D43-5363-4669-8190-99061B2DEBA5}.xpi というのがScrapBook AddOnらしい.
xpiという拡張子がついているけど中身はただのzipファイルらしい.
アーカイバで解凍したら,
\chrome\locale\ja\scrapbook\capture.dtd を開いて次の1行を追加
<!ENTITY sb.save.filter.regexp "正規表現でフィルタ...">
同じフォルダの capture.properties にも次の1行を追加
同じフォルダの capture.properties にも次の1行を追加
FILTER_BY_REGEXP=入力した正規表現にマッチするURLのみに制限されます。
\chrome\content\scrapbook\cache.xul にも以下の1行を適切な場所に追加(前後を見ればだいたいどこに追加するかは分かるはず).
<menuitem type="radio" label="&sb.save.filter.regexp;" oncommand="sbCaptureTask.applyFilter('R');" />
同じフォルダのcapture.js にも applyFilter とか書かれている辺りに以下を追加.
case "R" :
var ret = { value : "" };
if ( !ScrapBookUtils.PROMPT.prompt(window, "[ScrapBook]", this.STRING.getString("FILTER_BY_REGEXP"), ret, null, {}) ) return;
if ( ret.value ) this.filter = function(i){ return gURLs[i].toLowerCase().search(ret.value) != -1; };
break;
書き換えたら再び元通りにzipで圧縮して,拡張子をxpiにしてからextensionフォルダに戻してやる.
これで正規表現でフィルタリングできるようになる.