プログラミング素人のはてなブログ

プログラミングも電気回路も専門外の技術屋の末端が勉強したことや作品をアウトプットするブログ。コードに間違いなど見つけられたら、気軽にコメントください。 C#、Python3、ラズパイなど。

Twitter API V2を試す

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を使いたい場合は

To use the old v1.1 API, you need to get Elevated Access

とのことです。

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の公式のサンプルコードは以下にあります。
こちらでは JavaScriptRuby、Python3のサンプルが一通りあります。
github.com

ここでは、API_KEYAPI_KEY_SECRETACCESS_TOKENACCESS_TOKEN_SECRETを取得済みとして試します。
Bearer_Tokenというものもあります。
こちらは、Twitter にLoginしなくても取得できるレベルのもの、例えば「検索結果」や「特定のUserのTweet」などが取れますが、上記のACCESS_TOKEN_SECRET等でも取得が可能です。

APIの構成は、
①認証情報(ACCESS_TOKEN_SECRET等)をまとめてOAuth1Sessionを作成する
https://api.twitter.com/xxx 等のエンドポイントへ上記①とpayloador 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までが主ですが、検索ではレスポンスの処理が主となります。
該当するTweetTweet 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("---------------------------------------------------")

github.com

Create TweetとSearchが使えると、ReTweetやLike、UserTimeLineなども応用で使うことが出来ると思います。

まとめ

Twitter APIのデフォルトがv2になったので、v2 APIを使ってみました。
使ってみるとWeb APIの標準的な使い方が分かると思います。
また、Python3はライブラリが手厚く簡単に使うことが出来ます。
しばらくはv1.1が廃止されるということはないと思いますが、徐々に置き換えの検討も必要かもしれません。
通常は、このように直接エンドポイントを叩くというよりはライブラリを使うと思いますが、ライブラリがないAPIを使う方法として覚えておきたいと思います。
github.com