0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Twitter API returned a 403 (Forbidden), You currently have Essential access which includes access to Twitter API v2 endpoints only. エラーとAPI v2作成について

Last updated at Posted at 2022-09-07

はじめに

この記事では、表題のエラーが出る問題について説明および代替えのコードを記載していく。

目次

はじめに
目次
メイン

メイン

なぜエラーが出るのか

原因として、実行したコードが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を確認してどこかに保存しておく。再度確認はできないので、忘れると再作成される。
※このキーは決して漏洩しないように。

image.png

保存したキーで、コードを作成していく。
今回はリツイートを除いた、「タピオカ」というツイートを10件ほど取得する。
ツイートの取得には上限があり、自動化で取得する予定なら気を付けなければならないだろう。
以下が全体のコード。

tweepy.py
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の記事が少なかったことや、特定のアカウントに絞らずにツイートを取得するやり方、今回のエラーコードの記事、
すべての要素を含むの記事がなかったので書いてみた。以上。

0
1
1

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?