Python Twitter連携 2021年

2021年1月現在、PythonでTwitterのデータにアクセスする、Twitter連携の方法を説明します。


Twitter側のアプリの作成

まず、Twitter側で連携用のアプリを作成します。連携対象のTwitterアカウントでログインしたら、こちら (Twitter developer apps) にアクセスしてください。

このサイトのCreate an appボタンをクリックします。

どのような用途でアプリを使うのか聞かれるので、今回は AcademicStudent を選択しました。

対象のアカウントであるか確認する画面が出ます。もしも違うアカウントでアプリを作りたければ、Switch @username から切り替えてください。

国と名前を入力したらNextで次の画面へ移動します。

どのような用途でAPIを使うか、記載する欄があります。200文字上でできる限り詳しく書きます。今回はPythonの勉強用なので、その旨を書きました。

さらにTwitterデータの使い方を聞かれるので、YesかNoを選択します。今回は全てNoを選びました。Yesを選ぶ場合は、詳細な内容を入力する必要があります。

確認画面が出てくるので、入力項目を確認し問題がなければ Looks good! で次の画面に移ります。

最後にTwitter APIに関するTwitter開発者ポリシー・開発者契約の内容を確認し、問題なければ確認済みチェックをいれて Submit Application を押して、申請を出します。

申請を出すと、Twitterのアカウントに紐づくE-mailに確認メールが届くので、メール内の Confirm your email を押します。

Twitterのアプリ名を入力する画面が選ばれるので、任意のアプリ名を入力し、Get keys ボタンを押します。

すると、APIを使うための、API key, API secret key, Bearer token が表示されます。これをひかえておきます。

  • API key: APIを使う時のTwitteアカウントを特定するkey
  • API secret key: APIを使う時の秘密鍵
  • Bearer token: データをPullする時のトークン

Twitter側のアプリの設定は一旦、これで終了です。送られてきたE-mail内にTwitter開発者用のダッシュボードへのリンクがあるので、確認してみてください。


環境変数に設定

以下のコマンドで環境変数に、上記で取得したBerer tokenを設定します。

$ export 'BEARER_TOKEN'='<自分のBearer token>' // 設定
$ export -p // 確認


Pythonのから自分のTwitter投稿データを取得する

今回はtwitterdevが示すサンプルコードを参考に、自分が最近投稿したツイートデータを取得してみます。

サンプルコード 👉 Github twitterdev/Twitter-API-v2-sample-code


Pythonのサードパーティのrequests (Requests: HTTP for Human) を使います。インストールしていない場合は、pipでインストールしてください。また、Pythonはversion3.9.0を使用しています。

// requestsのインストール
pip install requests

TwitterのAPIのドキュメントは下記URL先にあるので、Endpointとパラメータを確認します。API ドキュメントに記載されているように、 エンタープライズ版と、プレミアム版、スタンダード版、v1かv2でエンドポイントとユーザの認証方法が異なるので、適宜変えてください。

API ドキュメント 👉 TwitterのAPI doc


今回はスタンダード版のv2を使います。

最近のTwitter投稿を取得するためのコードを解説します。

  • Endpoint は https://api.twitter.com/2/tweets/search/recent (doc) です。
  • リクエストヘッダーに Authorization: Bearer <Bearer token> で上記で環境変数に設定したBearerトークンを指定します。
  • urlパラメータを指定します。今回はツイートのデータ取得の対象ユーザを指定します。 (query=from: <TwitterのID> で指定)。
import requests
import os
import json


def auth():
    # 環境変数に設定したBEARER_TOKENを取得
    return os.environ.get("BEARER_TOKEN")


def create_headers(bearer_token):
    # リクエストヘッダーにBearerトークンを設定
    headers = {"Authorization": "Bearer {}".format(bearer_token)}
    return headers


def create_url():
    # urlパラメータに取得対象ユーザを指定する
    query = "from:<TwitterのID(@以降の文字列)>"
    url = "https://api.twitter.com/2/tweets/search/recent?query={}".format(
        query
    )
    return url


def connect_to_endpoint(url, headers):
    response = requests.get(url, headers=headers)
    print(response.status_code)
    if response.status_code != 200:
        raise Exception(response.status_code, response.text)
    return response.json()


def main():
    bearer_token = auth()
    url = create_url()
    headers = create_headers(bearer_token)
    json_response = connect_to_endpoint(url, headers)
    print(json.dumps(json_response, indent=4, sort_keys=True, ensure_ascii=False))


if __name__ == "__main__":
    main()

 

上記のコードを実行すると、以下の様に設定したfromでユーザIDの最近の投稿を取得できます。

200
  {
     "data": [
         {
             "id": "1345322980797104129",
             "text": "Pythonの命名規則を一覧表でまとめました!\nPython初心者・未経験者の人で命名規則に迷ったらみてみてください!\n\n今日は4つの記事を投稿できました🦉\n\n#ブログ\n#Python\n#プログラミング初心者\n#エンジニア\n#情報発信\n\nhttps://t.co/XveknM5nm6"
         },
         {
             "id": "1345215056699486208",
             "text": "今日は、初心者がハマりがちなエラー7選とその対処法を書きました!!Python初心者の人が、すんなりコードをかけるように、この記事が役立てば嬉しいです🦉\n\n#ブログ\n#Python\n#エンジニア\n#情報発信\n#プログラミング初心者\n\nhttps://t.co/o3hSFgFq9W"
         },
         {
             "id": "1344580806270885888",
             "text": "今日はPythonのイミュータブル・ミュータブルについて説明したブログを投稿しました!\n\nこのへんはハマりポイントですね🦉\n読んでもらえたら嬉しいです!!\n\n#エンジニア\n#ブログ\n#Python\n#情報発信\n#プログラマー\n\nhttps://t.co/NUCuhAGTJg"
         },
     "meta": {
         "newest_id": "1345322980797104129",
         "oldest_id": "1344580806270885888",
         "result_count": 3
     }
 }

これでPythonでのTwitter連携ができました。他にもできることが色々ありますので、API Docを読んで、試してみてください!

関連記事

このエントリーをはてなブックマークに追加