2009/07/15

Pythonistaのための2chライブラリ"twopy"


"Beautiful Kuwait 2" by creativesam

概要

さて、実は以前からちょっと2chの文章を利用して、いろいろ弄くることができないかなぁとは思っていたんですが、残念な事に2ch用のpythonライブラリなんてマニアックなものは作っている人は誰もいない。
それじゃあ自分でなんとかしようの精神で作ってみようと。正直使う人が居るのかどうかは甚だ疑問なライブラリですが、損するわけじゃないので一応公開してみます。

というわけで、Pythonistaのための2chライブラリ"twopy"をリリースしました。
現在のところ単純なスレッド一覧の取得、スレッド上のコメント取得、コメント書き込みや新規スレッド機能に対応しておりますが、まだ完全に動作確認しているわけではないので使用は自己責任で。ちなみにライセンスはMITライセンスなんで、比較的自由に扱えると思います。改良はこれから始まる期末テストに飽きたらやると思います。

インストール方法

インストールに必要な環境は以下の通りです。
Python 2.5 or higher
2.6.2での環境で動作を確認。外部ライブラリに依存していないので、もしかしたらそれより前のヴァージョンでも動作するかもしれません。

インストール方法はCodeReposに上げておきますので、

$ svn checkout http://svn.coderepos.org/share/lang/python/twopy/trunk

なりなんなりでチェックアウトしてください。

簡単な使い方

スレッド一覧の取得
import twopy
b = twopy.Board("http://takeshima.2ch.net/news4vip/")
b.retrieve()

スレッドごとのタイトル、レス数、速度(res/h)を取得することができます。
for t in b:
print u"%s (%i) %.4f" % (t.title, t.res, t.velocity)

配列のように呼び出すことも可能です。
print b[0].title
print b[0].since


スレッドの内容の取得
t = b[0]
t.retrieve()

で一番上にあるスレッドの内容を取得します。
t = twopy.Thread(b, "1247375844.dat")
t = twopy.Thread.initWithURL("http://takeshima.2ch.net/test/read.cgi/news4vip/1247375844/")

として、datファイルあるいはURLから直接初期化することも可能です。

コメントを出力するには以下のようにループさせます。また、特定のコメントのみを取り出すこともできます。
for c in t: print c.render()
print t[1].render()

ただし、その場合の引数は実際のレス番号を指定する必要があります(0から始まるわけではない)。

コメントの抽出
特定のコメントのURLやレスポンスを抜き出すことができます。
for c in t: print c.extractResponses(returnType="comment")
for c in t: print c.extractUrls()

追記: 10/07/22
returnType引数は廃止され、メソッドとして分割されることになりました。
for c in t:
    print c.extractResponses()
    print c.extractResponsesAsInteger()
    print c.extractResponsesAsComment()

コメントの書き込み
特定のスレッドに対して、コメントを書き込むことができます。

t.post(name=u"", mailaddr=u"", message=u"")

ただし、2ch側の仕様により必ずしも書き込まれるとは限らず、確認が求められる場合がありますので、実際には以下のようにします。
r = t.post(name=u"", mailaddr=u"", message=u"")
if r[0] == twopy.STATUS_COOKIE:
    t.post(name=u"", mailaddr=u"", message=u"", hidden=r[2])

すべての確認作業を自動的に行うメソッドも存在します。

t.autopost(name=u"", mailaddr=u"", message=u"")

ただし、上2つのコードは2ch側の確認をユーザに見せることなく書き込みを行っていますので、実際にはユーザーに文章を見せてから、同意を行なわせる必要があるでしょう。

他にもスレッド作成機能などのいろいろ細々したのもありますが、それはソースコード見ればだいたい理解できると思います。行数そんな多くないですし。
もし正常に動かないなどのバグがありましたらご連絡お願いします。暇があれば対処したいと思います。それでは。

0 件のコメント: