こんにちは、DXCEL WAVEの運営者(@dxcelwave)です!
「PythonでTwitterのデータ収集をどうやって実行するの?」「自動で検索結果にマッチするツイートを取得して分析できるようになりたい」本記事ではこのような疑問・要望にお答えします。
tweepyとは
tweepyはTwitterAPIを用いてTwitterを簡易操作するためのPythonライブラリです。tweepyを使いこなすことで、オーダーメイドのTwitter自動運用アプリが作成できるようになります。
tweepyはTwitter APIの利用を前提としています。APIキーやシークレットキーの取得が未済の方はまずこちらの記事からご覧ください。API利用までの手順を解説しています。
【Twitter】APIキー利用申請から発行までの手順解説|ツイッター運用自動化アプリ作成に向けた環境構築
「Twitter運用自動化アプリ(Bot)を作って業務効率化したいけど、最初に何をすればいいの?」「Twitter APIってどうやって申請して使えるようになるの?」本記事ではこのような疑問にお答えします。また、後半ではTwitter 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メソッドの使い方を解説していきます。
それ以外のプログラム解説も含めるとボリュームが大きくなりすぎるため、下記に分けて解説しています。是非合わせてご覧ください。
Twitter運用の「ツール開発はやはり難易度が高い」
このように感じる方向けに「おすすめX運用ツール」も紹介しております。ぜひご覧ください。
【RPA】面倒なX運用を自動化!おすすめツール4選|Xマーケティング業務効率化支援
「面倒なX運用を自動化したい」「自動化できるおすすめX運用ツールとは?」「簡単に自作開発もできる?」本記事ではこのような要望・疑問にお答えします。
【実践】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)」が辞書形式で取得できます。
最後に
お問い合わせフォーム
上記課題に向けてご気軽にご相談下さい。
お問い合わせはこちら