Twitter APIを使ってツイートデータを取得する(Essential版)

自然言語処理の勉強をしていて一番大変なのは、学習用のデータを集めることです。いくつかのオープンデータが提供されていますが、公的研究機関や、大学関係者などに利用を限定されている場合が多いようです。

一般の開発者がお手軽にデータを収集するソースの一つとして、Twitterがあります。お手軽にツイートを取得する手順についてまとめたいと思います。

事前準備

Twitterアカウントの作成

通常のTwitterアカウントが必要となります。私は普段Twitterを利用することはないのですが、API利用のためにアカウント登録をしました。すでにTwitterを利用されているのであれば、そのアカウントで問題ないと思います。

Twitter Developer登録

開発者プラットフォーム(https://developer.twitter.com/ja)から新規登録します。

Twitterのアクセスレベルには、Essential、Elevated、AcademicResearchの3種類があります。このうちEssentialは無料で直ぐに利用可能なので、まずはEssentialでSign Upします。

登録の際に、"API key", "API key Secret", "Bearer Token"が表示されますので、忘れないようにメモしておきます。

アクセスキーの取得

Developer PortalサイトのProject & Appsから最初に作成したアプリを選択し、"Keys and tokens"の画面を表示します。

ここから"Access Token and Secret"を選択して、"Access Token" と "Access Token Secret"を発行します。

サンプルプログラム

以上の準備ができましたら、Twiter APIにアクセスします。

TwitterAPIには、v1.1とv2とがあります。Essentialでは基本的にv2しか使えません。

今回は、Google Colabratoryを使ってPythonコードを実行します。まずは必要なライブラリのインストールを行います。

!pip install -U tweepy

以下のコードを動作させるためには、tweepyはバージョン4.0以上が必要ですので、-Uオプションで最新にしておきます。


import tweepy

# 事前準備で取得した各キーを設定する
client = tweepy.Client(
    consumer_key=<your api_key>,
    consumer_secret=<your api_key_secret>,
    access_token=<your access_token>,
    access_token_secret=<your access_token_secret>,
    bearer_token=<your bearer_token>
)

# 最新のtweetを検索する。Essentialレベルでは、”client.search_all_tweets”は使えない。
tweets = client.search_recent_tweets(
    query='サッカー',  # 検索キーワード
    max_results=20   # ツイート取得件数
                                     )

print(tweets[0])

これで、「サッカー」が含まれる最新のツイートを20件取得できました。Essential の場合、max_resultsの最大数は100のようです。

ちなみにqueryには、AND、 OR、 NOT、 Groupingが使えます。

AND logicSuccessive operators with a space between them will result in boolean "AND" logic, meaning that Tweets will match only if both conditions are met. For example, snow day #NoSchool will match Tweets containing the terms snow and day and the hashtag #NoSchool.
OR logicSuccessive operators with OR between them will result in OR logic, meaning that Tweets will match if either condition is met. For example, specifying grumpy OR cat OR #meme will match any Tweets containing at least the terms grumpy or cat, or the hashtag #meme.
NOT logic, negationPrepend a dash (-) to a keyword (or any operator) to negate it (NOT). For example, cat #meme -grumpy will match Tweets containing the hashtag #meme and the term cat, but only if they do not contain the term grumpy. One common query clause is -is:retweet, which will not match on Retweets, thus matching only on original Tweets, Quote Tweets, and replies. All operators can be negated, but negated operators cannot be used alone.
GroupingYou can use parentheses to group operators together. For example, (grumpy cat) OR (#meme has:images) will return either Tweets containing the terms grumpy and cat, or Tweets with images containing the hashtag #meme. Note that ANDs are applied first, then ORs are applied.
https://developer.twitter.com/en/docs/twitter-api/tweets/search/integrate/build-a-query

ANDの場合には、半角スペースでキーワードをつなぎます。 ORの場合には、’OR'でキーワードをつなぎます。NOTの場合は、'-'をキーワードの前につけます。

アクセスレベルがEssentialの場合、クエリにも制限があります。必要に応じて、Elevatedアクセスレベルの申請をしたいと思います。詳細は以下の公式サイトで確認してください。

TwitterAPI 公式ドキュメント Search Tweets Document
tweepy公式ドキュメント twitter API V2 reference