乱立するRubyの2ちゃんねる関連ライブラリの比較

  • 17
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

いずれのライブラリも書き込み機能はなく、2015年3月から導入された2ch.netのAPIにも対応していない。

特記がない限り以下の機能を持つ。

  • 掲示板の一覧を取得(http://menu.2ch.net/bbsmenu.htmlをパース)
  • スレッド一覧を取得(subject.txtをパース)
  • スレッドのレスを取得(DATファイルをパース)
    • :warning: 2ch.netでは2015年3月13日からdatへのアクセスができなくなった。
  • gzipによるレスポンスの圧縮に対応。

x2ch

  • rubygems.org
  • xmisao/x2ch - GitHub
  • バージョン: 0.9.3 (2015/03/26)
  • 自動テスト: なし
  • サポートしている掲示板: 2ちゃんねる(デフォルトで2ch.scを参照), まちBBS
  • ID、BE、書き込み日時: DATの3列目のフィールドをそのまま使用する(X2CH::Post#metadata #=> "2014/01/11(土) 10:10:00.00 ID:xxxxxxxxx")ので、これらのデータを使いたい場合には自前でパースする必要がある。

DATファイルについてはRangeヘッダーによる差分取得やIf-Modified-Sinceヘッダーなども利用できる。

bbs2ch

  • rubygems.org
  • fukayatsu/bbs2ch - GitHub
  • バージョン: 0.1.1 (2013/09/12)
  • 自動テスト: あり(rspec)
  • サポートしている掲示板: 2ちゃんねる(デフォルトで2ch.netを参照)
  • ID、BE、書き込み日時: それぞれパースを行う(書き込み日時のパースにはTime.parseを使用)。

DAT、subject.txt、bbsmenu.htmlについては、ダウンロードとパースが一つのメソッド内でまとめて実行されるので、ローカルに置いているデータをパースする用途には不向き。

Manbo-/bot2ch

  • rubygems.org - 登録されていない。
  • Manbo-/bot2ch - GitHub
  • バージョン: 0.9.1 (2014/01/13)
  • 自動テスト: あり(rspec)
  • サポートしている掲示板: 2ちゃんねる(デフォルトで2ch.netを参照), したらば
  • ID、BE、書き込み日時: ID、書き込み日時のパースを行う(書き込み日時のパースはDATの3列目のフィールドから数字をスキャンしてTime.localに渡すという手法)。BE IDは取得できない。

テスト周りが充実しており、Guard::RSpecによってファイルの更新時に自動でテストを走らせることができる。VCRによってレスポンスをキャッシュしているのでサーバーの負荷を気にする必要はない。

指定したスレッド内の画像をまとめてダウンロードするコマンドラインツールManbo-/bot2ch-downloaderが公開されている。

インストール

gemになっているのでBundlerを使うかrake installでインストールすることで利用できる。

文字コードの変換のためManbo-/faraday-response-encoderを使用しているが、rubygems.orgに登録されていないので手動でインストールする必要がある。

ruby2ch

  • rubygems.org
  • onodes/ruby2ch - GitHub
  • バージョン: 0.1.2 (2011/12/13)
  • 自動テスト: なし
  • サポートしている掲示板: 2ちゃんねる(デフォルトで2ch.netを参照)

rubygems.orgに記載されている累計ダウンロード数はもっとも多いが、現状では正常に動作しない箇所が多いため、素人にはお薦めできない。

Ruby2ch::Board.new(url)でスレッド一覧を取得できる。ただし、ニュース速報板以外のスレッド一覧は正常に取得できない。

Ruby2ch::Dat.new(url, title)で、DATファイルをダウンロードしてパースした結果が取得できる。DATはbg20サーバーから取得する。パース用の正規表現がマッチせず、パースに失敗する場合がある。Ruby2ch::Board#newで利用されることを意図して作られており、titleにはsubback.htmlのスレッドへのリンクのラベルを渡すようになっている。ただし、ラベルからスレッドのタイトルを取り出す正規表現は現在の形式に対応していない。Ruby2ch::Dat#impetusでスレッドの勢いを取得できる。

Ruby2ch::Thre.new(url)でスレッドを読み込むと、MechanizeによってスレッドのHTMLを取得し、パースを行う。レスの本文は@resという配列に入れられ、投稿者名は@nameという配列に入れられる、といった作りになっている。Ruby2ch::Thre#impetusでスレッドの勢いを取得できる。


This document is licensed under CC0.