はじめに
この記事では、表題のエラーが出る問題について説明および代替えのコードを記載していく。
目次
メイン
なぜエラーが出るのか
原因として、実行したコードがTwitter API v2ではなく、おそらくTwitter API v1のほうを使用したためだと考えられる。
2021年11月に仕様が変わったようで、
初期段階のアクセスレベルが「Essential」になり、使用できるのはTwitter API v2のみとなったため過去のコードを実行するとエラーが起こる。
仕様変更前に登録したユーザーは、v1にもアクセスできる「Elevated」のアクセスレベルが付与されているとのこと。(普通免許改正の準普通車のようだ。)
なので、ユーザーによって実行できるコードの可不可が発生しうるのだろう。
解決策
解決策はv2を利用するコードを使用するだけなのだが、サンプルコードが少なくYouTube(https://youtu.be/GqzbvoAsSrg) で紹介されていたものを参考に記載する。
このコード良いところは、Twitter上の特定のアカウントに絞られずに全ツイートから取得するところだ。
まず、tweepyをpipでインストールする。
$ pip install tweepy
次に、Twitter Portal(https://developer.twitter.com/en/portal/dashboard) にアクセスする。
※事前にTwitter Developer(https://developer.twitter.com/en) でTwitterアカウントでログインとアカウント認証を行っておくこと。Twitter APIを利用するには必須。
Projects&Appsからappを作成しする。
Keys and tokensタブを選択し、bearer_token・consumer_key・consumer_secret・access_token・access_token_secretを確認してどこかに保存しておく。再度確認はできないので、忘れると再作成される。
※このキーは決して漏洩しないように。
保存したキーで、コードを作成していく。
今回はリツイートを除いた、「タピオカ」というツイートを10件ほど取得する。
ツイートの取得には上限があり、自動化で取得する予定なら気を付けなければならないだろう。
以下が全体のコード。
import tweepy
import json
client = tweepy.Client()
# クライアント情報を入力(先ほど保存したキーを入力)
def getClient():
client = tweepy.Client(bearer_token="XXX",
consumer_key="XXX",
consumer_secret="XXX",
access_token="XXX",
access_token_secret="XXX")
return client
# 実際のツイートの取得メソッド
def search(query):
client = getClient()
#queryが検索条件で、max_resultsで取得件数
tweets = client.search_recent_tweets(query=query,max_results = 10)
data = tweets.data
results = []
if not data is None and len(data) > 0:
for tweet in data:
obj = {}
obj['id'] = tweet.id
obj['text'] = tweet.text
results.append(obj)
else:
return []
return results
# タピオカとリツイートではないツイートを条件にツイートを取得
tweets = search("タピオカ -is:retweet")
# 取得したツイートを表示
if len(tweets) > 0:
for x in tweets:
print(x)
else:
print('no maching')
最後に
Twitter APIの記事が少なかったことや、特定のアカウントに絞らずにツイートを取得するやり方、今回のエラーコードの記事、
すべての要素を含むの記事がなかったので書いてみた。以上。