LoginSignup
1
0

More than 1 year has passed since last update.

tweepyのStreamListenerやStreamが色々使えない問題

Last updated at Posted at 2022-06-06

はじめに

最近、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 
省略(成功)

参考

1
0
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
1
0