LoginSignup
24
27

More than 5 years have passed since last update.

Twitter UserStreamの代用品メモ for Python

Last updated at Posted at 2018-06-26

はじめに

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

参考

24
27
0

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
  3. You can use dark theme
What you can do with signing up
24
27