ページ

2010年11月13日

tweepyでtwitterのstreaming APIを使う


OAuthの問題などのせいで、twitter apiのライブラリとしてtweepyを使っています。以前作った「ありえるたん」は実用的ではないので、もうちょっと自分が欲しいというか、やってみたいことがあったので、そのためにStreaming APIを使ってみました。Streaming APIはtweepyでもサポートされているので、そのまま使うだけです。Stream APIって、名前の通り、streamで処理します。接続を張りっぱなしにして、イベントが起これば勝手にデータが流れてきます。Twitterのインフラはどうなっているんでしょう?すごいですね。

Streaming APIは、
1. listenerのオブジェクトを作る
2. Streamオブジェクトを作る
3. filterメソッドなどで検索させる
4. 1で作ったlistenerオブジェクトにイベントがあがるので、各イベントに対して処理を記述する

とう流れになります。


import sys
import tweepy

class StreamListener(tweepy.StreamListener):
    def on_status(self, status):
        print status.user.screen_name.encode("utf-8") + " : " + status.text.encode("utf-8")

def main(argv):
    user = "my_twitter_id"
    passwd = "my_twiter_password"

    listener = StreamListener()
    stream = tweepy.Stream(user, passwd, listener)
    stream.filter(track=["http"])

if __name__ == "__main__":
    try:
        main(sys.argv)
    except KeyboardInterrupt:
        pass

StreamのListenerはon_dataでデータを受信したときにイベントが上がります。on_statusでtweetがヒットしたときの処理が実行されます。他にどんなイベントがあるかは、忘れました。on_dataは引数で渡ってくるものはjson形式の文字列なので、自分でパースしないといけません。on_statusはStatusオブジェクトが渡されます。。
イベントが来たときに、コールバックで処理を記述するだけなので、簡単ですね。きっと。

StreamのコンストラクタにユーザIDとパスワードとリスナを指定します。で、filterメソッドをコールすればtracで指定した文字列を検索して、ヒットすればコールバックが呼ばれます。このAPIはブロックします。asyncでTrueを渡してやると非同期で処理するみたいです。

まあ、とっても気軽にStream APIを使えるのはすてきです。
でわでわ

0 件のコメント: