*2chの色々なこと [#t1c26a5b]
#contents

**掲示板サーバの中身 [#m55701a5]
2chの掲示板鯖の基本的なファイル配置はこうなっています(外から見える範囲かつ、主な物だけ)


 yutori.2ch.net
  |
  |──news4vip(言わずと知れたν即VIP)
  |    |──index.html(IEで板を開いたときに出てきます)
  |    |──subject.txt(生きているスレのスレタイとスレ番が入ってます)
  |    |──subback.html(↑と内容は同じ。形式が違う)
  |    |──setting.txt(板の設定値(板名とか、本文の行数の上限とか、連投規制値)が入ってます)
  |    |──1001.txt(1001の内容っす)
  |    |──head.txt(ローカルルールの原本がここに)
  |    |──dat(生きているスレのdatが入っとります)
  |    |   |──1172740677.dat
  |    |   |──1172766831.dat
  |    |   |──1172832524.dat
  |    |   |     ・
  |    |   |     ・
  |    |   |     ・
  |    |
  |    |
  |    └──kako(過去ログがたんまりと。面倒だから説明は後々…)
  |
  |──skate(スポーツ系板の問題児!スケート板)
  |
  |──heavn4vip(狐の意図がわからない!天国板)
  |    ・
  |    ・
  |    ・
  |    
  |──_service
  |   |
  |   |──bbslist.txt(その鯖の板一覧が入ってます)
  |   |──数字八桁.txt(10分毎のLAが見れます)
  |   |──PV数字八桁.txt(1時間毎のPVが見れます。http://qb5.2ch.net/operate/1104955745/193)
  |   └──IPnum-(ry.txt(規制関連のデータだったと思います。。。)
  |
  |
  |
  └──test
      |──bbs.cgi(レスとスレ立てに使います)
      |──read.cgi(datフォルダのdatをhtmlに整形してクライアントに返します)
      |──reag.html(↑と同じ動作をするjavascriptが含まれたhtmlを返します)
      |──subbbs.cgi
      |──offlaw.cgi
      |──r.i
      |──p.i
      |──headad.txt
      |──putad.txt
      |──bbs-yakin.cgi
      |──flash.txt
      └aho┬gonta_oxy.cgi
        └gonta893.cgi


**鯖リスト [#fe979f22]
2chのボランティアである[[root★氏のサイト:http://mumumu.mu/serverlist.html]]が一番新しく確実です。

もしくは、[[2chの板リスト:http://www.2ch.net/bbsmenu.html]]から。

**スレの読み方 [#o6b1ada6]
read.cgiを叩かずに、datを直読みしましょう。&br;
datは2008年現在、
 名前<>メール欄<>年/月/日(曜) 時:分:秒.下二桁(無い板もある) ID:hogehoge0<>本文
の形で記録されています。&br;
本文内では、<>"がエスケープされて、改行は<br>であらわされています。

HTTPでのリクエストの方法は、
 GET /news4vip/dat/11111111111.dat HTTP/1.0
 Host: yutori.2ch.net
 User-Agent: Monazilla/1.00
 Connection: close
 
こんな感じです。&br;
余裕が有るなら、下の方で書いてある差分取得も実装しましょう!
**bbs.cgiの叩き方 [#adb49020]
[[と~く2ちゃんねるさん:http://age.s22.xrea.com/talk2ch/]]を%%パクr%%今風に改変&抜粋しています。&br;
許可とか取ったほうが良いかな……?

とりあえずHTTPリクエストの例(VIPのhttp://yutori.2ch.net/test/read.cgi/news4vip/1217356258/に、
名前欄はデフォ、目欄はsageでhogehogeと書き込みます)

 POST /test/bbs.cgi HTTP/1.0
 Host: yutori.2ch.net
 Content-length: 95
 Referer: http://yutori.2ch.net/news4vip/
 User-Agent: Monazilla/1.00
 Connection: close
 
 bbs=news4vip&key=1217356258&time=1&submit=書き込む&FROM=&mail=sage&MESSAGE=hogehoge&hana=mogera
 
こんな感じでポストすると…
詳細は、後述の「簡単なまとめ」を見てください。&br;
で、こんな感じでポストすると…
 HTTP/1.1  200 OK
 Date: Wed, 30 Jul 2008  12:25:17 GMT
 Server: Apache/2.0 .59 (Unix) PHP/5 .2.5 mod_ssl/2.0 .59 OpenSSL/0.9. 7e-p1
 Set-Cookie: PON=hogehoge; expires= Friday, 01-Jan-2 010 00:00:00 GMT ; path=/
 Set-Cookie: PON=hogehoge; expires=Friday, 01-Jan-2010 00:00:00 GMT; path=/
 Set-Cookie: HAP=fugafuga; expires=Friday, 01-Jan-2010 00:00:00 GMT; path=/
 Vary: Accept-Encoding
 Content-Length: 1076
 Connection: close
 Conten t-Type: text/html
 以下略

こんな感じのが帰ってきます。&br;
重要なのはここ&br;
>Set-Cookie: PON=hogehoge; expires= Friday, 01-Jan-2 010 00:00:00 GMT ; path=/&br;
PON=の後には自分のホスト名が入っています。&br;

んで、この帰ってきたPON以下を、
 POST /test/bbs.cgi HTTP/1.0
 Host: yutori.2ch.net
 Content-length: 95
 Cookie: PON=hogehoge;HAP=fugafuga
 Referer: http://yutori.2ch.net/news4vip/
 User-Agent: Monazilla/1.00
 Connection: close
 
 bbs=news4vip&key=1217356258&time=1&submit=書き込む&FROM=&mail=sage&MESSAGE=hogehoge&hana=mogera
 
こんな風に組み入れて再度POSTすれば書き込めます。&br;
自分のIPが変わるまではCookieの中身を流用できます。&br;
IPが変わったら再度Set-Cookieヘッダが付いてきます。&br;

Set-Cookie:の内容を単純に全部組み込んでも構いません。↓
 Content-length: 95
 Cookie: PON=hogehoge; expires=Friday, 01-Jan-2010 00:00:00 GMT; path=/
 Cookie: HAP=fugafuga; expires=Friday, 01-Jan-2010 00:00:00 GMT; path=/
 Referer: http://yutori.2ch.net/news4vip/
***簡単にまとめ [#p430350e]
 POST /test/bbs.cgi HTTP/1.0
 Host: 書き込みたい板のある鯖(namidame.2ch.net等)
 Content-length: ポストするデータのサイズ(バイト)
 Referer: 書き込みたい板のURL(http://namidame.2ch.net/news等)
 User-Agent: Monazilla/1.00(ここは慣例)
 Cookie: NAME=名前; MAIL=メール; SPID(PON)=値; expires=有効期限; path=/(NAMEとかMAILに値が入っていると、フォームにデフォで中身が入ってます。)
 Connection: close(Keep-Aliveが有効な鯖とそうでない鯖が混在してます。確か。)
 Connection: close(1回の送受信で切断するという意味)
 (ここは改行)
 bbs=板名&key=スレッド番号(スレが立った瞬間のUNIXTIME)&time=1&submit=書き込む(ここは弄らずに)&FROM=名前(名前欄の内容)&mail=sage(目欄の内容)&MESSAGE=本文(そのまんま) &hana=mogera
 (もう一度改行)

書き忘れてましたが、名前欄の内容、目欄の内容、本文の内容、&br;
そしてsubmit=「書き込む」はちゃんとURLエンコードしてくださいね。
そしてsubmit=「書き込む」はちゃんとURLエンコードしてくださいね。&br;

ConnectionはKeep-Aliveが有効な鯖とそうでない鯖が混在してます。確か。&br;

**鯖にやさしい漢になろう [#m607d19c]
鯖の負荷、転送量を考えたコーディングを行いましょう。&br;
例を挙げますと、&br;
・連続更新の自主規制&br;
・差分取得の実装&br;
・gzip圧縮への対応&br;
等になります。&br;

***連続更新の自主規制 [#j83e6aab]
読んだまんまです。&br;
Janestyle等では、同時にアクセスできるスレッドがデフォルトでは3つまでだったり、&brl
3秒待たないと同じスレッドを更新できないようになっています。&br;

俺しか使わねーから良いじゃんwwwwと思ってる人も、&br;
リロードバーボンが実装されましたので、アクセスしすぎると[[バーボンハウス:http://qb6.2ch.net/_403/]]送りとなります。&br;
***差分取得 [#wc9b2266]
これは、datをリクエストする時、HTTPヘッダに「If-Modified-Since」「range」を付ける事により、&br;
更新が無い時には再受信せず、更新があるときでも前回読み込んだ場所の終わりから受信するという高等テクニックです。&br;
例えば、前回の受信日時が2008/7/30 12:12:12で、&br;
スレッドを3050バイトまで受信したときは、
 If-Modified-Since: Wed, 30 Jul 2008 12:12:12 GMT
 Range: bytes=3050
という二行を足してやればおkです。&br;

この手法を使う際は、
更新があったか?無かったか?あぼんはあったか?というのを判定する必要があります。&br;
方法は色々ありますが、個人的にはRangeヘッダには前回受信したバイトから2を引いた数を入れ、&br;
新しく受信したデータが改行コードから始まっているかどうかを見る方法が好きです。&br;

***gzip圧縮への対応 [#g44b3eae]
datにアクセスするときに、
 Accept-Encoding: gzip
をヘッダに加えるだけです。多分。&br;

情報が古くてよく分からないので、そのうち運用板のログ漁って調べときます。。。


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS