1.ヲチ板ミラー計画とは
この計画は「dat落ちしたスレッドを●無しで読むにはどうればいいのか?」という一つの解決策を模索した結果生まれました。
昔からヲチ板のdat落ちしたスレはなかなかhtml化されなかったのですが、●の販売に合わせるかのように更にhtml化が遅くなりました。現在はdat落ちして1年経ってもhtml化されません。
普通なら●を購入して過去ログを読むのかもしれませんが、ある日邪な考えが浮かんでしまいました。
「全スレッドを定期的に保存しておけば、dat落ちしても●無しで読めるじゃないか」
このような単純な発想によりヲチ板ミラー計画は始まりました。
2.ヲチ板ミラー計画の仕組み
ヲチ板ミラー計画を実行する一連のツールを"2ch Logger"と名づけました。"2ch Loggeer"は現在1つのスクリプトと3つのCGIから成っています。
- 定期的に実行され、ヲチ板のスレッドのdatファイルをダウンロードするthreadgetter.pl
- datファイルからhtmlを生成するCGIのread.cgi
- タイトル検索用CGIのfind.cgi
- read.cgi、find.cgiの出力結果を転送するtrans.cgi
実はミラー用にダウンしたdatファイルはXREA鯖に置いていません。当然です。それだけの容量が確保できないし、ミラーリングスクリプトみたいに高負荷なスクリプトなぞ恐ろしくて置けません。
XREA鯖に置いているのは転送用CGIのtrans.cgiだけです。他のCGI、スクリプトは全てXREA鯖から追い出しています。XREA鯖にある転送用CGIのtrans.cgiは他鯖に設置されたCGIの出力結果を転送しているだけです。
2−1.threadgetter.plの仕組み
以下の手順でヲチ板のスレッドがダウンロードされます。
- subback.htmlをダウンロードして現状のスレッドのキーを全て取得
- 新スレは全レス取得
- 更新のあったスレッドはあぼーんのチェック
- あぼーんのあったスレッドは全レス再取得
- それ以外の更新のあったスレッドは差分を取得
- subback.htmlにないスレッドはdat落ちかスレッドあぼーんのチェック
- スレッドあぼーんになったスレッドはミラーから削除
- dat落ちしたスレッドは過去ログのフラグを立て、次回からは更新のチェックから外す。
これらを一つのサイクルとし、20分毎に自動実行されます。
2−2.read.cgiの仕組み
以下の手順でhtml表示します。
- threadgetter.plが実行中ならエラーを返す
- trans.cgiより送られたスレッドキーから、ミラーのスレッドを検索
- スレッドが見つかれば、dat→html変換して表示
- スレッドが見つからなければエラー表示
2chのread.cgiと大きく違うのはオートリンクをしない点にあります。
2−3.find.cgiの仕組み
以下の手順でタイトル検索します。
- threadgetter.plが実行中ならエラーを返す
- trans.cgiより送られた検索ワードをEUC変換(半角かなは全角に変換)
- ミラーされている全スレッド名を検索ワードと比較
- 一致したスレッドのリストを作成
- 全スレッドの比較が終了したら、リストの表示
ただ単に検索だけを行うCGIです。
2−4.trans.cgiの仕組み
以下の手順で別鯖にあるCGIを呼び出します。
- パラメータが渡されていない場合は、入力フォームを表示
- パラメータにより別鯖にあるread.cgi、find.cgiのいずれかを呼び出し
- 呼び出したcgiの出力結果を受け取りそのまま出力。
trans.cgiはread.cgi/find.cgiを仲介するだけの役割です。
以上の事を図式化すると
+---------------------------------+
| 2chのログ |
+---------------------------------+
↑ 取得
+---------------------------------+ 定期実行 +----------------+
| threadgetter.pl | ← | スケジューラー |
+---------------------------------+ +----------------+
↓ 作成
+---------------------------------+
| ミラー用ログ |
+---------------------------------+
↑取得 ↑検索
+---------------+ +-------------+
| read.cgi | | find.cgi |
+---------------+ +-------------+
↑キー ↓変換 ↑キー ↓結果
+---------------------------------+
| trans.cgi |
+---------------------------------+
↑フォーム入力 ↓ 結果表示
+---------------------------------+
| ユーザー |
+---------------------------------+
4.あぼーんの処理について
スレッド及びレスのあぼーんが検出されると、自動的にミラーから削除されます。
4−1.レスのあぼーん
以下の手順によりレスのあぼーんを検出します。この方法はこちらを参考にさせて頂きました。
- 更新されたスレッドかどうか確認
- 更新されている場合、前回までに取得したバイト数より1バイト前のデータを2chより1バイト取得
- 取得したデータが改行でなければあぼーんされたと判断
- あぼーんされてる場合は、前回までに取得されたデータは破棄し再度2chより全レス取得。
結構いい加減なチェックに見えますが、実用上問題なさそうです。
4−2.スレッドのあぼーん
subback.htmlに無いスレッドはdat落ちかスレッドあぼーんかどちらかです。
判定方法は
- 2chのread.cgiを経由してスレッドを呼び出し
- スレッドあぼーんとdat落ちではメッセージが違う
- ある文字をキーとしてdat落ちであるかのチェック
少しex鯖への負荷が高いチェック方法ですが、ヲチ板の場合dat落ちもスレッドあぼーんも頻度が低いのでなんとかなりそうです。
5.2ch Loggerの使い方
使い方は二通りです。
- フォームより指定
- URLに直接パラメータを引き渡し
5−1.フォームより指定
こちらから検索項目、あるいは表示に関する指定を入力します。各項目の説明は以下のとおりです。
スレッド番号より検索
- スレッド番号
- 各スレッドに割り振られている番号です。スレッドのURLにあるhttp://ex.2ch.net/test/read.cgi/net/xxxxxxxxxx/の10桁の数字です。
- 範囲指定
- 表示するレスの範囲を指定します。開始を指定しなかった場合は1から、終了を指定しなかった場合は最終レスまで表示します。範囲指定に矛盾がある場合は無視されます。
- >>1を表示しない
- 範囲指定しているときにこれをチェックすると、>>1を表示しません。
- ID指定
- 指定されたIDの発言のみを絞り込みます。
タイトルより検索
- 検索文字
- スレッドタイトルを検索します。半角カナは使用できません。検索時スレッドタイトルに含まれる半角カナは全角に変換する為、全角カナで検索しても問題ありません。
- dat落ちしたスレッドだけ表示
- これをチェックすると、dat落ちしたスレッドのみで検索します。これがチェックしている場合のみ検索文字を省略できます。その場合dat落ちしたスレッド全てを表示します。
必要な項目を記入した後、「ログを探す」ボタンを押してください。
5−2.URLに直接パラメータを引き渡し
2ch Loggerで使用しているCGIは全てGETメソッドでパラメーターを渡しています。よって、URLに直接パラメータを記述する事が出来ます。ただ、タイトル検索は日本語をエンコードする必要があるために、フォームから検索してください。
URLに渡すパラメータは下の説明を参照してください。
各パラメータの説明
- key
- スレッド番号を指定します。スレッド番号とは各スレッドに割り振られている番号です。スレッドのURLにあるhttp://ex.2ch.net/test/read.cgi/net/xxxxxxxxxx/の10桁の数字です。
- st
- 表示するレスの範囲指定する場合に使用し、範囲の開始を指定します。
- ls
- 表示するレスの範囲指定する場合に使用し、範囲の終了を指定します。
- nofirst
- 範囲指定しているときに>>1を表示させない時に使用します。値をonあるいはtrueにすると>>1の表示を行いません。このパラメータが省略された場合は>>1は表示されます。
- id
- 絞り込むIDを指定します。IDに含まれる一部の記号はそのままではパラメータに引き渡す事が出来ません。分らない人は、フォームから絞込みをしてください。
書式は
http://puppet22.s9.xrea.com/cgi-bin/2chlogger/trans.cgi?[パラメーター#1]=[値]&[パラメーター#2]=[値]‥
となります。
例えば、「ヲチ板総合案内/質問+雑談スレッド」を例にとると、
- http://puppet22.s9.xrea.com/cgi-bin/2chlogger/trans.cgi?key=1065534917
- 全レスを表示します。
- http://puppet22.s9.xrea.com/cgi-bin/2chlogger/trans.cgi?key=1065534917&st=100
- 100レス目から表示します。>>1も表示されます。
- http://puppet22.s9.xrea.com/cgi-bin/2chlogger/trans.cgi?key=1065534917&st=100&nofirst=true
- 100レス目から表示します。>>1は表示しません。
- http://puppet22.s9.xrea.com/cgi-bin/2chlogger/trans.cgi?key=1065534917&ls=100
- 100レス目まで表示します。
- http://puppet22.s9.xrea.com/cgi-bin/2chlogger/trans.cgi?key=1065534917&st=100&ls=110&nofirst=true
- 100レス目から110レス目まで表示します。>>1は表示しません。
- http://puppet22.s9.xrea.com/cgi-bin/2chlogger/trans.cgi?key=1065534917&st=100&ls=100&nofirst=true
- 100レス目のみ表示します。>>1は表示しません。
- http://puppet22.s9.xrea.com/cgi-bin/2chlogger/trans.cgi?key=1065534917&nofirst=on&id=R6CGC%2FAZ
- IDが'R6CGC/AZ'のレスのみを表示します。>>1は表示しません。
puppet_master ◆hesl6eItdY