【Python】Twitterを操作する③ -ツイート取得

前回は、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を使用します。

Developer Portalで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

ではでは👋