catch-img

【Twitter API v2】特定のユーザーのいいね履歴を調べる方法


目次[非表示]

  1. あるユーザーがどの投稿にいいねしているか
    1. APIを叩く
    2. 安倍元首相はあまりいいねをしない
  2. 取得できる情報

前回のブログでは、特定のツイートにいいねしたユーザー情報を抽出する方法を解説しました。今回は、あるユーザーがいいねした投稿データを抽出する方法を解説します。

機能

エンドポイント
Users who have liked a Tweet
特定のツイートにいいねしたユーザーを抽出
/2/tweets/:id/liking_users
Tweets liked by a user
特定のユーザーがいいねした投稿
/2/users/:id/liked_tweets


あるユーザーがどの投稿にいいねしているか

リツイート情報はタイムライン上で活動が見えますが、いいねはなかなか掴むことができないので、集計したら面白いかもしれません。

今回は安倍元首相が過去誰にいいねをしているかを探ってみたいと思います。

APIを叩く

# 毎回かなり汚いコードですが、データが取れれば良しとします

import requests
import time

# bearer_tokenをDeveloper PortalのDashboardから取得
bearer_token = "xxx"
headers = {"Authorization": "Bearer {}".format(bearer_token)}

# paramsで取得データのオプション指定
params = {
    "expansions":"author_id",
    "user.fields" :"created_at,description,entities,id,location,name,pinned_tweet_id,profile_image_url,protected,public_metrics,url,username,verified,withheld",
          "tweet.fields": "attachments,author_id,context_annotations,conversation_id,created_at,entities,geo,id,in_reply_to_user_id,lang,public_metrics,possibly_sensitive,referenced_tweets,reply_settings,source,text,withheld"
          }

# 安倍元首相のID468122115をURLに入れる
url = "https://api.twitter.com/2/users/468122115/liked_tweets"

created_at = []
author_ids = []
texts = []
names_ids = [] 
names = []

while True:
    res = requests.get(url, headers=headers, params = params)
    likes = json.loads(res.text)
    meta = likes["meta"]

    # result_countに取得した件数が表示されるので0になったら終了
    if meta["result_count"] == 0:
        print("最終ページで終了")
        break
    
    else:
        data_list = likes["data"]
        meta_list = likes["meta"]

        for data in data_list:
            print(data)
            created_at.append(data["created_at"])
            author_ids.append(data["author_id"])
            texts.append(data["text"])

        includes = likes["includes"]
        users = includes["users"]

        for user in users:
            names.append(user["name"])
            names_ids.append(user["id"])

       
        # 1回のリクエストで最大100件取得可能、101件以上取得するためにnext_tokenをparamsに入れる
        if "next_token"  in meta_list.keys():
            params['pagination_token'] =  meta_list["next_token"]
            # 15分900秒で75回制限なので12秒に1回に制限を入れる
            time.sleep(12)

# ユーザー名はincludesというkeyに入っておりauthor_idなどで後々mergeする必要があります

安倍元首相はあまりいいねをしない

このAPIで取得した安倍元首相のいいねは9件のみで、2021年には下記の投稿で1回だけいいねしていることが分かります。
(ちなみにいいねが多そうな高須克弥さんで試したところ、2011年からのデータ計97,160件が取得できました。)


取得できる情報

{
    "created_at": "2021-04-02T11:29:43.000Z",
    "context_annotations": [
        {
            "domain": {
                "id": "10",
                "name": "Person",
                "description": "Named people in the world like Nelson Mandela"
            },
            "entity": {
                "id": "1187470815551340544",
                "name": "Ing-wen Tsai ",
                "description": "President of Taiwan "
            }
        },
        {
            "domain": {
                "id": "35",
                "name": "Politician",
                "description": "Politicians in the world, like Joe Biden"
            },
            "entity": {
                "id": "1187470815551340544",
                "name": "Ing-wen Tsai ",
                "description": "President of Taiwan "
            }
        }
    ],
    "text": "安倍前首相からのいち早いお見舞いのメッセージに感謝します。現在、事故に巻き込まれた方の救助活動に全力で取り組んでいます。台湾に対する変わらぬお心遣いに感謝いたします。 https://t.co/t94eoWZIy6",
    "source": "Twitter for iPhone",
    "referenced_tweets": [
        {
            "type": "quoted",
            "id": "1377892219240148996"
        }
    ],
    "author_id": "155814794",
    "id": "1377946342593503232",
    "reply_settings": "everyone",
    "entities": {
        "annotations": [
            {
                "start": 0,
                "end": 1,
                "probability": 0.5822,
                "type": "Person",
                "normalized_text": "安倍"
            },
            {
                "start": 60,
                "end": 61,
                "probability": 0.8358,
                "type": "Place",
                "normalized_text": "台湾"
            }
        ],
        "urls": [
            {
                "start": 84,
                "end": 107,
                "url": "https://t.co/t94eoWZIy6",
                "expanded_url": "https://twitter.com/AbeShinzo/status/1377892219240148996",
                "display_url": "twitter.com/AbeShinzo/stat…"
            }
        ]
    },
    "lang": "ja",
    "public_metrics": {
        "retweet_count": 4899,
        "reply_count": 513,
        "like_count": 26510,
        "quote_count": 108
    },
    "conversation_id": "1377946342593503232",
    "possibly_sensitive": False
},

取得してみて面白いのはentitiesという項目がある点で、Twitterは裏で全ての投稿を自然言語処理でエンティティ分析していることが分かります。

上記投稿だと「安倍」を58.22%でpersonと分類しており、「台湾」を83.58%でplaceと識別しているようです。

以上、いいね関連のデータ取得方法でした。

ユーザーのいいね履歴は、これまであまり可視化されていない情報かと思います。RTデータと含めてこれらデータを分析してみても面白いかもしれません。
​​​​​​​

当社では広報活動のサポートの他、Twitterのデータ取得や分析、各種ダッシュボード作成などもサポートしています。お問い合せフォームよりお気軽にお問い合せください。

▼合わせて読みたい 

  特定のツイートにいいねしたユーザーを抽出する方法【v2】 | 広報・PR支援の株式会社ガーオン 特定のツイートにいいねしたユーザーの情報を取得する方法を解説します。 広報・PR支援の株式会社ガーオン
  【難解!?】Twitter APIを使って投稿データを収集する方法 | 広報・PR支援の株式会社ガーオン Twitter Search APIを非エンジニアの方にも、なるべく分かりやすく解説し、全体概要や費用などを解説した上で、具体的なデータ取得方法まで解説していきたいと思います。 広報・PR支援の株式会社ガーオン




関連記事

広報・PRやプレスリリースまわりでお困りのことはございませんか?
多数の企業サポートを行ってきた当社が解決いたします。
お気軽にお問合せください。