はじめに
最近、twitterのクローリングをお願いされ、tweepyを使用することにしましたが、色々タイミングが悪かったようなので同様にお困りの方は、バージョンを揃えて以下のとおり試してみてください。
背景
そこそこ新しい環境でtweepyを使用し、ストリーミングを受信したい。単にそれだけです。笑
環境
- MacBook Air (M1, 2020) macOS Monterey
- python: 3.7.9
- tweepy: 4.10.0
- forego: 20180216151118
方法
公式ページ(tweepy:streaming)にも記載があるとおり、以下の2とおりのやり方があると記載されています。
- Stream allows filtering and sampling of realtime Tweets using Twitter API v1.1.
- StreamingClient allows filtering and sampling of realtime Tweets using Twitter API v2.
しかし、参考に記載がありますように、1つ目の機能(TWitter API v1.1)については22/4/29以降にアプリを作成した場合には使用することはできないため、2つ目のTwitter API v2を使用する必要があるとのこと(なお、それ以外の多くの機能は、今までとおりTwitter API v1.1でも使用できます。)。
結果
Twitter API v1.1 を使用
Twitter API v1.1(ステータス読み出し)
import os
import tweepy
TWITTER_API_KEY = os.environ['TWITTER_API_KEY']
TWITTER_API_SECRET_KEY = os.environ['TWITTER_API_SECRET_KEY']
TWITTER_ACCESS_TOKEN = os.environ['TWITTER_ACCESS_TOKEN']
TWITTER_ACCESS_TOKEN_SECRET = os.environ['TWITTER_ACCESS_TOKEN_SECRET']
TWITTER_BEARER_TOKEN = os.environ['TWITTER_BEARER_TOKEN']
class IDPrinter(tweepy.Stream):
def on_status(self, status):
print(status.id)
printer = IDPrinter(
TWITTER_API_KEY, TWITTER_API_SECRET_KEY,
TWITTER_ACCESS_TOKEN, TWITTER_ACCESS_TOKEN_SECRET
)
printer.sample()
Twitter API v1.1(結果)
$ forego run python twitter_streaming_api_with_tweepy.py
Stream encountered HTTP error: 403
Stream encountered HTTP error: 403
Twitter API v2 を使用
Twitter API v2(テキスト読み出し)
import os
import tweepy
TWITTER_API_KEY = os.environ['TWITTER_API_KEY']
TWITTER_API_SECRET_KEY = os.environ['TWITTER_API_SECRET_KEY']
TWITTER_ACCESS_TOKEN = os.environ['TWITTER_ACCESS_TOKEN']
TWITTER_ACCESS_TOKEN_SECRET = os.environ['TWITTER_ACCESS_TOKEN_SECRET']
TWITTER_BEARER_TOKEN = os.environ['TWITTER_BEARER_TOKEN']
class IDPrinter(tweepy.StreamingClient):
def on_tweet(self, tweet):
print(tweet.text)
printer = IDPrinter(TWITTER_BEARER_TOKEN)
printer.sample()
Twitter API v2(結果)
$ forego run python twitter_streaming_api_with_tweepy.py
省略(成功)