2021年4月版:Twitter APIを使用してデータを取得する

Twitterのデータは自然言語処理に使いやすそうなデータがたくさんありますよね

構造やフォーマットは整っていないが簡単に取得できるデータかつ大量にあるな

Twitter API の取得方法ってよく変更されるんですよね

今回は最新版を検証したぞ

Twitterの認証処理

Twitterにログインして下記リンクにログイン

https://developer.twitter.com/en/portal/dashboard

Create Projectをしておくと新しいTwitter APIを使用できるのでプロジェクト作成から行います。

新しいTwitter APIは下記をご覧ください。

https://developer.twitter.com/en/docs/twitter-api/early-access

プロジェクト名を入力します。

ユースケースを入力します。今回はExploring the APIを選択しました。

プロジェクトの説明を記述します。

すでに作成されたAppを選ぶこともできますが今回はCreate a new Appを選択します。

App名を入力してcompleteを選択します。すでに使われている名前は使えないので注意が必要です。

API KeyとAPI secert key、Bearer tokenが取得できます。ここでAPI KeyとAPI secert key、Bearer tokenをメモしておきます。

コードでの動作確認

下記のチュートリアルでどのようにコード作成するかの具体例があります。

https://developer.twitter.com/en/docs/tutorials

今回は下記リンクの内容を元に動作確認をしてみます。感情分析にAzureのサービスを使用しているため感情分析はせずに動作確認を行います。

https://developer.twitter.com/en/docs/tutorials/how-to-analyze-the-sentiment-of-your-own-tweets

Google Colabで動作確認をします。下記の記事でGoogle Colabでの環境構築法を記述しました。

まず必要なライブラリをインポートします。

import requests
import pandas as pd
import json
import ast

自分のつぶやきを取得するためのURLを作成します。

  • handle: つぶやきを取得したいハンドル名を指定します。
  • max_results:取得の限度数を指定します。
  • mrf = “max_results={}”.format(max_results): 取得の限度数をTwitter API用に変更します。
  • q = “query=from:{}”.format(handle): ハンドル名をTwitter API用に変更します。
  • url = “https://api.twitter.com/2/tweets/search/recent?{}&{}”.format(mrf, q): つぶやきを取得するためのURLを作成します。
def create_twitter_url():
    handle = "DeepYurui"
    max_results = 100
    mrf = "max_results={}".format(max_results)
    q = "query=from:{}".format(handle)
    url = "https://api.twitter.com/2/tweets/search/recent?{}&{}".format(
        mrf, q
    )
    return url

先程作成したBearer tokenを取得するためのコードです。

def create_bearer_token(data):
    return data["search_tweets_api"]["bearer_token"]

Twitterの認証用のコードです。

def twitter_auth_and_connect(bearer_token, url):
    headers = {"Authorization": "Bearer {}".format(bearer_token)}
    response = requests.request("GET", url, headers=headers)
    return response.json()

取得できるデータがjson形式なのでその中から、つぶやき部分を取得します。

def lang_data_shape(res_json):
    data_only = res_json["data"]
    doc_start = '"documents": {}'.format(data_only)
    str_json = "{" + doc_start + "}"
    dump_doc = json.dumps(str_json)
    doc = json.loads(dump_doc)
    return ast.literal_eval(doc)

先程作成したコードを使ってTwitterのつぶやきを取得します。

  • url = create_twitter_url(): TwitterのURLを取得
  • data = {‘search_tweets_api’: {‘bearer_token’: ‘あなたが取得したbearer token’}}: 認証データを設定
  • bearer_token = create_bearer_token(data): 認証データを取得
  • res_json = twitter_auth_and_connect(bearer_token, url) 認証処理とTwitterのデータを取得
  • documents = lang_data_shape(res_json): つぶやき部分を取得
url = create_twitter_url()
data = {'search_tweets_api': 
            {'bearer_token': 'あなたが取得したbearer token'}
       }
bearer_token = create_bearer_token(data)
res_json = twitter_auth_and_connect(bearer_token, url)
documents = lang_data_shape(res_json)
documents

下記のような結果を取得できます。

{'documents': [{'id': '1378857337537040386',
   'text': 'HuggingFaceで音声認識ができるWav2Vecが実装されました。\n\nWav2Vecは事前学習の際にラベルなしのデータで学習して、少ないラベルデータで高いパフォーマンスを出している手法なので、試してみる価値はあると思います。\n\nブログでは予測しか確認していません。\n\nhttps://t.co/5BxUzp8IB4 https://t.co/S1cSM36lEG'}]}

Twitterのデータが取得できました。

これを使って自然言語処理をするぞ!

Twitterでポジティブ・ネガティブ分析を行いたい方は下記をご覧ください。

Close Bitnami banner
Bitnami