2ちゃんねる過去ログ倉庫 2ちゃんねるのログをスクリプトで処理するためのアルゴリズム2008/05/05調査

1. スレッドが現役であるかdat落ち・削除済みであるかの判別 〜単数篇〜 下記URLにてHEAD Methodでデータを取得
http://ホスト名/板のフォルダ名/dat/スレッドキー.dat このときHTTPヘッダーの全てを取得する必要はなく、先頭12バイトのみでよい
取得した12バイトの文字列から末尾の3バイトを抽出すれば
それがHTTPステータス・コードとなる
鯖からのレスポンスについては、鯖がread.soとpastdat.soを実装しているか否か
User-AgentがMonazilla互換(2ch専用ブラウザ)であるか否か
という二点の組み合わせによって相違する

a. 鯖がread.soとpastdat.soを実装+User-AgentがMonazilla非互換
HTTPステータス・コード
200
203
302
スレッド
現役
dat落ち
削除済み
b. a以外の場合
HTTPステータス・コード
200
302
スレッド
現役
dat落ちであるか削除済みであるかのいずれか

ちなみに、sports2鯖には過去ログ倉庫が設置されていないので
スレッドのdat落ちが生じることはない

2. スレッドが現役であるかdat落ち・削除済みであるかの判別 〜複数一括篇〜 下記URLにてGET Methodでデータを取得
http://ホスト名/板のフォルダ名/subject.txt なお鯖にリクエストを送る際、User-Agentは任意の文字列でよい
ここから先は、subject.txtにHTTPヘッダが含まれた状態で処理する場合と
含まれていない状態で処理する場合とによって分岐する

a. subject.txtにHTTPヘッダが含まれた状態で処理する場合 取得したsubject.txtに下記文字列が含まれているか否かを検出
\nスレッドキー.dat<> 含まれていれば現役、含まれていなければdat落ちまたは削除済みである

b. subject.txtにHTTPヘッダが含まれていない状態で処理する場合 subject.txtの行数を検出
subject.txtの先頭から1行ずつ抽出して
更に当該行の先頭から文字「.」(0x2e)の直前までを抽出し
その文字列がスレッドキーと一致するか否かを検出する、という作業を無限回繰り返す
一致すればスレッドは現役であり、直ちに繰り返しから抜ける
繰り返しの回数がsubject.txtの行数を超えればdat落ちまたは削除済みであり
直ちに繰り返しから抜ける

3. スレッドがdat落ちであるか否かの判別 下記URLにてGET Methodでデータを取得
http://ホスト名/test/read.cgi/板のフォルダ名/スレッドキー/1 スレッドキーの後ろに「第1レスのみ取得」のオプションを付けるのがポイント
スレッド全体のデータを取得する必要はないからである
取得したデータに下記文字列が含まれているか否かを検出
<center><font color=red>■ このスレッドは過去ログ倉庫に格納されています</font></center> 含まれていればスレッドはdat落ち、含まれていなければdat落ちではない
read.cgiにアクセスする関係上
鯖にリクエストを送る際はUser-Agentを携帯電話以外のものに設定する必要がある

4. スレッドが削除済みであるか否の判別 下記URLにてGET Methodでデータを取得
http://ホスト名/test/read.cgi/板のフォルダ名/スレッドキー/1 スレッドキーの後ろに「第1レスのみ取得」のオプションを付けるのがポイント
スレッド全体のデータを取得する必要はないからである
取得したデータに下記文字列が含まれているか否かを検出
<p>\ndatが存在しません。削除されたかURL間違ってますよ。 含まれていればスレッドは削除済み、含まれていなければ削除済みではない
read.cgiにアクセスする関係上
鯖にリクエストを送る際はUser-Agentを携帯電話以外のものに設定する必要がある

5. スレッドがHTML化済みであるか否かの判別 下記URLにてHTTPヘッダーの先頭12バイトを取得
スレッドキーが9億番台の場合
http://ホスト名/板のフォルダ名/kako/スレッドキーの先頭3バイト/スレッドキー.html
スレッドキーが10億番台の場合
http://ホスト名/板のフォルダ名/kako/スレッドキーの先頭4バイト/スレッドキーの先頭5バイト/スレッドキー.html
取得した文字列から末尾の3バイトを抽出し、HTTPステータス・コードを得る
HTTPステータス・コードが「200」であればスレッドはHTML化済みであり
「302」であればHTML化されていない
鯖にリクエストを送る際、User-Agentは任意の文字列でよい

6. バーボンハウス規制の判別 板のindex.htmlやsubject.txtやSETTING.TXT、スレッドのdatファイル
あるいはread.cgi経由等、任意のURLを鯖に要求する
HEAD MethodであるかGET Methodであるかは問わない
また、User-Agentも任意の文字列でよい
鯖からのレスポンスに下記のLocationヘッダが含まれていれば
バーボンハウス規制に抵触している
Location: http://www2.2ch.net/403/ 規制抵触時におけるHTTPステータス・コードは「302」である
ちなみに、バーボンハウス規制が導入された当初
規制抵触時におけるHTTPステータス・コードは「403」であった
新仕様のバーボンハウス規制に対応していない2ch専用ブラウザの場合
datファイルについてHTTPステータス・コード「302」を検出すれば
dat落ちしていると誤認してしまうので、注意が必要である



Main Pageへ戻る