先日、ちょこっと書いたSite一括保存ソフトの件の続きです。
先日の記事の段階では特徴もつかめず何のソフトによるものか分かりませんでした。そこでその妙なアクセスパターンでアクセスログを検索してみました。すると以下の点に気がつきました
・類似のアクセスは日本各所から確認できる事
・そのアクセスの殆どがFirefox
つまり、そのアクセスは特定の個人が行ったのではなく、Firefoxのアドオンか何かなのではないかという推測が成り立ちます。では何のアドオンなのでしょうか。探してみたところ、いくつかのアドオンがリリースされているようです。検証する手間が面倒なのでどれが怪しいのかは確認してませんが。
おそらくアドオンのバグか設定がまずい事によるものなのでしょう。…にしては、1日で3万リクエスト、ほぼHTMLファイルだけだというのに100MBもDLしていくという快挙を成し遂げる事例を見るとうっへりしちゃうところもあったりなかったり1。とは言え、サーバ全体で多い日でも6GB/dayにいく事はそうないのでサーバ負荷という点ではあまり問題は無かったりします。しかしながら共用サーバですしある程度の対策はとらざるを得ないと思っています。
しかし、ダメダメ言うだけでは建設的ではないので一括DLソフトでの保存に使えそうな条件を色々メモしておきます。
・下手にプログラムにリンクを追わせるよりWikiの『一覧』(cmd=list)を食わせて対象ページをリストアップするのが一番スマート
・同じく添付ファイルも一覧で表示出来るのでそこからリストアップ (plugin=attach&pcmd=list)
・Wikiのページは以下の正規表現で表現可能
\?[a-zA-Z0-9%_.-]+
これで無駄な編集ページやバックアップページ (?cmd=edit等)を除外できる
・添付ファイルは同じく次のように書ける
\?plugin=(?:(?:ref&[^"]+&src=([^"&]*))|(?:attach&[^"]+(?:openfile|file)=([^"&]*)))
少し難解だが要するに
\?plugin=ref&******&src=添付ファイル名 \?plugin=attach&******&openfile=添付ファイル名 \?plugin=attach&******&pcmd=open&file=添付ファイル名
の3パターン。これを一括で表現しただけ2
多少の問題3を無視するなら
\?plugin=(?:ref|attach)&[^"]+(?:src|file)=([^"&]*)
ともう少し簡単に書ける
このように正規表現が使えるならWikiの保存自体はそう面倒ではありません。逆を言うと、正規表現でinclude/excludeが制御出来るプログラムでないとWikiの保存は簡単ではありません。自分はGetHTMLWとWeBoXしかためしに使ったことはありませんが、そのどちらもWiki保存には役に立ちません。サイトごとの細やかな設定が出来ませんし、そもそもページ名やファイル名を上手く処理出来ません4。仮に上手く保存が出来たとしてもWiki内のページ間リンクが相対Pathではなくhttpから始まるURIであるのでこれの置換処理を行う必要があります(もちろん添付ファイルも)。ここまで読んで結構面倒だと分かった方はそれ正解です。自分だったら変にソフトの設定で苦労するよりは専用Script書いちゃうかなってくらいです5。そう考えるとWiki保存特化のプログラムってそれなりに需要あるかもしれません。そう難しくない上にまとめサイトも多い現状を考えると公開したら人気出るかもしれません。自分は使う事もあまり無いですし、むしろWiki管理側としてあまりそういうソフトは喜ばしくないと思うほうの立場なので手を出すことは無いでしょうが。
そこまで嫌がるならローカル閲覧用HTML化済データを置いた方が良いという方も居られる思いますが、色々問題があるので現時点では採用していません。dump2htmlというプラグイン6の存在も知っていますし、自動化が不可能でない事も見当がついています。ですがWiki全頁のサーバ上での一括変換は流石に負荷を気にすべきでしょう7。Oblivion Wiki JP (避難所)ですら約600ページは有るのですから。どうしても言う方には個別対応をする方針ですので必要ならフォームから連絡をどうぞ。
ついでに。z49.orgのドメインの期限が近かったので更新しておきました。一年おきだから結構忘れやすいんですよね。期限切れが近くなったらメールで連絡が来るのですが、英語だとかspamに埋もれてしまう、もしくはネットワーク上の問題でメールが行方不明になるとか良くありますし8。更に自分の場合は無駄?に独自ドメインを他にも10個以上9持っており更新時期が少しづつずれているものだから余計やってしまいそうです。まあ、結構大手でも更新を忘れてある日突然Siteにアクセスできなくなったなんて事例は枚挙に暇が無いのではありますが、自分がやってしまったらそういう事例を笑えなくなるからちょっと必死です。
…え?何か違う?気にしたら負けです。
(2010-07-17追記)
そういえば岡崎市立中央図書館事件なんていうタイムリーな一件も有ったようですね。正直『警察沙汰にするようなことじゃない』ような内容であきれ果てる限りです。同じSite管理側の視点からしても。黙って403返せば良いだけなのに、と。…という訳で、若し負荷の掛かるようなアクセスがあっても脊髄反射で警察に通報するような馬鹿な事はしませんのでご安心を10。因みに先日から負荷調整の為に軽いルーチンを突っ込んであります。アクセスを重ねた上で表示されるページが空白になってしまった場合、それに引っかかった恐れがあります。その場合は時間を置けば解除されますので若しもの場合はお試しください。
- 例えばOblivion Wiki JPは生のWikiログで約5MB、それをHTML化した場合でも多く見積もって25MB。更にこのサーバではHTMLファイルの転送にGZIP圧縮を掛けているのでたとえ25MBのHTMLでも実際の転送量はその半分くらいになる。つまりアクセスログ上の100MBの転送量は無対策であったなら200MB位は行っている可能性がある [↩]
- “&”が”&”と表現される場合も有るのでそれも考慮するともうちょっと面倒 [↩]
- refとsrc、attachとopenfileは本来セットである [↩]
- ***?+++というURIならば***というファイル名で保存したりする。atwiki等の一見”?”を使わないアドレスのWikiならば問題ないのですが [↩]
- PHPで1から書いてもソースのサイズ10kbも要らないんじゃないかな [↩]
- 添付ファイルに対応してない筈 [↩]
- Wiki自体にキャッシュ機構を組み込んで負荷低減を図っている現状 [↩]
- メールなんて確実に届く事が保証されている手段ではないですからね。昔より改善されているとは言え [↩]
- 実際に使っているドメインはその中の4つくらい。後は塩漬け?いや良いんです、独自ドメインは早い者勝ちなのだからほしいものはある時に取らないと!”z49.org”もトップレベルドメインで短い文字列は無いかって探した結果、衝動取得しちゃった過去が有ったりします、ぢつは。 [↩]
しかし『過失』と『故意』の区別が無い法律ってのにもびっくり…法『過失』の規定が無い場合は罪にならないと知る。じゃあ、もっとだめだめじゃんー [↩]