読者です 読者をやめる 読者になる 読者になる

2ch を JSON に変換するサーバ作った

2ch のデータをパースして JSON に変換する API サーバ 2son を作った。 http://twoson.herokuapp.com/

Heroku 便利

できること

  • 以下のデータを JSON に変換できる
    • 板一覧 (bbstable)
    • スレッド一覧 (subject)
    • スレッド (thread)
      • dat 落ちスレッドにも対応
  • コールバック関数を指定すれば、JSONP を取得することもできる。

仕様

トップページで API の呼び方、返ってきた JSON の書式を説明してある。 http://twoson.herokuapp.com/

いろいろ

Ruby 1.9.3 で開発。Ruby の勉強がてら組んでみた。

データ取得

ブラウザで表示する形式、つまり read.cgi を通してスレッドを取得するのはサーバーに負荷がかかるし、またパースするもの面倒やからよろしくない。したがって、データが欲しい時場合スレッド一覧は subject.txt、スレッドは dat ファイルを直接読みに行くのが推奨される。これらのファイルは1行1(スレッド | レス)で、デリミタは <> になっとってパースもしやすい。このへんは開発資料で詳しく解説してある。

また、通信量低減のためにレスポンスは gzip でもらう。リクエストヘッダに

"Accept-Encoding": "gzip"

を付与する。もちろんもらった後は解凍処理が必要。

あと、データのエンコーディングは Shift-JIS やから nkfUTF-8 に変えると良い。必要なら。

Flash "UNIX" の元ネタになった閉鎖騒動で gzip 圧縮が実装されたらしい

dat 落ちスレッドの dat 取得

みみずん検索からダウンロードするようにしてある。下の URL で dat 落ちスレッドの dat も取得できる。

http://mimizun.com/log/2ch/#{板名}/#{スレッド番号}.dat 

dat 落ちスレッドかどうかは、まず通常の dat を取りに行ってステータスコード 200 が返ってくるかどうかで判定しとる。dat 落ちなら 203 が返される(はず)。

Todo

  • テストをかく
  • キャッシュ実装

ソースコード

github に上げてある。 dtan4/2son

とりあえず Rails で組んだけど、MVC の C しかまともに使ってないからもっと軽量なフレームワークで組めるはず。組むべき。

参考