2015/04/22

tweepyライブラリを利用する (フィルターストリームを使う)

前回はユーザーストリームを使ってホームタイムラインのストリーミングをやってみました。
今回は、フィルターストリームを使って、リストに登録されているユーザのストリーミングを行います。

filterメソッドを使うと、指定された条件にマッチしたステータスを取得することが出来ます。

import tweepy

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

class ListStream(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(ListStream, self).__init__()

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

        me = api.me()
        lst = api.lists_all()[0]
        follow = []

        for page in tweepy.Cursor(api.list_members, owner_id=me.id, list_id=lst.id).pages():
            for user in page:
                follow.append(user.id_str)

        stream = tweepy.Stream(auth, ListStream(), secure=True)
        stream.filter(follow=follow)


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


filterメソッドには、パラメータとしてfollower, track, locationのいずれかを指定する必要があります。
ここでは、先頭のユーザリストに登録したユーザのリストをfollowerパラメータに指定してリストのストリーミングを行います。

カーソルを使ってリストに登録されている全てのユーザIDのリストを生成します。(33~35行目)
(リストに登録されているユーザが多いとここでエラーになりますのでご注意を)
生成したリストをfilterメソッドのfollowerパラメータに指定するだけです。

これ以外にもtrackパラメータでキーワード、locationパラメータで緯度経度を矩形範囲で指定しての絞り込みも出来ます。
trackキーワードはOR演算での絞り込みのようです。

ストリームイベントの処理は変わりませんので割愛します。