[monazilla] **********.dat〜スレッドデータを読み込む
スレッドのデータは,**********.datの名前のファイルとなっている.
http://***.2ch.net/***/dat/**********.dat
上記のURLでアクセスできる.このアクセス時もユーザエージェントは,"Monazilla/1.00 (hoge/0.00)"にする.でないと人大杉が返ってくる.
datファイルの中身は,以下のような感じになる.
名無し<>sage<>2008/04/06(日) 01:27:58 ID:OQIMzjRu0<> iPod touchから書き込みテスト <> 名無し<>sage<>2008/04/06(日) 01:34:51 ID:OQIMzjRu0<> iPod touchから書き込みテスト <> 名無し<>sage<>2008/04/06(日) 01:35:15 ID:OQIMzjRu0<> iPod touchから書き込みテスト <> 名称未設定<>sage<>2008/04/06(日) 01:35:40 ID:OQIMzjRu0<> すいません,スレ汚しでした.
もう終了です. <>
つまり,ユーザ名<>メールアドレス<>日時+ID<>本文<>+改行の連続となる.
1行1行がひとつひとつのレスに当たる.
次に重要なのがダウンロードの仕方である.2chはアクセスが多いので,なるべく転送量を減らそうと,差分取得が奨励されている.初回のダウンロードは,gzip形式で圧縮してデータを転送する.たとえば,以下のようなHTTPヘッダでダウンロードする.
Cache-Control: no-cache Host: pc11.2ch.net Pragma: no-cache Accept-Language: ja Accept-Encoding: gzip Connection: keep-alive Accept: text/plain
次に,初回のダウンロードして得られたデータ自体のバイト数とダウンロード日時を保存しておく.ダウンロード日時は返ってくるHTTPレスポンスのLast-Modifiedを使うと便利.
(このときHTTPレスポンスで返ってくるバイト数は当たり前だが圧縮したデータ容量になるので,次回の差分データ取得時の既得データ数として使えない.)
たとえば,以下のようなHTTPヘッダで差分データを取得する.
If-Modified-Since: Fri, 21 Mar 2008 08:04:16 GMT Host: pc11.2ch.net Pragma: no-cache Accept-Language: ja Accept-Encoding: identity Range: bytes=71481- Connection: keep-alive Accept: text/plain
Accept-Encoding: identityをセットしておく.そうしておかないと,gzip形式でバイト数を指定してしまうので,ちゃんと差分取得できない.
If-Modified-Since: Fri, 21 Mar 2008 08:04:16 GMTは,前回ダウンロードの日時をセットする.
こうすると,その日時からの差分を指定したバイト数からデータを取得できるのである.
(私は,このAccept-Encoding: identityのセットにハマった.)
こんなもんですか.