YouTubeデータ取得 データ取得

pytchatでYouTubeチャットを取得する方法|保守状況と分析利用時の注意点

2025年9月29日

この記事では、Pythonライブラリ pytchat を使ってYouTubeライブ配信やアーカイブ配信のチャットを取得する方法と、分析に使う際の注意点をまとめます。

先に重要な点として、pytchat のGitHubリポジトリは2022年1月25日にアーカイブされ、現在は読み取り専用になっています。動く環境では便利ですが、今後のYouTube側の仕様変更に追従されない可能性があります。そのため、この記事では「使い方」だけでなく「採用判断」も含めて整理します。

この記事でできること

  • pytchat の現在の保守状況を確認する
  • YouTubeライブチャットをPythonから取得する
  • チャットデータをCSVやJSONとして保存する
  • ユーザー名や投稿内容を扱うときの注意点を整理する
  • 分析用途でどこまで使うか判断する

pytchatとは

pytchat は、YouTubeライブチャットを取得するためのPythonライブラリです。SeleniumやBeautifulSoupを使わずにチャットデータを取得できる点が特徴として紹介されています。

pytchat GitHub

ただし、現在はリポジトリがアーカイブされています。新規の仕組みとして積極的に採用するより、既存コードの理解や、少量の検証用途として扱うほうが無理が少ないと思います。

利用上の注意

ライブチャットには、投稿者名、チャンネル情報、発言内容、投げ銭情報など、個人やコミュニティに近い情報が含まれる場合があります。取得できるからといって、そのまま公開してよいとは限りません。

  • 自分の配信、許諾済み配信、または権利関係を確認できる配信を対象にしてください。
  • 投稿者名やチャンネルIDをそのまま公開しないよう注意してください。
  • チャット本文の長文転載や、特定ユーザーを晒すような使い方は避けてください。
  • Super Chatなど金額情報を扱う場合は、公開範囲や文脈に配慮してください。
  • 保守停止中のライブラリなので、動かない場合の代替手段を用意しておくと安心です。

このサイトでは、チャットデータは「配信中の反応や話題の流れを見るための集計データ」として扱います。個別の発言者を追うためではなく、時間帯ごとの盛り上がりや話題の変化を読む用途に寄せます。

インストール

pytchatはpipでインストールできます。

pip install pytchat

ただし、保守停止中のため、Pythonや依存ライブラリのバージョンによっては動かない可能性があります。新しい環境で動かない場合は、無理に追いかけず、別の方法に切り替える判断も必要です。

基本的な使い方

GitHub READMEでは、次のような形でチャットを取得する例が紹介されています。

import pytchat

video_id = "uIx8l2xlYVY"

chat = pytchat.create(video_id=video_id)

while chat.is_alive():
    for c in chat.get().sync_items():
        print(f"{c.datetime} [{c.author.name}] {c.message}")

このコードでは、チャットが取得できる間、投稿日時、投稿者名、メッセージを表示します。分析用途では、投稿者名をそのまま保存・公開する必要があるかを先に考えたほうがよいです。

CSVに保存する

分析用には、必要な項目だけをCSVに保存します。ここでは投稿者名を保存せず、時間とメッセージ、種別だけに絞ります。

import csv
from pathlib import Path

import pytchat

video_id = "uIx8l2xlYVY"
output_dir = Path("outputs/livechat")
output_dir.mkdir(parents=True, exist_ok=True)

csv_path = output_dir / f"{video_id}_chat.csv"

chat = pytchat.create(video_id=video_id)

with csv_path.open("w", encoding="utf-8-sig", newline="") as f:
    writer = csv.DictWriter(
        f,
        fieldnames=["datetime", "elapsed_time", "type", "message"],
    )
    writer.writeheader()

    while chat.is_alive():
        for item in chat.get().sync_items():
            writer.writerow({
                "datetime": item.datetime,
                "elapsed_time": getattr(item, "elapsedTime", ""),
                "type": item.type,
                "message": item.message,
            })

print(f"saved: {csv_path}")

公開記事で使うなら、このCSVをそのまま見せるより、時間帯ごとの件数、頻出語、話題の変化などに集計して使うほうが安全です。

JSONとして保存する

pytchatはJSON形式で出力する機能もあります。後で構造を確認したい場合は、まずJSON Linesとして保存しておく方法もあります。

from pathlib import Path

import pytchat

video_id = "uIx8l2xlYVY"
output_dir = Path("outputs/livechat")
output_dir.mkdir(parents=True, exist_ok=True)

jsonl_path = output_dir / f"{video_id}_chat.jsonl"

chat = pytchat.create(video_id=video_id)

with jsonl_path.open("w", encoding="utf-8") as f:
    while chat.is_alive():
        for item in chat.get().sync_items():
            f.write(item.json() + "\n")

print(f"saved: {jsonl_path}")

JSONにはCSVより多くの情報が含まれる場合があります。公開前提のデータとして扱う場合は、不要なユーザー情報や金額情報を残していないか確認してください。

アーカイブ配信で使うときの考え方

アーカイブ配信では、elapsedTime のような配信開始からの経過時間が使える場合があります。これを使うと、どの時間帯でチャットが増えたかを見やすくなります。

  • 時間帯ごとの投稿数
  • 特定の話題が出たタイミング
  • イベントや発表後の反応の増減
  • ポジティブ・ネガティブというより、どの話題に反応が集まったか

個人的には、チャット分析では個別発言の良し悪しを判定するより、時間の流れに沿って「どこで反応が増えたか」を見るほうが使いやすいと感じています。

匿名化して扱う

分析に投稿者単位の集計が必要な場合でも、公開用データでは投稿者名をそのまま出さないほうが安全です。必要であれば、内部処理用にハッシュ化したIDを作る程度に留めます。

import hashlib


def anonymize_user(value: str) -> str:
    return hashlib.sha256(value.encode("utf-8")).hexdigest()[:12]

ただし、ハッシュ化しても、元データや周辺情報と組み合わせると個人が推測できる場合があります。公開記事では、ユーザー単位のランキングや特定発言の強調は避けるのが無難です。

保守停止中ライブラリとしての採用判断

pytchatは便利ですが、現在はアーカイブ済みです。新しく長期運用する仕組みに組み込む場合は、次の点を確認してから判断します。

  • 対象動画で現在も取得できるか
  • 取得できない場合に処理を止めず、スキップできるか
  • 保存する項目を最小限に絞っているか
  • ユーザー情報や金額情報を公開しない設計になっているか
  • 代替手段へ切り替える余地があるか

記事としては、pytchatを「今後も必ず使える本命手段」として扱うより、「YouTubeチャット分析の考え方を学ぶための実例」として位置づけるのがよいと思います。

分析記事に使うときの書き方

チャットデータを記事に使う場合は、個別コメントを並べるより、集計結果として見せるほうが読みやすく、リスクも抑えやすいです。

  • 「配信開始10分後にチャット件数が増えた」
  • 「発表直後はゲーム名やキャラクター名に関する投稿が増えた」
  • 「同じ単語が増えたが、文脈は手動確認が必要」
  • 「投稿者名や個別コメントは公開用データから除外した」

このように、取得条件、加工方法、公開しない情報を明記しておくと、読者にもデータの扱い方が伝わります。

関連記事

まとめ

pytchat を使うと、YouTubeライブチャットをPythonから取得し、CSVやJSONとして保存できます。時間帯ごとの投稿数や話題の変化を見る用途では、今でも考え方の参考になります。

一方で、pytchatは保守停止中のライブラリです。長期運用や大規模取得の前提にはしすぎず、少量の検証や既存コードの理解に使うくらいが現実的です。チャットデータを公開記事に使う場合は、投稿者名や個別コメントをそのまま出さず、匿名化・集計・要約を中心に扱うのがよいと思います。

-YouTubeデータ取得, データ取得