Python
Twitter
api

Twitter UserStreamの代用品メモ for Python

はじめに

わたしは趣味で秒速でレスを返すTwitter botを作っているのですが、TwitterがUserStream APIを廃止するようなので困りました。他のタイムライン取得APIであるstatuses/home_timelineでは現時点 (2018/06/26) では1分に1回しか許可されていないからです。そこで statuses/filter.json という別のストリーミングAPIを利用したUserStreamの代替となるコードを書きました。こちらのAPIはdepricatedにはならないそうです。

※ただしstatuses/filter.jsonは、非公開アカウント (鍵垢) のツイートは受信できないので注意! 非公開アカウントのツイートも取得したい場合はstatuses/home_timeline APIと組み合わせるなりしましょう。

UserStream代用品コード

Requirement

pip install twitter

python-twitterではないので注意!

コード

import twitter

SCREEN_NAME = 'write here'

# OAuth
ACCESS_TOKEN_KEY = 'write here'
ACCESS_TOKEN_SECRET = 'write here'
CONSUMER_KEY = 'write here'
CONSUMER_SECRET = 'write here'

oauth = twitter.OAuth(ACCESS_TOKEN_KEY,
                      ACCESS_TOKEN_SECRET,
                      CONSUMER_KEY,
                      CONSUMER_SECRET)

# Retrieve friends IDs
twitter_api = twitter.Twitter(auth=oauth)
friends = twitter_api.friends.ids(screen_name=SCREEN_NAME, count=5000)
friends_ids = ','.join(map(str, friends['ids']))

stream = twitter.TwitterStream(auth=oauth, secure=True)
for tweet in stream.statuses.filter(follow=friends_ids):
    if 'user' in tweet and tweet['user']['id'] in friends['ids']:
        print(tweet['user']['screen_name'], tweet['text'])

※そのままでは自分のフォロイーでないユーザーがフォロイーに対して投げたリプライやRTも受信してしまうので tweet['user']['id'] in friends['ids'] のように条件をつけてフォロイー以外は除外するようにしました。

参考