Twitterで特定のキーワード・ハッシュタグによくいいねするユーザーを調べる方法【Twitter APIのliking_usersを使用】

2021年5月にTwitter APIがバージョンアップされました!
今回の記事では、新機能「liking_users」を使ったプログラムを共有します。

特定のキーワード・ハッシュタグのいいね周り回数が多いユーザーをランキング形式で表示してみました!
このような集計結果をコンソールに表示します👇

共有するプログラムで皆さんも集計してみてください^^

目次

Twitter API 新機能の liking_users でできること

自作プログラムの説明をする前に、liking_usersについて調べたことを共有しますね。

もう知ってるよ!って方はこの章は飛ばしてOKです 👉 ポチッと

liking_usersで出来ること/出来ないこと

liking_usersで出来ることはこんな感じ👇

  • 特定のツイートにいいねしたユーザーを最高100人まで取得できる
  • 15分の間にAPIを75回コールできる

あってもよさそうな機能ですが、今回が初実装なんですね🎉

出来ることを踏まえると、liking_usersで出来ないことはこんな感じ👇

  • ツイートを取得するAPIと組み合わせて使う必要がある
  • 100いいねを超えている場合でも100人までしか取得できない
  • 15分の間では最大75ツイートのいいねしか集計できない(最大7500いいね)

1000いいね越えのバズってるツイート等には使えないですね^^;

また、「いいねされているツイート」を指定する必要があります。
なので、ツイート検索系のAPIと組み合わせて使うのも、liking_usersの特徴です。

liking_usersのAPIリファレンス

簡単にAPIリファレンスをまとめてみました。

✅ エンドポイント
– https://api.twitter.com/2/tweets/:id/liking_users
– :id にはツイートIDを設定する

✅ APIコール上限
– 15分間で75回まで

✅ リクエストパラメータ
– 取得したいユーザー情報などを設定する
– 今回のプログラムで設定したパラメータは以下
– user.fields: id,username,name,public_metrics

✅ レスポンスパラメータ
– リクエストパラメータで設定した情報が返ってくる
– 今回のプログラムのレスポンスは以下
{
“data”: [{
“id”: “1234567890”,
“name”: “ツイ太郎”,
“username”: “__twitaro__”
“public_metrics”: {
“followers_count”: 123, # フォロワー数
“following_count”: 123, # フォロー数
“tweet_count”: 123, # これまでのツイート数
“listed_count”: 123, # 登録リスト数
}]
}

他に設定できるパラメータもたくさんありますよ!
知りたい方は公式のAPIリファレンスを見てね!

\\ liking_usersのDocumentationを開く//

いいね周りユーザー集計プログラムの概要

今回作成した「いいね周りユーザー集計プログラム」について、説明していきますね。

説明いらないから、プログラムだけちょうだい!って方はこの章は飛ばしてOKです 👉 ポチッと

いいねユーザー集計プログラムの処理概要

STEP
🔍 検索設定
  • 検索したいキーワード・ハッシュタグを指定
  • 検索コマンドも併用可能(-filter:replies、-filter:retweetsなど)
  • 検索ツイート数を指定
STEP
🐦 ツイート取得
  • Twitter API v1.1の「search/tweets.json」を使用
  • 指定したキーワード・ハッシュタグを含むツイートを検索
STEP
👍 いいねしたユーザーを取得
  • 検索したツイートの中からいいね数が多い75件に絞り込み
STEP
👥 ユーザーランキング表示
  • いいね周りを多くしているユーザーをランキング形式で表示
  • 表示している項目は以下
  • ユーザー名
  • いいね数
  • いいね率(75件中いいねを押している割合)
  • FF比(人気アカウント指数、フォロワー数 / フォロー中の人数)
  • フォロワー数
  • フォロー中の人数
  • 総ツイート数
  • 作成リスト数
  • プロフィールURL

「いいね周りユーザー集計プログラム」の出力結果はこんな感じです👇

いいね周りユーザー集計プログラムの処理詳細

次は処理の詳細を1つずつ説明しますね。

今回のプログラムはPythonで作成しました。
Pythonの実行環境はGoogleアカウントがあれば無料で使える「Google Colab」を使用しています。
Google Colabは環境構築が不要なので、初心者でも安心して使えますね。

Google Colabを使用したことがない方は、こちらの記事でザッと使ってみるのをお勧めします。

📝 GoogleドライブにTwitter API のキー情報を保存

Twitter API のアクセスにはAPIキー、アクセストークンを使用します。
このキーは外部に漏れてしまうと、悪用されてしまう危険性も。
誤って公開しているGithubに保存してしまうと..😇

なので、今回のプログラムではキー情報をオンコーディングしません。
システム開発の現場でもキーやパスワード情報のオンコーディングはご法度🙅‍♂️
このような実装を普段から意識することをオススメします。

Googleアカウントを持っていれば気軽に使える外部ストレージ「Googleドライブ」にキー情報を保存しましょう。

ちょっと面倒だし、オンコーディングでいいや!って方はこの章は飛ばしてOKです 👉 ポチッと

STEP
環境変数用のファイルを作成

まずは環境変数に設定したい値をファイルに定義します。
今回はTwitter API を利用する上で必要な4つのキーを定義。
以下にサンプルを用意したので、値を書き換えて作成してください。

API_KEY=APIKeySvHYqbutGLOuyAPIKey
API_SECRET=APISecretLpGjE4s9YVEsNToUBB0IXuV1ifQRlXXhAPISecret
ACCESS_TOKEN=1234567890-AccessTokenfGTuqqyIAccessToken
ACCESS_TOKEN_SECRET=AccessTokenSecretfnNtCQVRml7AccessTokenSecret

ファイル名は「.env」としましょう。

STEP
.envファイルをGoogleドライブにアップロード

Google Colabと作成したファイルを連携させたい場合はGoogleドライブを活用します。
作成したファイルをGoogleドライブにアップロード。

まずは他のプライベートなファイルと混ざらないように、.envファイルを格納するフォルダを作成することをオススメします。

サンプルプログラムでは「twitter_api」というフォルダがある前提で実装しました。
自分が管理しやすい名前に変えてもOK🙆‍♂️

作成したディレクトリに.envファイルをアップロードしてください。

🚧 プログラム環境セットアップ

それではプログラムの説明を始めますね。
まずはプログラムの環境セットアップの部分から説明します。

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

Google Colab上にはあらかじめデータ分析によく使われるライブラリがいくつか入っています。
不足している分は下記のようにインストール可能です。

!pip install python-dotenv

Google Colabでは、先頭に「!」をつけるとターミナル上のコマンドが実行できます。
今回は.envファイルを環境変数に設定するライブラリをインストールしました。

キーなどのオンコーディング派の方はコメントアウトしてOK🙆‍♂️

STEP
ライブラリをインポート

今回使用するライブラリをインポートします。

import collections
import math
import os

from requests_oauthlib import OAuth1Session
STEP
Twitter APIで利用する共通関数を定義

Twitter API のエラーハンドリング用の関数を定義してます。

def is_response_ok(response):
    if response.status_code == 429:
        return False
    elif response.status_code >= 300:
        return False
    return True


def raise_api_exception(response):
    raise Exception(
        f"HTTP status: {response.status_code}, reason: {response.reason}"
    )


ちなみに、HTTPステータスコードの429は「15分間のコール数上限を超えた」ときに発生します。

本当はHTTPステータスが429の場合は、所定の時間待機し、リトライ処理をいれたほうがいいです。
今回はプログラムをシンプルに説明したかったので、リトライ処理の実装は割愛します。

🔑 Twitter APIアクセス準備

ここではTwitter APIと認証するための情報を設定します。
Twitter APIを利用するには、Twitter社に申請し、Twitter APIキー、アクセストークンなどを発行する必要があります。

まだ申請してないよ!って方は次の記事を参考に申請してみてください。

STEP
Googleドライブのファイルから環境変数を設定

先ほどGoogleドライブに保存した.envファイルを読み込みます。

キーなどのオンコーディング派の方は全体的にコメントアウトして、このステップは飛ばしてOKです。

from dotenv import load_dotenv
from google.colab import drive

ENV_FILE_GOOGLE_DRIVE_PATH = "twitter_api/.env"
env_file_path = os.path.join("/drive/My Drive", ENV_FILE_GOOGLE_DRIVE_PATH.lstrip("/"))

drive.mount("/drive")
load_dotenv(env_file_path)

Googleドライブで.envファイルのパスを変えた場合は、定数「ENV_FILE_GOOGLE_DRIVE_PATH」の値を変更してください。

「drive.mount」でGoogleコラボ上から「自分のGoogleドライブのファイル」にアクセスできるようにしてます。
アクセスする際は、第一引数で指定している「/drive」からアクセス可能です。
ここも好きな名前に変えてもOK🙆‍♂️

STEP
Twitter API の認証情報を設定

Twitter API との認証情報をセットします。

キーなどのオンコーディング派の方は、os.environ.get(“xxx”)の箇所を削除し、値を直接書いてください。

session = OAuth1Session(
    os.environ.get("API_KEY"),
    os.environ.get("API_SECRET"),
    os.environ.get("ACCESS_TOKEN"),
    os.environ.get("ACCESS_TOKEN_SECRET"),
)

🔍 検索設定

検索したいキーワード・ハッシュタグを入力します。

TWEET_SERACH_QUERY = "#駆け出しエンジニアと繋がりたい -filter:replies -filter:retweets min_faves:10"
TWEET_SEARCH_MAX_COUNT = 1000

「TWEET_SERACH_QUERY」に検索したいキーワード・ハッシュタグを入力してください。
さらに、Twitterの検索コマンドの入力も可能です。

「TWEET_SEARCH_MAX_COUNT」に検索して取得する最大のツイート数を入力してください。
ただし、いいねユーザー取得API(liking_users)のAPI呼び出し上限は75コールです。
ここで指定したツイート全てのいいねを取得するわけではありませんので、ご了承ください🙇‍♂️

🐦 ツイート取得

検索キーワードなどを元に、ツイートを検索します。

TWEET_SERACH_ENDPOINT = "https://api.twitter.com/1.1/search/tweets.json"
TWEET_SEARCH_ONCE_MAX_COUNT = 100
ENDPOINT_CALL_NUM = math.ceil((TWEET_SEARCH_MAX_COUNT) / TWEET_SEARCH_ONCE_MAX_COUNT)

max_tweet_id = None
searched_tweets = []

for i in range(ENDPOINT_CALL_NUM):
    response = session.get(
        TWEET_SERACH_ENDPOINT,
        params={
            "count": TWEET_SEARCH_ONCE_MAX_COUNT,
            "q": TWEET_SERACH_QUERY,
            "max_id": max_tweet_id,
        },
    )

    if not is_response_ok(response):
        raise_api_exception(response)

    results = response.json()
    tweets = results.get("statuses")
    if not tweets:
        break

    print(f"取得結果: {len(tweets)}")
    for t in tweets:
        searched_tweets.append(
            {
                "id": t["id"],
                "like_count": t["favorite_count"],
            }
        )

    max_tweet_id = tweets[-1]["id"] - 1

print(f"ツイート合計: {len(searched_tweets)}")
print("done!")

このソースコードのポイントは以下

  • Twitter API v1.1の「search/tweets.json」でツイートを検索
  • 検索APIで100件ずつツイートを取得
  • 指定したツイート件数に達する or ツイートが取得できなくなったらAPI呼び出しを終了
  • ツイートのIDといいね数のリストを生成する

👍 いいねしたユーザーを取得

取得したツイートを元に、いいねしたユーザーを取得する。

TWEET_LIKING_USER_ENDPOINT = "https://api.twitter.com/2/tweets/{id}/liking_users"
LIKING_USER_ENDPOINT_LIMIT = 75

USER_FIELDS = ",".join(
    [
        "id",
        "username",
        "name",
        "public_metrics",
    ]
)

# いいね数が多いツイートから探したいので並び替え
searched_tweets.sort(key=lambda x: x["like_count"], reverse=True)


liking_users = {}
liking_user_ids = []
for t in searched_tweets[:LIKING_USER_ENDPOINT_LIMIT]:
    response = session.get(
        TWEET_LIKING_USER_ENDPOINT.format(id=t["id"]),
        params={"user.fields": USER_FIELDS},
    )

    if not is_response_ok(response):
        raise_api_exception(response)

    results = response.json()
    users = results.get("data")
    if users:
        print(f"liking_users_count: {len(users)}")
        for u in users:
            user_id = u["id"]
            liking_user_ids.append(user_id)
            liking_users[user_id] = u

print("done!")

このソースコードのポイントは以下

  • 検索したツイートの中からいいね数が多い75件に絞り込み
  • Twitter API v2の「liking_users」でツイートにいいねしたユーザーを取得する
  • ランキングに表示したユーザー情報を指定する

liking_usersでは、15分間に75回までしかAPIを呼び出せません。
なので、「多くいいねされているツイート」を選ぶように実装しました。

ランキングに表示するユーザー情報を増やしたい方は、USER_FIELDSに追加してください。
私は、id、username、name、public_metrics(フォロー数などの情報)を設定しました。

ユーザー情報を増やしてみたい方は、liking_usersの公式リファレンスを覗いてみてください。

\\ liking_usersのDocumentationを開く//

👥 ユーザーランキング表示

いいね周りをしているユーザーのランキングを表示します。

ランキングには20位まで表示しています。
もっと増やしたい方は、「RANKING_MAX_NUM」の数を増やしてください。

RANKING_MAX_NUM = 20

RANKING_FORMAT = """## Rank {rank}
name: {name}
like_count: {like_count}
like_rate: {like_rate}
FF_rate: {ff_rate}
followers_count: {followers_count}
following_count: {following_count}
tweet_count: {tweet_count}
listed_count: {listed_count}
profile_url: https://twitter.com/{username}/
"""

counter = collections.Counter(liking_user_ids)
for i, row in enumerate(counter.most_common()[:RANKING_MAX_NUM]):
    user_id = row[0]
    like_count = row[1]
    user = liking_users[user_id]
    followers_count = user["public_metrics"]["followers_count"]
    following_count = user["public_metrics"]["following_count"]
    print(
        RANKING_FORMAT.format(
            rank=i + 1,
            name=user["name"],
            like_count=like_count,
            like_rate=round(like_count / LIKING_USER_ENDPOINT_LIMIT, 2),
            ff_rate=round(followers_count / (following_count or 1), 2),
            followers_count=followers_count,
            following_count=following_count,
            tweet_count=user["public_metrics"]["tweet_count"],
            listed_count=user["public_metrics"]["listed_count"],
            username=user["username"],
        )
    )

また、前の章で「USER_FIELDS」にパラメータを追加した場合は、ソースコードを参考に、「RANKING_FORMAT」と、23行目〜33行目のように値をセットする処理の追加もお忘れずに。

いいね周りユーザー集計プログラムをColabで実行

いいねユーザー集計プログラムをGoogle Colab上で実行してみましょう。

STEP
Google Colabでいいねユーザー集計プログラムを開く

以下のボタンをクリックし、Google Colab でノートブックを開きます。

\\ いいね周りユーザー集計プログラムを開く//

STEP
Googleアカウントにログインする

Google Colaboratory でノートブックを実行するには、Googleアカウントへのログインが必要です。
ログインしてから次のSTEPに進んでください。

Googleアカウントを持っていない方は無料で作れます!
この機会にぜひ作成してみてください。

STEP
プログラムを実行する

画面上部のメニューから、【ランタイム – すべてのセルを実行】を選択します。

ノートブックを実行する

すると、警告が表示されます。

ノートブック実行時の警告

Google Colaboratoryでは、ノートブックからGoogleドライブに保存されたファイルにアクセスも可能なので、警告してくれているようですね。

このノートブックでも、.envファイルへのアクセスは行いますが、TwitterAPIの認証にしか使っていません。
心配な方は、再度プログラムを全て確認しましょう!

【このまま実行】をクリックし、次に進みます。

STEP
Googleドライブの認証

実行するとGoogleドライブの認証を求められます。
以下の手順で認証をしてください。

リンクをクリックすると、Googleアカウントの一覧が表示されます。
Googleドライブに.envファイルを作成したアカウントを選択。

次に、Google Colabとの連携許可を求められます。
「許可」をクリック。

許可すると、認証コードが表示されます。
これをコピーし、タブを閉じましょう。

コピーした認証コードを貼り付けます。

Googleドライブとの連携に成功しました!

STEP
ランキング結果の確認

一番下にこのような結果が表示されていればOK🙆‍♂️

表示している内容は以下

  • ユーザー名
  • いいね数
  • いいね数率(75件中いいねを押している割合)
  • FF比(人気アカウント指数、フォロワー数 / フォロー中の人数)
  • フォロワー数
  • フォロー中の人数
  • 総ツイート数
  • 作成リスト数
  • プロフィールURL

以上です、お疲れ様でした^^

おわりに

今回の「いいね周りユーザー集計プログラム」の実行結果を見て分かったことをあげてみます。

  • FF比(人気者指数)が高めのユーザが多い
  • いいね周りしているユーザーは発信にも力を入れている

いいね周りと発信、疎かにしてはいけませんね。
私も頑張りますw

他にもliking_usersのアイディアはあるので、これはまた別記事に。
それでは効率の良いTwitterライフを!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次
閉じる