ubuntu & pythonでtwitter

gwibberによる収集もいいのですが、BOTによる自動収集で規模を増やしたくなりました。そこで今更ですがpythonからtwitter APIを使うことにします。

本日のお題

ライブラリ(twitter APIpythonラッパーモジュール)何にしましょう?

結論

PPAからpython-tweepy引っ張ってくることにしました。

経緯

まず疑問点が2つありました。

  1. UbuntuってPythonで動いている部分が結構あるんだけどapt使わずにsudo easy_installとかしていいの?
  2. python用のtwitterモジュールっていくつもあるけどどれがいいの?

以下ではこれらの疑問に対する答えを探っています。

1. Ubuntuパッケージとの競合

Ubuntuでは結構Pythonを使っているので心配です。モジュールの追加に関して調べてみたところ

"Why you should not use easy_install carelessly on Debian"
http://workaround.org/easy-install-debian

という2009年12月のブログを見つけました。英語なので概略だけ書いておくと、

  • easy_install(setuptool)は悪くないけどアンインストールもできないし汚い
  • easy_install(setuptool)とaptで二重にインストールが行われるかもしれない(どちらが使われるかは設定次第)
  • debianのaptだとバージョンが古くてもセキュリティパッチが提供され続ける
  • 新しいものが欲しければdebian unstableを使えばいい
  • 日常使用にはオススメしないがvirtualenvで環境を切り替えられるよ

とのこと。競合までするのか分かりませんが、互いに互いを意識してなさそうなので重ならないようにしないといけない気がします。

なおvirtualenv自体の使い方などについては、同じ時期にこちらにも

"2009年版Python開発環境を整えよう"
http://labs.unoh.net/2009/12/2009python.html

書かれていました。これらの情報、玄人的には当たり前なのかもしれませんが、素人的には助かります。

以上の情報から、Ubuntuはunstable相当でしょうし、個人的には

基本はaptで、公式リポジトリになかったり欲しいのより古ければPPAで、それでもなければvirtualenvかeasy_installという感じ

でいいのかな、と考えています。

2. pythontwitterモジュールの選択

twitter公式にあるだけでも現在

モジュール 作者 説明
oauth-python-twitter2 Konpaku Kogasa Combines python-twitter and oauth-python-twitter to create an evolved OAuth Pokemon.
python-twitter DeWitt Clinton This library provides a pure Python interface for the Twitter API.
python-twyt Andrew Price BSD licensed Twitter API interface library and command line client.
twitty-twister Dustin Sallings A Twisted interface to Twitter.
twython Ryan McGrath REST and Search library inspired by python-twitter.
Tweepy Josh Roesslein Supports OAuth, Search API, Streaming API.

これだけあるようです。ググったりするとtweepyがいいようですが、python-twitterも名前がそのものすぎて気になります。python-twitterは10.10付属のバージョンだとOAuthが使えずにダメなのですが、PPAで新しいのを持ってくるとOAuthは使えるようになります。対してtweepyはUbuntu公式リポジトリにはありません。これは迷います。

さて、twitterへのアクセスは

"Rate Limiting"
http://dev.twitter.com/pages/rate-limiting#rest

にあるように、認証つきのものはユーザーごとに350リクエスト/h、認証なしのものはIPごとに150リクエスト/hとなっており、制限を超えてしまうとエラーになってしまいます。例えば頻繁に更新したくて、制限ギリギリまでリクエストを出すように設計すると、同じユーザーで別のアプリからいじったときに350/h制限に引っかかったりしてしまい、面倒だったりします。

しかし、Streaming APIを使うとこの制限を受けません。tweepyはこの紹介文中唯一Streaming API対応をうたっています*1。というわけで今回は

tweepyが良いかな

という感じです。

3. 総合的に

tweepyはUbuntu公式リポジトリには用意されていませんでしたが、PPAにはあるようです。

"python-tweepy"
https://launchpad.net/~chris-lea/+archive/python-tweepy

というわけでtweepyに決定です。11.04では公式リポジトリに入ってほしいな。

おまけ

gwibberはどうしているかというと...OAuthとJSONパーサはモジュール使うものの、後は自力なようです。

*1:ただAPIドキュメントは更新されてないのかStreamなんてどこにも書いていません(githubにはA python library for the Twitter API. OAuth, complete coverage, streaming APIと書いてあって、サンプルもついてましたが