🎥

[YouTube API] ライブ/配信中のチャットを取得する

2025/01/31に公開

はじめに

この記事では、YouTube APIを活用して配信中のチャットを取得する方法をまとめております。

取得イメージ
$ python src/main.py
[2025-01-31 10:14:43] 小倉あん: テスト
[2025-01-31 10:14:46] 小倉あん: テスト
[2025-01-31 10:14:48] 小倉あん: テスト
参考資料

結論

注意事項

1. YouTube Data API Keyを発行

Google Cloudで新規プロジェクトを作成する。
検索窓に「YouTube」と入力し、YouTube Data API v3を選択し有効化する
youtube-api-queries

2. インストール

pip install -r requirements.txt
requirements.txt
google-api-python-client
python-dotenv
詳細情報

$ pip show google-api-python-client
Name: google-api-python-client
Version: 2.160.0
Summary: Google API Client Library for Python
Home-page: https://github.com/googleapis/google-api-python-client/
Author: Google LLC
Author-email: googleapis-packages@google.com
License: Apache 2.0
Location: C:\Users\xxxxx\AppData\Local\Programs\Python\Python312\Lib\site-packages
Requires: google-api-core, google-auth, google-auth-httplib2, httplib2, uritemplate
$ pip show python-dotenv
Name: python-dotenv
Version: 1.0.1
Summary: Read key-value pairs from a .env file and set them as environment variables
Home-page: https://github.com/theskumar/python-dotenv
Author: Saurabh Kumar
Author-email: me+github@saurabh-kumar.com
License: BSD-3-Clause
Location: C:\Users\xxxxx\AppData\Local\Programs\Python\Python312\Lib\site-packages
Requires:
Required-by: browser-use, lmnr

2. コーディング

YOUTUBE_API_KEYは、Google Cloudで表示されているKeyを入力する
VIDEO_IDは、配信中のIDを入力する

例えば、下記動画であればVIDEO_ID=FM_T0rNH-Bgになる

.env
YOUTUBE_API_KEY=XXXXXXXXXXXXXXXXXXXXXXX
VIDEO_ID=XXXXXXXXXX
main.py
import os
from googleapiclient.discovery import build
from datetime import datetime, timezone
from dotenv import load_dotenv

# .envファイルの読み込み
load_dotenv()

# .envから環境変数を取得
API_KEY = os.getenv('YOUTUBE_API_KEY')  # APIキー
VIDEO_ID = os.getenv('VIDEO_ID')  # 動画ID

# YouTube APIのクライアントのセットアップ
YOUTUBE_API_SERVICE_NAME = "youtube"
YOUTUBE_API_VERSION = "v3"
youtube = build(YOUTUBE_API_SERVICE_NAME, YOUTUBE_API_VERSION, developerKey=API_KEY)

def get_live_chat_id(api_key, video_id):
    """ 指定したビデオIDのライブチャットIDを取得する """
    youtube = build("youtube", "v3", developerKey=api_key)

    response = youtube.videos().list(
        part="liveStreamingDetails",
        id=video_id
    ).execute()

    items = response.get("items", [])
    if not items:
        print("ライブ動画が見つかりませんでした")
        return None

    live_chat_id = items[0]["liveStreamingDetails"].get("activeLiveChatId")
    if not live_chat_id:
        print("ライブチャットIDが見つかりませんでした")
        return None

    return live_chat_id

def get_live_chat_messages(api_key, live_chat_id):
    """ 指定したライブチャットIDのメッセージを取得する """
    youtube = build("youtube", "v3", developerKey=api_key)

    response = youtube.liveChatMessages().list(
        liveChatId=live_chat_id,
        part="snippet,authorDetails"
    ).execute()

    messages = []
    for item in response.get("items", []):
        author = item["authorDetails"]["displayName"]
        message = item["snippet"]["displayMessage"]
        timestamp = item["snippet"]["publishedAt"]

        # タイムスタンプを UTC から日本時間 (JST) に変換
        dt = datetime.fromisoformat(timestamp.replace("Z", "+00:00"))
        jst = dt.astimezone(timezone(timedelta(hours=9)))  # JST に変換

        messages.append(f"[{jst.strftime('%Y-%m-%d %H:%M:%S')}] {author}: {message}")

    return messages

if __name__ == "__main__":
    live_chat_id = get_live_chat_id(API_KEY, VIDEO_ID)
    if live_chat_id:
        messages = get_live_chat_messages(API_KEY, live_chat_id)
        for msg in messages:
            print(msg)

3. 結果

python src/main.py
$ python src/main.py
[2025-01-31 10:14:43] 小倉あん: テスト
[2025-01-31 10:14:46] 小倉あん: テスト
[2025-01-31 10:14:48] 小倉あん: テスト

連続で小倉あんというアカウントから「テスト」のコメントをタイムスタンプと一緒に取得する事が出来ました!

GitHubで編集を提案

Discussion