ubuntu & pythonでtwitter
gwibberによる収集もいいのですが、BOTによる自動収集で規模を増やしたくなりました。そこで今更ですがpythonからtwitter APIを使うことにします。
結論
PPAからpython-tweepy引っ張ってくることにしました。
経緯
まず疑問点が2つありました。
- UbuntuってPythonで動いている部分が結構あるんだけどapt使わずにsudo easy_installとかしていいの?
- 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. python用twitterモジュールの選択
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パーサはモジュール使うものの、後は自力なようです。