【python】Twitter APIでタイムラインからワード検索する方法

Twitterタイムライン検索のイメージ

本ページには PR が含まれます。

Twitterのタイムラインから特定ワードだけを検索したいなぁ
どうやればいいんだろう…?

今回はPythonでTwitterタイムラインから指定したキーワード検索を検索・抽出する方法をご紹介します。

こんな方におすすめ
  • 特定キーワードを使うユーザの傾向を知りたい方
  • トレンドやバズりやすいキーワードを分析したい方
  • Twitter運用・分析を効率化したい方

サンプルコードを見ながらサクサク処理を試せるので、ぜひ参考にしてみてください!!


なお、Twitter APIの利用には事前登録が必要です。
↓の記事でわかりやすく解説しているので、ぜひ参考にしてみてください。


Twitter APIの登録が済んだら、さっそくTwitterタイムラインのキーワード検索を実装していきましょう!!

目次

ライブラリのインストール

はじめに今回の実装に使用するライブラリをインストールします。

Twitter APIのユーザ認証に利用するのがOAuth認証です。OAuth認証をカンタンに行える「requests_oauthlib」ライブラリをインストールしましょう。

コマンドプロンプト(Windows)もしくはターミナル(macOS)で以下を実行します。

pip install requests_oauthlib

コンソールに「Successfully installed 〜〜〜」と表示されていればインストールは成功です。


OAuth認証でアカウントにアクセス

OAuth認証とは

OAuthは、ユーザアカウントのアクセストークンを使ってTwitter(サービス)へのアクセス権限をアプリに与え、 APIのスムーズな利用を可能にする認証規格です。

Twitter APIをより安全に利用するため、ユーザはアクセストークンを利用してTwitterサーバーと情報のやりとりを行います。

OAuth認証の実装 (サンプルコード)

インストールしたrequests_oauthlibライブラリを使ってPython自分のTwitterアカウント権限を通してみましょう。

# ライブラリのインポート
from requests_oauthlib import OAuth1Session

# キーの設定
API_KEY = "あなたのAPI Key" 
API_KEY_SECRET = "あなたのAPI Key Secret"
ACCESS_TOKEN = "あなたのAccess Token"
ACCESS_TOKEN_SECRET = "あなたのAccess Token Secret"

# OAuth認証を通して「twitter_oauth」という変数に格納
twitter_oauth = OAuth1Session(API_KEY, API_KEY_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET)

これでTwitter APIを自由に扱えるようになりました!!


タイムラインから指定キーワードで検索

さっそく指定したキーワードを含むツイートを検索してみましょう。

使用するAPIリソースURL

ツイート検索で使用するAPIリソースは以下のURLです。

request_search_url = "https://api.twitter.com/1.1/search/tweets.json"

APIリクエストに関する情報

レスポンスのフォーマットjsonフォーマット
認証が必要か必要
上限リクエスト回数 / 15分450

APIリクエストには上限回数があります。
短時間に大量のリクエストを送信するとサーバーに負荷がかかってしまうため、なるべく間隔を空けましょう。


サンプルコード

import json
from requests_oauthlib import OAuth1Session

API_KEY = "あなたのAPI Key" 
API_KEY_SECRET = "あなたのAPI Key Secret"
ACCESS_TOKEN = "あなたのAccess Token"
ACCESS_TOKEN_SECRET = "あなたのAccess Token Secret"

twitter_oauth = OAuth1Session(API_KEY, API_KEY_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET)

# APIのリソースURL
request_search_url = "https://api.twitter.com/1.1/search/tweets.json"

# 検索キーワードを指定
query = "~~~任意のキーワード~~~"

# パラメータの設定
params = {
    "q": query,
    "count": 100,
    "locale": "ja",
    "result_type": "recent"
}

# Twitter APIで検索を実行
res = twitter_oauth.get(request_search_url, params=params)
response = json.loads(res.text)
print(response)

変数queryに「プログラミング」と指定した場合の実行結果を見てみましょう。

大量のツイート情報を取得できていますね!!

APIリクエストで指定できるパラメータ

引数paramsで指定できるパラメータ

パラメータ意味指定する値の例
q (必須)検索クエリ(UTF-8で500文字以内)
geocode指定した緯度/経度および半径内のユーザのツイートのみ検索
“経度 緯度 数値(miマイル)or(kmキロメートル)”のように指定
“37.781157 -122.398720 1mi”など
lang指定した言語で投稿されたツイートのみを検索“eu”など
locale検索クエリqの言語を指定“ja”など
result_type検索結果の条件を「人気ツイート」「最新ツイート」「混合」から選択“mixed”, “recent”, “popular”のいずれか
count取得する検索結果のツイート数(最大100。デフォルト15)100, 30などのint型
until指定日時以前のツイートのみを検索
(ツイート検索は現在より1週間前までしか取得されないことに注意)
“2022-08-30″など
since_id指定したIDより値の大きい(新しい)IDを持つツイートのみを検索12345などのint型
max_id指定したIDより値の小さい(古い)IDを持つツイートのみを検索54321などのint型
includes_entities#やメンションなどのエンティティ情報を結果に含めるかどうか“true”(含める), “false”(含めない)のいずれか

検索結果データを項目ごとに整理

APIレスポンスはjsonフォーマットなので、すこしわかりづらいですよね。

項目ごとに整理されたデータフレームにまとめてみます。

# pandasライブラリをインポート
import pandas as pd
import json
from requests_oauthlib import OAuth1Session

API_KEY = "あなたのAPI Key" 
API_KEY_SECRET = "あなたのAPI Key Secret"
ACCESS_TOKEN = "あなたのAccess Token"
ACCESS_TOKEN_SECRET = "あなたのAccess Token Secret"

twitter_oauth = OAuth1Session(API_KEY, API_KEY_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET)

request_search_url = "https://api.twitter.com/1.1/search/tweets.json"
query = "~~~任意のキーワード~~~"
params = {
    "q": query,
    "count": 100,
    "locale": "ja",
    "result_type": "recent"
}

res = twitter_oauth.get(request_search_url, params=params)
response = json.loads(res.text)

##### APIレスポンスをpandasデータフレームにまとめる #####
# レスポンスデータはstatusesキーに格納されている
df = pd.DataFrame(response["statuses"])

jupyter notebookなどで出力を確認すると、以下の通り

行と列ごとに内容が区切られたので、だいぶ出力がわかりやすくなりましたね。


指定した「プログラミング」というワードを含むツイートだけをタイムラインから検索・抽出できました。

各行に情報が整理されているので、欲しい情報をピックアップしちゃいましょう。

データフレームの各列の内容は下表のようになっています。

列名意味
created_atツイート日時
idツイートid
id_strツイートidの文字列型
textツイートの本文
truncatedツイート本文が省略されているか
entitiesハッシュタグやユーザメンション情報
sourceツイートのリンクURL
retweet_countリツイートされた数
favorite_countいいねされた数

ツイート日時、ツイート本文、いいね数、リツイート数だけ抽出

データフレームの主要な項目だけに整理しましょう。

いいね数が多い順にデータフレームを整列してみます

サンプルコード

import pandas as pd
df = pd.DataFrame(response["statuses"])
df_pickup = df[["created_at", "text", "favorite_count", "retweet_count"]]
df_pickup.sort_values(by="favorite_count", ascending=False)

実行結果

情報を抜粋すると、だいぶわかりやすくなりましたね。


まとめ

今回はPythonを使って、Twitter APIから特定ワードをタイムラインから検索する方法をご紹介しました。

Twitter運用・分析でも活用できるのでぜひ参考にして見てくださいね。

他にもTwitter APIの活用方法を紹介しているので、合わせてどうぞ。

よかったらシェアしてね!
目次