前回は、APIを利用してツイートを投稿する方法を紹介しました。
今回は、ツイート取得の方法を見ていこうと思います。Twitterのデータを分析したい人は、この手順が必須になります。ツイート本文だけでなく様々な情報を収集できるので、1つづつ見ていきましょう。
Twitter APIの利用には、利用登録をする必要があります。まだ登録されていない方は、以下記事を参考に登録してください。
https://www.learning-nao.com/?p=1948
ツイート取得件数の制限
無料で使えるAPIでは、取得できるツイート数に制限があります。また、取得できる期間が異なるコースが2つ用意されており、直近30日分のツイートを取得できるコースと全ての期間のツイートを取得できる(フルアーカイブ)コースがあります。
そんなのフルアーカイブのほうで決まりでは?と思われてしまいそうですが、両コースでは月に取得できる件数などに違いがあります。
30-Days
以下の表は直近30日間のツイートを取得できるコースです。Sandboxが無料版で、Premiumが有料版です。
Sandboxでは、1回の検索リクエストにつき最大100件まで取得できます。また、ツイート内容自体は取得できますが、ツイート数は取得できません(Premiumでは可能)。
Full Archive
こちらのコースでは全期間からツイートを取得できます。 30-Days との大きな違いは、月に取得できるツイート件数(Monthly Tweet cap)です。Sandboxだと5000件/月取得できます。ちなみに30-Daysだと25000件/月取得できます。
Dev environmentの設定
上記コースはDev environmentとして選択します。
Developer PortalのProductsからDev environmentを選択すると、以下の画面が表示されます。
3つの環境が用意されていますが、今回はSearch Tweetsの2つの環境のうちどちらかを選択します。これまでに作成したAppをDev environmentに紐づけます。
今回は30-Daysの方で作成していきます。右側のSet up dev environmentをクリックすると以下画面が表示されるので、入力していきます。Dev environment labelは任意でいいですが、アプリ側で指定するURLにこのlabelを含めることになります(後述)。
Appにはこれまでに作成したApp一覧が表示されるので、紐づけるAppを選択します。
注**Projectsに紐づいたAppを選択しないと、以下で紹介する方法で認証が通らないので注意してください。
作成すると、Dev environment一覧の画面に紐づけたAppが表示されます。
これで準備は完了です。
Pythonで実装
ここからはPythonで実際にツイートを取得してみようと思います。
まずはtweepyをインストールします。
pipの場合は
pip install tweepy
Anacondaの場合は
conda install -c conda-forge tweepy
でインストールします。
直近タイムラインの取得
まずは直近のタイムラインを取得してみます。この処理は、Dev environmentの設定をすることなく実行できます。
import tweepy
API_Key = "Your API key"
API_Sec = "Your API Key Secret"
Token = "Your Access Token"
Token_Sec = "Your Access Token Secret"
# Twitterオブジェクトの生成
auth = tweepy.OAuthHandler(API_Key, API_Sec)
auth.set_access_token(Token, Token_Sec)
api = tweepy.API(auth)
#5件取得
tweets = api.home_timeline(count=5)
#Account = "screen_name here!"
#tweets = api.user_timeline(id=Account, count=5)
for tweet in tweets:
print('='*20)
print('ツイートID : ' , tweet.id)
print('ツイート時間 : ' , tweet.created_at)
print('ツイート本文 : ', tweet.text)
print('ユーザ名 : ', tweet.user.name)
print('スクリーンネーム : ', tweet.user.screen_name)
print('フォロー数 : ', tweet.user.friends_count)
print('フォロワー数 : ', tweet.user.followers_count)
print('ユーザ概要 : ', tweet.user.description)
print('='*20)
api.home_timeline(count=5) でタイムラインのツイートを取得します。countは取得する件数です。
home_timelineとすると、そのユーザで実際に表示されるタイムライン(フォローしているアカウントのツイート)を取得できます。
user_timelineとすると、ユーザを指定してツイートを取得できます。ユーザの指定はスクリーンネーム(@から始まるやつ)などで指定できます。ユーザを指定しない場合が自身のツイートが取得されます。
ツイート内容だけではなく、そのアカウントのフォロー数やフォロワー数なんかもまとめて取得できます。
ツイートの検索
続いてはツイートを検索し、該当するツイートを取得します。ここではtweepyは使用しません。また、Developer PortalでDev environmentに設定したAppのbearer tokenを使用します。
import requests
import os
#認証情報設定
def connect_to_twitter():
#お試し時は直書きでOK
bearer_token = "Your Bearer Token"
return {"Authorization": "Bearer {}".format(bearer_token)}
#検索実行
def make_request(headers):
url = "https://api.twitter.com/2/tweets/search/recent"
params = "query=from:learningnao"
return requests.request("GET", url, params=params, headers=headers).json()
###ここから##########################
headers = connect_to_twitter()
response = make_request(headers)
print(response)
関数 connect_to_twitter() では、検索リクエストを送る際の認証情報をヘッダーに付与します。 Developer Portalで生成したBearer Tokenを設定します。
Bearer Tokenを設定することは、「Twitterさんに認証を受けた〇〇というアプリです!」と宣言するようなものです。これによって、今回の場合はデータの取得が認められます。
Bearer TokenはOAuth 2.0で使用することができます。STANDALONEのAppはこれに対応していないので、使用することはできません。なお、 Bearer Tokenでは公開されている情報にのみアクセスすることができます(鍵垢のツイート等は不可)
関数make_request()では実際に検索リクエストを投げます。直近データ( 30-Days )の取得時はソースコード内のURLを指定します(endpoint)。
paramでは検索するクエリを作成します。今回は自身のツイートを取得するクエリにしています。
requests.request()でリクエストを送信します。末尾に.json()を付加することで、取得した内容が辞書型で返されます。
まとめ
TwitterAPIを使用してPythonでツイートを取得する方法を紹介してきました。
Twitter APIは日々アップデートしており、認証方法なども変わっていっています。色々なサイトの方法を試したけどうまくいかない場合は、なるべく新しい記事を漁ってみてくださいw
ではでは👋