この記事では、Pythonライブラリ pytchat を使ってYouTubeライブ配信やアーカイブ配信のチャットを取得する方法と、分析に使う際の注意点をまとめます。
先に重要な点として、pytchat のGitHubリポジトリは2022年1月25日にアーカイブされ、現在は読み取り専用になっています。動く環境では便利ですが、今後のYouTube側の仕様変更に追従されない可能性があります。そのため、この記事では「使い方」だけでなく「採用判断」も含めて整理します。
この記事でできること
pytchatの現在の保守状況を確認する- YouTubeライブチャットをPythonから取得する
- チャットデータをCSVやJSONとして保存する
- ユーザー名や投稿内容を扱うときの注意点を整理する
- 分析用途でどこまで使うか判断する
pytchatとは
pytchat は、YouTubeライブチャットを取得するためのPythonライブラリです。SeleniumやBeautifulSoupを使わずにチャットデータを取得できる点が特徴として紹介されています。
ただし、現在はリポジトリがアーカイブされています。新規の仕組みとして積極的に採用するより、既存コードの理解や、少量の検証用途として扱うほうが無理が少ないと思います。
利用上の注意
ライブチャットには、投稿者名、チャンネル情報、発言内容、投げ銭情報など、個人やコミュニティに近い情報が含まれる場合があります。取得できるからといって、そのまま公開してよいとは限りません。
- 自分の配信、許諾済み配信、または権利関係を確認できる配信を対象にしてください。
- 投稿者名やチャンネル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分後にチャット件数が増えた」
- 「発表直後はゲーム名やキャラクター名に関する投稿が増えた」
- 「同じ単語が増えたが、文脈は手動確認が必要」
- 「投稿者名や個別コメントは公開用データから除外した」
このように、取得条件、加工方法、公開しない情報を明記しておくと、読者にもデータの扱い方が伝わります。
関連記事
- YouTubeの情報を取得する方法まとめ|公式API・字幕・チャット・文字起こしの使い分け
- YouTube Data API v3入門|APIキー発行からPythonで動画情報を取得するまで
- youtube-transcript-apiで許諾済み動画の字幕を取得する方法|Pythonで分析前処理を整える
まとめ
pytchat を使うと、YouTubeライブチャットをPythonから取得し、CSVやJSONとして保存できます。時間帯ごとの投稿数や話題の変化を見る用途では、今でも考え方の参考になります。
一方で、pytchatは保守停止中のライブラリです。長期運用や大規模取得の前提にはしすぎず、少量の検証や既存コードの理解に使うくらいが現実的です。チャットデータを公開記事に使う場合は、投稿者名や個別コメントをそのまま出さず、匿名化・集計・要約を中心に扱うのがよいと思います。