【Python】YouTube Data API でリアルタイムにコメント取得する方法

eye catch プログラミング

はじめに

こんにちは、きたかにです。

配信中の YouTube Live から、リアルタイムにコメントを取得する方法をご紹介します。
言語は Python を使用して作ってみました。

できるだけシンプルな手順、プログラムでご紹介します。

YouTube Data APIの有効化とAPIキーの取得

Google Cloud Console でプロジェクトを作成し、YouTube Data API v3を有効化してAPIキーを取得します。

詳細な手順はこちらの記事で紹介しています。
まだAPIキーを取得していない方は先にこちらをご覧ください。

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

google-api-python-client」が必要になるので、pipインストールをします。

pip install google-api-python-client

YouTube Data API でリアルタイムにコメント取得する

サンプルコード

import os
import time
from googleapiclient.discovery import build

# YouTube Data APIキー(ここに取得したAPIキーを記述)
API_KEY = '************'

# YouTube APIクライアントの初期化
youtube = build('youtube', 'v3', developerKey=API_KEY)

def get_live_chat_id(video_id):
    """
    ビデオIDを元にライブチャットIDを取得
    """
    response = youtube.videos().list(
        part='liveStreamingDetails',
        id=video_id
    ).execute()

    items = response.get('items', [])
    if not items:
        print(f"動画ID {video_id} のライブチャットが見つかりません。")
        return None

    live_details = items[0].get('liveStreamingDetails', {})
    return live_details.get('activeLiveChatId')

def get_live_chat_messages(live_chat_id):
    """
    ライブチャットIDを元にライブコメントを取得
    """
    response = youtube.liveChatMessages().list(
        liveChatId=live_chat_id,
        part='snippet,authorDetails'
    ).execute()

    return response.get('items', [])

def main(video_id):
    # ライブチャットIDを取得
    live_chat_id = get_live_chat_id(video_id)
    if not live_chat_id:
        return

    print(f"ライブチャットID: {live_chat_id}")

    # リアルタイムでライブチャットのコメントを取得
    while True:
        try:
            messages = get_live_chat_messages(live_chat_id)
            for message in messages:
                author = message['authorDetails']['displayName']
                text = message['snippet']['displayMessage']
                print(f"{author}: {text}")

            # 2秒待機してから再取得
            time.sleep(2)
        except KeyboardInterrupt:
            print("プログラムが中断されました。")
            break
        except Exception as e:
            print(f"エラーが発生しました: {e}")
            break

if __name__ == '__main__':
    video_id = input("ビデオIDを入力してください: ")
    main(video_id)

コードの解説

1.get_live_chat_id関数

この関数は、指定したビデオIDからライブチャットIDを取得します。
ライブ配信が存在しない場合や、終了している場合には、ライブチャットIDを取得できません。

2.get_live_chat_messages関数

この関数は、取得したライブチャットIDを元に、リアルタイムでライブチャットのコメントを取得します。

3.ループ処理

whileの条件をTrueとすることで、無限にループをさせています。
get_live_chat_messages関数で取得したコメントから、
・コメントした人の名前
・コメントの内容
を取得し表示します。

ループの最後に2秒待機することで、2秒に一回コメントを取得するAPIが動くようになっています。

注意点

  • YouTube APIにはクォータ制限がありますので、大量にリクエストを送信する場合は制限に注意してください。2秒の待機処理を消してしまうと、すぐに制限に引っかかってしまいます。
  • 「API_KEY」は個人に割り振られるキーのため、必ず他人に見られない、教えないように注意してください。

動作確認

先ほどのプログラムを実行してみます。

python youtube.py

 

実行すると、ビデオIDの入力を求められます。

 

ビデオIDとは、配信のURLの”=”から後ろの部分の文字列です。

ビデオIDをコピペして入力します。

 

正常にコメントが表示されました。

おわりに

今回は、YouTube Data API を使い、配信中のYouTube Liveからコメントをリアルタイムで取得するプログラムをご紹介しました。

ただし、現状の問題としては下記があります。
・ループするたびに一度表示したコメントが表示されてしまう
・ビデオIDを手動でコピペする必要がある

このあたりを含むとコードが長くなってしまうので、今回は割愛しました。
タイミングがあればまた別の記事でご紹介したいと思います!

コメント

タイトルとURLをコピーしました