はじめに
わたしは趣味で秒速でレスを返す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']
のように条件をつけてフォロイー以外は除外するようにしました。