この記事では、非公式ライブラリ pytchat を使って、YouTubeアーカイブ配信のチャットリプレイをPythonで取得し、CSVとして保存する方法を解説します。
YouTube Data APIではライブ配信中のチャットは取得できますが、アーカイブ配信に残っているチャットリプレイの取得には対応していません。アーカイブ配信のコメント傾向を分析したい場合は、pytchat のようなライブラリを使う方法があります。
この記事でできること
- YouTubeアーカイブ配信のチャットリプレイを取得する
- 動画IDを指定してチャットコメントを取得する
- コメント本文、投稿時刻、投稿者名などをDataFrame化する
- 取得したチャットをCSVとして保存する
- 取得件数を制限して安全に動作確認する
- チャットデータを分析に使う際の注意点を理解する
想定読者
- YouTubeアーカイブ配信のチャットをPythonで取得したい方
- 配信中のコメント傾向をテキスト分析したい方
- YouTube Data APIでは取得できないチャットリプレイを扱いたい方
- VTuber配信やライブ配信の盛り上がりをデータで見てみたい方
利用上の注意
pytchat はYouTube公式APIではなく、非公式ライブラリです。YouTube側の仕様変更により、突然取得できなくなる可能性があります。
- 本記事は、公開されているチャットリプレイを技術検証・分析前処理として扱うことを目的としています。
- 取得したコメント本文や投稿者情報を、権利者や投稿者の意図に反して再配布・転載することを推奨するものではありません。
- チャットには個人情報、誹謗中傷、不適切表現が含まれる場合があります。公開記事や分析結果に利用する際は十分に配慮してください。
- Super Chatなどの金額情報を扱える場合がありますが、個人別の収益推定やランキング化など、投稿者や視聴者の不利益につながる使い方は避けてください。
- 短時間に大量取得するような使い方は避け、必要な範囲で実行してください。
pytchatで取得できる主な情報
pytchat では、YouTubeのアーカイブ配信に残っているチャットリプレイから、以下のような情報を取得できます。
- コメント投稿時刻
- 投稿者名
- 投稿者のチャンネルID
- コメント本文
- Super Chatの金額情報
- Super Chatの表示文字列
ただし、すべての動画でチャットリプレイが取得できるわけではありません。配信者の設定、動画の状態、YouTube側の仕様変更などにより、取得できない場合があります。
YouTube Data APIとの違い
YouTubeのチャットを扱う方法としては、YouTube Data APIとpytchatがあります。大まかな違いは以下です。
| 方法 | 向いている用途 | 特徴 |
|---|---|---|
| YouTube Data API | ライブ配信中のチャット取得 | 公式API。利用にはAPIキーやOAuth設定が必要 |
| pytchat | アーカイブ配信のチャットリプレイ取得 | 非公式ライブラリ。仕様変更の影響を受けやすい |
ライブ配信中のチャットを公式に扱いたい場合はYouTube Data API、アーカイブ配信のチャットリプレイを分析したい場合はpytchat、という使い分けになります。
ライブラリのインストール
まず、pytchatとpandasをインストールします。
pip install -U pytchat pandasインストール後、Pythonから読み込めるか確認します。
python -c "import pytchat; print('pytchat import ok')"動画IDの確認方法
pytchatでは、YouTubeのURL全体ではなく動画IDを指定します。
たとえば、以下のURLであれば、動画IDは dQw4w9WgXcQ です。
https://www.youtube.com/watch?v=dQw4w9WgXcQコード内では、この動画IDだけを指定します。
最小コード:チャットを取得して表示する
まずは、アーカイブ配信のチャットを取得して、先頭のコメントを表示する最小コードです。
import pytchat
video_id = "YOUR_VIDEO_ID"
chat = pytchat.create(video_id=video_id)
count = 0
while chat.is_alive():
for c in chat.get().sync_items():
print(c.datetime, c.author.name, c.message)
count += 1
if count >= 10:
break
if count >= 10:
breakまずは10件だけ取得して、対象動画でチャットリプレイが取得できるか確認します。
実用コード:チャットをCSV保存する
次に、取得したチャットをDataFrameに変換し、CSVとして保存する例です。動作確認しやすいように、最大500件で停止するようにしています。
from pathlib import Path
import time
import pandas as pd
import pytchat
video_id = "YOUR_VIDEO_ID"
max_comments = 500
output_dir = Path("youtube_chats")
output_dir.mkdir(parents=True, exist_ok=True)
chat = pytchat.create(video_id=video_id)
rows = []
while chat.is_alive():
for c in chat.get().sync_items():
rows.append({
"datetime": c.datetime,
"elapsedTime": c.elapsedTime,
"author": c.author.name,
"authorChannelId": c.author.channelId,
"message": c.message,
"amountValue": c.amountValue,
"amountString": c.amountString,
})
if len(rows) >= max_comments:
break
if len(rows) >= max_comments:
break
time.sleep(1)
df = pd.DataFrame(rows)
csv_path = output_dir / f"{video_id}_chat_archive.csv"
df.to_csv(csv_path, index=False, encoding="utf-8-sig")
print(f"saved: {csv_path}")
print("rows:", len(df))
print(df.head())CSVには、投稿時刻、配信内の経過時間、投稿者名、投稿者チャンネルID、コメント本文、Super Chat関連の情報が保存されます。
Super Chat関連の列は取得できる場合がありますが、個人別の金額集計やランキング化を目的に使うのではなく、配信全体の盛り上がりを見る補助情報として慎重に扱うのがよいです。
コメント本文だけをTXT保存する
コメント本文だけをテキスト分析やワードクラウドに使いたい場合は、TXT形式で保存しておくと扱いやすくなります。
txt_path = output_dir / f"{video_id}_messages.txt"
messages = df["message"].dropna().astype(str).tolist()
txt_path.write_text("\n".join(messages), encoding="utf-8")
print(f"saved: {txt_path}")このテキストを使うことで、コメントに多い単語、話題の変化、配信内の盛り上がりやすいタイミングなどを分析しやすくなります。
実行結果の例
チャットが取得できる動画では、以下のようなCSVを作成できます。
| datetime | elapsedTime | author | message | amountValue | amountString |
|---|---|---|---|---|---|
| 2025-08-01 20:15:32 | 00:12:31 | ユーザーA | おつかれさま! | 0 | |
| 2025-08-01 20:16:10 | 00:13:09 | ユーザーB | 楽しかったです! | 500 | ¥500 |
実際に取得できる件数や列の内容は、対象動画やチャットリプレイの状態によって変わります。
取得したチャットの活用例
- 配信内で盛り上がった時間帯を確認する
- コメントに多い単語や話題を抽出する
- 配信内容と視聴者反応の関係を見る
- 字幕や文字起こし結果とチャットを組み合わせて分析する
- VTuber配信やライブイベントの雰囲気をデータで整理する
チャットデータは、配信者や視聴者の反応を知る手がかりになります。ただし、個別ユーザーの評価やランキング化ではなく、配信全体の傾向を見る目的で扱うのが安全です。
つまずきやすいポイント
チャットが取得できない
すべてのアーカイブ配信でチャットリプレイを取得できるわけではありません。配信者がチャットリプレイを無効にしている場合や、対象動画が非公開・削除済みの場合は取得できません。
YouTube URL全体を指定している
pytchatで指定するのは、URL全体ではなく動画IDです。https://www.youtube.com/watch?v=... の v= 以降を指定してください。
取得に時間がかかる
長時間配信やコメント数が多い配信では、取得に時間がかかります。最初は max_comments を設定して、少ない件数で動作確認するのがおすすめです。
非公式ライブラリのため動作が変わる
pytchatは非公式ライブラリのため、YouTube側の仕様変更により動作しなくなる可能性があります。エラーが出る場合は、ライブラリの更新状況や対象動画でチャットリプレイが見られるかを確認してください。
コメント本文に不適切な内容が含まれる
チャットには、個人情報、誹謗中傷、不適切表現が含まれる可能性があります。公開記事や分析結果に使う場合は、個別コメントをそのまま掲載せず、集計・要約・匿名化した形で扱うのが安全です。
次に読む記事
- youtube-transcript-apiでYouTube字幕を取得する方法
- WhisperでYouTube音声を文字起こしして要約する方法
- YouTube Data APIでチャンネルの動画一覧を取得する方法
- YouTubeの情報を取得する方法まとめ
まとめ
この記事では、pytchat を使ってYouTubeアーカイブ配信のチャットリプレイを取得し、CSVやTXTとして保存する方法を紹介しました。
取得したチャットは、配信内で盛り上がった時間帯の確認、コメント傾向の分析、字幕や文字起こし結果との組み合わせ分析に活用できます。一方で、pytchatは非公式ライブラリであり、取得したコメントには個人情報や不適切表現が含まれる場合もあるため、公開時は集計・匿名化・要約を前提に慎重に扱うことが重要です。