search
LoginSignup
27

More than 3 years have passed since last update.

posted at

updated at

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'] のように条件をつけてフォロイー以外は除外するようにしました。

参考

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
27