Twitter APIのデフォルトがv2となった
2021年11月からデフォルトがv2となりました。
それまでは、v1.1がデフォルトでしたが、現在はデフォルトではv1.1はアクティベートされていません。
そのかわり、v2は以前のv1.1のような英語で申請をする必要はなくなっていて簡単に使うことが出来ます(Essential Level)。
一方、現在でもv1.1は残されていて、特に廃止の予定は告知されていませんが、新規にAPIアカウントを作成した場合v1.1のアクティベートにはElevated Levelへのアップグレードが必要です。
Elevated Levelへのアップグレードには以前のv1.1のときのような英語での申請が必要となっています。
従来のAPI1.1を使いたい場合は
とのことです。
https://twittercommunity.com/t/how-to-get-twitter-api-v1-1-instead-of-v2/176450
アクセスレベルの違いの一覧を見るとそのように書かれているようです。
developer.twitter.com
V1.1を使うためのElevated へのアップグレード申請は、以下にまとまっています。
zenn.dev
承認までは少しかかるようです。
Python3でAPI v2を試す
v2の公式のサンプルコードは以下にあります。
こちらでは JavaScript、Ruby、Python3のサンプルが一通りあります。
github.com
ここでは、API_KEY
API_KEY_SECRET
ACCESS_TOKEN
ACCESS_TOKEN_SECRET
を取得済みとして試します。
Bearer_Token
というものもあります。
こちらは、Twitter にLoginしなくても取得できるレベルのもの、例えば「検索結果」や「特定のUserのTweet」などが取れますが、上記のACCESS_TOKEN_SECRET
等でも取得が可能です。
APIの構成は、
①認証情報(ACCESS_TOKEN_SECRET
等)をまとめてOAuth1Session
を作成する
②https://api.twitter.com/xxx 等のエンドポイントへ上記①とpayload
or query
をPOSTする
③Responseを受信する
④Responseを加工する
のようになります。
Create Tweet(Tweet Post)ではResponseは「成功」or「失敗」等でSearchではこれにプラスして「検索結果」が得られます。
認証情報の作成にはPython3ではimport auth
で行い、from requests_oauthlib import OAuth1Session
でPOSTします。
JSON形式でResponseが返ってくるので、必要に応じてimport json
で加工します。
github.com
Create Tweetはこのサンプルのようにありますが、こちらでは# Get authorization
でPIN CODEを取得していますが、ACCESS_TOKEN_SECRET
等を使うように変更しました。
github.com
自分しか使わない場合はこれでよいでしょう。
認証情報は以下のようにまとめておきます。
github.com
変更したCreateTweet.py
ではdef main()
で以下のような流れで処理を行います。
# textにTweet内容を設定 payload = {"text": text} # エンドポイントURLを指定 request_token_url = xxx # 認証情報オブジェクトを作成 oauth = auth.define_client() # リクエストする response = oauth.post( "https://api.twitter.com/2/tweets", json=payload, ) # リクエストの成功or失敗を確認 if response.status_code != 201: # レスポンスのJSONを整形して出力 json_response = response.json() print(json.dumps(json_response, indent=4, sort_keys=True))
これはWeb APIの使い方の一般的な流れといっていいかと思います。
この他、検索等も同様になります。
Create TweetではPOSTまでが主ですが、検索ではレスポンスの処理が主となります。
該当するTweetのTweet ID
を取得してReTweetやLike等を行うことが出来ます。
def main(keyword): query_params = {'query': keyword} json_response = connect_to_endpoint(search_url, query_params) #print(json.dumps(json_response, indent=4, sort_keys=True)) for d in json_response["data"]: print("【Tweet ID】", d["id"]) print(d["text"]) print("---------------------------------------------------")
Create TweetとSearchが使えると、ReTweetやLike、UserTimeLineなども応用で使うことが出来ると思います。