よくわからないエンジニア

よく分からないエンジニアの日々の記録

よくわからないエンジニア

UserStream APIの代替案(statuses/filter.json)

さようならUserStream API。近々完全に使えなくなるようだ。
(8月23日に完全停止?)
当サイトでも過去にバファローズポンタのつぶやきを監視するものを作ったので、近々こいつが動かなくなります。

www.unknownengineer.net

そんなわけで回避方法を模索します。

目次

代替案その1(Account Activity API)

公式がオススメしている代替案はこちらのAccount Activity APIです。

Account Activity APIを全ての開発者の皆さんに公開

こちらに関してはUserStream APIからの乗り換え方法も公式がアナウンスしています。

Getting started with webhooks — Twitter Developers

さらっと読んで分かる通り、webhookを受信できるWebアプリケーションを用意する必要がありますね。えぇ、面倒です。
急場を凌ぐことだけが必要なので、別の案を検討します。

代替案その2(statuses/filter.json)

比較的楽に移行できそうなのがこちらのfilter.jsonでした。

POST statuses/filter — Twitter Developers

早速ですが以下を参考に擬似UserStreamを作ってみます。

qiita.com
cucmberium.hatenablog.com

import twitter

SCREEN_NAME = '******'

# OAuth
ACCESS_TOKEN_KEY = '******'
ACCESS_TOKEN_SECRET = '*****'
CONSUMER_KEY = '******'
CONSUMER_SECRET = '*******'

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']:
        if "bs_ponta" == s1tr(tweet['user']['screen_name']):
        print(tweet['user']['screen_name'], tweet['text'])

ほぼ参考にしたリンクと同じですが、if "bs_ponta" == s1tr(tweet['user']['screen_name']): の箇所でバファローズポンタのつぶやきのみに限定してます。
お遊びで使っている分際なので、あまり文句は言いませんが、
Twitter、どんどん不便になっていくな…