【Python×Twitter】検索ツイートのデータ取得・分析|APIとtweepy活用による自動運用アプリ開発支援

こんにちは、Kosei(@kay_diacc2)です!

サマリー

PythonでTwitterのデータ収集をどうやって実行するの?」「自動で検索結果にマッチするツイートを取得して分析できるようになりたい」本記事ではこのような疑問・要望にお答えします。

目次

tweepyとは

tweepyはTwitterAPIを用いてTwitterを簡易操作するためのPythonライブラリです。tweepyを使いこなすことで、オーダーメイドのTwitter自動運用アプリが作成できるようになります。

tweepyはTwitter APIの利用を前提としています。APIキーやシークレットキーの取得が未済の方はまずこちらの記事からご覧ください。API利用までの手順を解説しています。

tweepyとTwitter API利用によって実現できること

tweepyとAPIを用いると、どのようなことが実現できるのでしょうか?上図に実現できる内容を示し、以下テーブルには具体的なプログラムメソッドを示します。

スクロールできます
カテゴリ概要Tweepy利用メソッド範囲
データ収集ツイート検索client.search_recent_tweets()
データ収集特定のツイート取得client.get_tweet()
データ収集特定のユーザー情報取得client.get_user()
データ収集いいねしたユーザ情報取得client.get_liking_users()
データ収集リツイートしたユーザー情報取得client.get_retweeters()
データ収集ユーザーのフォロー情報取得client.get_users_following()
データ収集ユーザーのフォロワー情報取得client.get_users_followers()
アカウント操作ツイートするclient.create_tweet()
アカウント操作ツイートを削除するclient.delete_tweet()
アカウント操作ファボ(いいね)するclient.like()
アカウント操作リツイートするclient.retweet()
アカウント操作フォローするclient.follow_user()
アカウント操作フォローを解除するclient.unfollow_user()
アカウント操作ブロックするclient.block()
アカウント操作ブロックを解除するclient.unblock()
アカウント操作ミュートするclient.mute()
アカウント操作ミュートを解除するclient.unmute()

本記事では赤星()で示した「Twitter上のデータを自動で収集する方法」に焦点を当て、詳しいPythonメソッドの使い方を解説していきます。

それ以外のプログラム解説も含めるとボリュームが大きくなりすぎるため、下記に分けて解説しています。是非合わせてご覧ください。

【実践】PythonでTwitter上のデータを自動で収集する

それでは上記範囲の内容がPythonでプログラムできるよう解説していきます。

tweepyで情報を取得する際、IDを用いるのが特徴的です。具体的に下記2つを示しており、初めは混合しやすいため区別できるようにしておきましょう。

ID名概要
ツイートID(tweet_id)対象ツイートを一意に特定するためのID
ユーザーID(user_id)対象ユーザーを一意に特定するためのID

【事前準備】Pythonライブラリのインストール

今回利用するPythonライブラリは「tweepy」と出力結果の整形用として「pprint」を用います。事前にインストールしておきましょう。

tweepy

pip install tweepy

pprint

pip install pprintpp

【事前準備】クライアント関数作成

まずtweepyライブラリとAPIを呼び出すためのプログラムを下記のように記述しましょう。今回API情報が踏襲された関数として、ClientInfo()関数を用意しています。

import tweepy
from pprint import pprint

# API情報を記入
BEARER_TOKEN        = "BEARER TOKEN"
API_KEY             = "API キー"
API_SECRET          = "API シークレット"
ACCESS_TOKEN        = "アクセストークン"
ACCESS_TOKEN_SECRET = "アクセストークンシークレット"


# クライアント関数を作成
def ClientInfo():
    client = tweepy.Client(bearer_token    = BEARER_TOKEN,
                           consumer_key    = API_KEY,
                           consumer_secret = API_SECRET,
                           access_token    = ACCESS_TOKEN,
                           access_token_secret = ACCESS_TOKEN_SECRET,
                          )
    
    return client

【Tweet検索】ツイート情報取得

ある検索情報に基づきツイート情報を取得します

検索結果の取得はsearch_recent_tweets()メソッドを利用するのが特徴であり、検索したい項目(search)と取得したい検索数(tweet_max)を指定し、下記のように記載します。

# ★必要情報入力
search    = "Python学習"  # 検索対象
tweet_max = 10           # 取得したいツイート数(10〜100で設定可能)

# 関数
def SearchTweets(search,tweet_max):    
    # 直近のツイート取得
    tweets = ClientInfo().search_recent_tweets(query = search, max_results = tweet_max)

    # 取得したデータ加工
    results     = []
    tweets_data = tweets.data

    # tweet検索結果取得
    if tweets_data != None:
        for tweet in tweets_data:
            obj = {}
            obj["tweet_id"] = tweet.id      # Tweet_ID
            obj["text"] = tweet.text  # Tweet Content
            results.append(obj)
    else:
        results.append('')
        
    # 結果出力
    return results

# 関数実行・出力
pprint(SearchTweets(search,tweet_max))
# 出力イメージ
# [{'text': '「Python 学習レッスン II」レッスンを修了しました!,
#   'tweet_id': 1234456},
#  {'text': 'Python学習サブ画面の作成しました!',
#   'tweet_id': 123456}]

関数の出力結果として検索対象の「ツイート内容(text)」と「対象ツイートのID(tweet_id)」が辞書形式で検索結果分取得できます。

【データ収集】特定のツイートからユーザー情報(ID・ユーザー名等)取得

特定のツイートのIDを指定し、ツイートしたユーザーの情報を取得します。

ユーザー情報の取得にはget_tweet()メソッドを利用するのが特徴であり、tweet_idを指定し、下記のように記載します。

# ★ツイートIDを指定
tweet_id = 'ツイートIDを入力'

# 関数
def GetTweet(tweet_id):
    # メソッド実行
    GetTwt = ClientInfo().get_tweet(id=int(tweet_id), expansions=["author_id"], user_fields=["username"])

    # 結果加工
    twt_result = {}
    twt_result["tweet_id"] = tweet_id
    twt_result["user_id"]  = GetTwt.includes["users"][0].id
    twt_result["username"] = GetTwt.includes["users"][0].username
    twt_result["text"]     = GetTwt.data
    twt_result["url"]      = "https://twitter.com/" + GetTwt.includes["users"][0].username + "/status/" + str(tweet_id)

    # 結果出力
    return twt_result

# 関数実行・出力
pprint(GetTweet(tweet_id))
# 出力イメージ
# {'text': '今日もPython学習しよう',
#  'tweet_id': 12345678,
#  'url': 'https://twitter.com/xxx/status/xxx',
#  'user_id': 1234567890,
#  'username': 'testuser'}

関数の出力結果として検索対象の「ツイート内容(text)」「対象ツイートのID(tweet_id)」「対象ツイートのURL」、ツイートした「ユーザーID」「ユーザー名」が辞書形式で取得できます。

【データ収集】特定のツイートからファボ(いいね)したユーザー情報取得

特定のツイートのIDを指定し、そのツイートに対してファボ(いいね)したユーザーの情報を取得します。

ファボしたユーザー情報の取得にはget_liking_users()メソッドを利用するのが特徴であり、tweet_idを指定し、下記のように記載します。

# ★ツイートIDを指定
tweet_id = 'ツイートIDを指定する'

def Get_Liking_Users(tweet_id):
    # メソッド実行
    users = ClientInfo().get_liking_users(id=int(tweet_id)).data
    
    # 結果加工
    result = []
    if users !=  None:
        for i in range(len(users)):
            obj = {}
            obj["user_id"]  = users[i].id
            obj["name"]     = users[i].name
            obj["username"] = users[i].username
            result.append(obj)
    else:
        result.append("")
    
    
    # 出力
    return result

pprint(Get_Liking_Users(tweet_id))
# 出力イメージ
# [{'name': 'テストユーザー1', 'user_id': 111111, 'username': 'testuser1'},
#  {'name': 'テストユーザー2', 'user_id': 222222, 'username': 'testuser2'},
#  {'name': 'テストユーザー3', 'user_id': 333333, 'username': 'testuser3'},
#  {'name': 'テストユーザー4', 'user_id': 444444, 'username': 'testuser4'},]

関数の出力結果として対象の「ユーザーID(user_id)」「ユーザー名(username)」「表示名(name)」が辞書形式で取得できます。

【データ収集】特定のツイートからリツイートしたユーザー情報取得

特定のツイートのIDを指定し、そのツイートに対してリツイートしたユーザーの情報を取得します。

リツイートしたユーザー情報の取得にはget_retweeters()メソッドを利用するのが特徴であり、tweet_idを指定し、下記のように記載します。

# ★ツイートIDを指定
tweet_id = 'ツイートIDを指定する'

def Get_Retweeters(tweet_id):
    # メソッド実行
    users = ClientInfo().get_retweeters(id=int(tweet_id)).data
    
    # 結果加工
    result = []
    if users != None:
        for i in range(len(users)):
            obj = {}
            obj["user_id"]  = users[i].id
            obj["name"]     = users[i].name
            obj["username"] = users[i].username
            result.append(obj)
    else:
        result.append("")
    
    
    # 出力
    return result

# 関数実行・結果出力
pprint(Get_Retweeters(tweet_id))
# 出力イメージ
# [{'name': 'テストユーザー1', 'user_id': 111111, 'username': 'testuser1'},
#  {'name': 'テストユーザー2', 'user_id': 222222, 'username': 'testuser2'},
#  {'name': 'テストユーザー3', 'user_id': 333333, 'username': 'testuser3'},
#  {'name': 'テストユーザー4', 'user_id': 444444, 'username': 'testuser4'},]

関数の出力結果として対象の「ユーザーID(user_id)」「ユーザー名(username)」「表示名(name)」が辞書形式で取得できます。

【データ収集】特定のユーザーIDからユーザー名を取得

特定のユーザーIDを指定し、そのユーザーの表示情報(ユーザー名)を取得します。

ユーザー名を取得するにはget_user()メソッドを利用するのが特徴であり、tweet_idを指定し、下記のように記載します。

# ★ユーザーIDを指定
user_id = 'ユーザーIDを指定する'

# 関数
def GetUser(user_id):
    # メソッド
    GetUser = ClientInfo().get_user(id=int(user_id)).data
    
    # 結果加工
    result  = {}
    result["user_id"]  = user_id
    result["name"]     = GetUser.name
    result["username"] = GetUser.username
    
    # 結果出力
    return result
    
# 関数実行・結果出力
pprint(GetUser(user_id))
# 出力イメージ
# {'name': 'テストユーザー', 'user_id': 123456, 'username': 'testuser'}

関数の出力結果として対象の「ユーザーID(user_id)」「ユーザー名(username)」「表示名(name)」が辞書形式で取得できます。

【データ収集】特定のユーザーIDからフォロー情報取得

特定のユーザーIDを指定し、そのユーザーがフォローしているユーザー情報を一括取得します。

フォロー情報を取得するにはget_users_following()メソッドを利用するのが特徴であり、user_idを指定し、下記のように記載します。

# ★ユーザーIDを指定
user_id = 'ユーザーIDを指定する'

# 関数
def GetUser_Following(user_id):
    # メソッド
    followers = ClientInfo().get_users_following(id=int(user_id))
    
    # 取得したデータ加工
    results     = []
    followers_data = followers.data

    # tweet検索結果取得
    if followers_data != None:
        for tweet in followers_data:
            obj = {}
            obj["user_id"]  = tweet.id       # User_ID
            obj["name"]     = tweet.name     # Name
            obj["username"] = tweet.username #username
            results.append(obj)
    else:
        results.append('')

    # 結果出力
    return results

pprint(GetUser_Following(user_id))
# 出力イメージ
# [{'name': 'テストユーザー1', 'user_id': 111111, 'username': 'testuser1'},
#  {'name': 'テストユーザー2', 'user_id': 222222, 'username': 'testuser2'},
#  {'name': 'テストユーザー3', 'user_id': 333333, 'username': 'testuser3'},
#  {'name': 'テストユーザー4', 'user_id': 444444, 'username': 'testuser4'},]

関数の出力結果として対象の「ユーザーID(user_id)」「ユーザー名(username)」「表示名(name)」が辞書形式で取得できます。

【データ収集】特定のユーザーIDからフォロワー情報取得

特定のユーザーIDを指定し、そのユーザーのフォロワー情報を一括取得します。

フォロワー情報を取得するにはget_users_followers()メソッドを利用するのが特徴であり、user_idを指定し、下記のように記載します。

# ★ユーザーIDを指定
user_id = 'ユーザーIDを指定する'

# 関数
def GetUser_Follower(user_id):
    # メソッド
    following = ClientInfo().get_users_followers(id=int(user_id))
    
    # 取得したデータ加工
    results     = []
    follow_data = following.data

    # tweet検索結果取得
    if follow_data != None:
        for tweet in follow_data:
            obj = {}
            obj["user_id"]  = tweet.id       # User_ID
            obj["name"]     = tweet.name     # Name
            obj["username"] = tweet.username #username
            results.append(obj)
    else:
        results.append('')

    # 結果出力
    return results

pprint(GetUser_Follower(user_id))
# 出力イメージ
# [{'name': 'テストユーザー1', 'user_id': 111111, 'username': 'testuser1'},
#  {'name': 'テストユーザー2', 'user_id': 222222, 'username': 'testuser2'},
#  {'name': 'テストユーザー3', 'user_id': 333333, 'username': 'testuser3'},
#  {'name': 'テストユーザー4', 'user_id': 444444, 'username': 'testuser4'},]

関数の出力結果として対象の「ユーザーID(user_id)」「ユーザー名(username)」「表示名(name)」が辞書形式で取得できます。

最後に

この記事が気に入ったら
フォローしてね!

本記事をシェア!
URLをコピーする
URLをコピーしました!
目次
閉じる