2015/04/21

tweepyライブラリを利用する (ユーザストリームを使う)

HTTP接続を維持したままステータスなどのオブジェクトを逐次配信されるストリーミングAPIがありますが、tweepyでも利用することが出来ます。

ストリーミングAPIは大きく分けて3種類あります。

  • Public Streams
  • User Streams
  • Site Streams

今回はユーザストリームを使ってみます。
tweepyではストリームクラス StreamListener を継承したクラスで配信されたステータスを扱います。

import tweepy

CONSUMER_KEY    = '(コンシューマキー)'
CONSUMER_SECRET = '(コンシューマシークレット)'
ACCESSS_TOKEN   = '(アクセストークン)'
ACCESS_SECRET   = '(アクセストークン シークレット)'

class HomeStream(tweepy.streaming.StreamListener):

    def on_status(self, status):
        print('-------------------------------------------------------------------')
        print('name:' + status.author.name)
        print(status.text)

    def on_error(self, status_code):
        print('error:' + str(status_code))
        if status_code == 420:
            return False

    def __init__(self):
        super(HomeStream, self).__init__()

if __name__ == '__main__':
    try:
        auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
        auth.set_access_token(ACCESSS_TOKEN, ACCESS_SECRET)

        stream = tweepy.Stream(auth, HomeStream(), secure=True)
        stream.userstream()

    except tweepy.TweepError as e:
        print(e.reason)


StreamListenerを継承したHomeStreamを作成し、userstreamメソッドを実行することでストリームAPIを使用することが出来ます。

配信されたステータスはon_statusメソッドで処理します。
他にもオーバライドできるメソッドがありますが、on_connect以外のメソッドでFalseを返すことで、ストリームを終了することが出来ます。

サンプルでは、on_errorのみ実装していますが、パラメータstatus_codeが420を返す場合、再接続アルゴリズムが間違っている場合がありますので、Falseでストリーミングを終了するようにしたほうがいいでしょうね。