ぷそさんのプログラミング研究所

YouTubeのチャット一覧を取得する方法|5分で簡単にできる

目次

YouTubeライブのチャット一覧の取得イメージ

今回ご紹介する方法では,下のように「チャット時間」と「チャット内容」の一覧がcsvファイルで出力できます。

一部モザイクにしていますが,ライブ開始前〜終了までの全てのチャットが得られるため,ライブ配信を振り返る場合に使えると思います。

csvファイルなので,Excelやスプレッドシートで開くことができ,分析にも使えると思います。

チャット一覧の取得概要

準備するもの

今回は,Pythonを使って取得するためPythonの導入は前提となります。

他に必要なパッケージは以下の通りです。

  • yt_dlp(YouTubeチャット取得)
  • pandas(csv出力)

必要モジュールのインストール

yt_dlppandasに関してはcondapipでインストールしてください。

yt_dlpに関しては,Macの場合は以下のコマンドでインストールできます。

sudo python -m pip install yt-dlp

Windowsの場合は,このURLにアクセスして「yt_dlp.exe」をダウンロードしてください。

チャット一覧の取得方法

チャット一覧取得のための手順は以下のようになっています。

取得までの流れ

  • YouTubeライブのチャット内容を取得
  • jsonファイルをtxtファイルに変換(jsonが使いにくいのでtxtに変換)
  • チャットだけを抽出
  • csvに出力

① YouTubeライブのチャット内容を取得

まずは,チャットの内容を取得します。

from yt_dlp import YoutubeDL
import re
import pandas as pd
import glob
import os

# チャットデータの取得
ydl_video_opts = {
    'outtmpl' : '%(id)s'+'_.mp4',
    'format' : 'best',
    'writesubtitles' : True,
    'skip_download' : True
}

with YoutubeDL(ydl_video_opts) as ydl:
    result = ydl.download([
        'ここにURLを貼り付ける'
    ])

まずは,上のコードをコピペしてください。

その後に,チャット内容を取得したい動画(アーカイブ)のURLを「ここにURLを貼り付ける」に貼り付けてください。

例えば,https://www.youtube.com/XXXXXXXXX というURLの場合は以下のようにします。

with YoutubeDL(ydl_video_opts) as ydl:
    result = ydl.download([
        'https://www.youtube.com/XXXXXXXXX'
    ])

まずは,この部分だけを実行してもらうと,1〜3分程度でフォルダ内に「〜.json」というファイルが作成されると思います。

動画が長ければ取得時間も長くなります。

② jsonファイルをtxtファイルに変換

ステップ①を実行した後に,jsonファイルが出力されているのを確認したら,次のコードを実行してください。(jupyterなどではない場合には,異なる.pyファイルで実行しても大丈夫です。)

# jsonファイルをtxtファイルに変換
jsonFile = glob.glob("*.json")[0]
textFile = jsonFile[:-5] + ".txt"

os.rename(jsonFile, textFile)

これを実行すると,先ほど作成されたjsonファイルtxtファイルになっていると思います。

③ チャットだけを抽出

txtファイルの中身を見ていただくと,非常にわかりにくいデータ形式となっているため,どれがコメントか分かりにくくなっています。

そこで,必要な部分だけ取得するコードを実行します。

この部分はコピペで大丈夫です。

# textファイルに変換したデータの取得
f = open(textFile, 'r', encoding='UTF-8')
data_text = f.read()
split_texts = data_text.split('\n')

# 時間とチャット内容を保存
df = pd.DataFrame(columns=["Time","Chat"])
timeList = []
chatList = []

for split_text in split_texts:
    if re.findall('"timestampText": {"simpleText": "(.*?)"}', split_text) == []:
        continue
    
    time_txt = re.findall('"timestampText": {"simpleText": "(.*?)"}', split_text)[0]
    chat_txt = re.findall('text": "(.*?)"}',  split_text)
    # 文字列が分かれている場合は結合
    joined_txt = ''.join(chat_txt)
    # 保存
    timeList.append(time_txt)
    chatList.append(joined_txt)

df["Time"] = timeList
df["Chat"] = chatList

ここでは,txtファイルを読み込むチャット部分だけ抽出dataframeに保存という流れをしています。

④ csvに出力

dfに「チャット時間」と「チャット内容」が入っているため,これをcsvファイルに出力します。

# csvファイルに書き出す
df.to_csv('chat.csv', encoding='shift-jis', index=False, errors='ignore')

これで,csvファイルに出力することができました。

ソースコード全文(コピペ可)

今回のソースコード全文はこちらです。

from yt_dlp import YoutubeDL
import re
import pandas as pd
import glob
import os

# チャットデータの取得
ydl_video_opts = {
    'outtmpl' : '%(id)s'+'_.mp4',
    'format' : 'best',
    'writesubtitles' : True,
    'skip_download' : True
}

with YoutubeDL(ydl_video_opts) as ydl:
    result = ydl.download([
        'ここにURLを貼り付ける'
    ])

# 【注意】ここまで実行して,jsonファイルが作成されたら下に進む

# jsonファイルをtxtファイルに変換
jsonFile = glob.glob("*.json")[0]
textFile = jsonFile[:-5] + ".txt"

os.rename(jsonFile, textFile)

# textファイルに変換したデータの取得
f = open(textFile, 'r', encoding='UTF-8')
data_text = f.read()
split_texts = data_text.split('\n')

# 時間とチャット内容を保存
df = pd.DataFrame(columns=["Time","Chat"])
timeList = []
chatList = []

for split_text in split_texts:
    if re.findall('"timestampText": {"simpleText": "(.*?)"}', split_text) == []:
        continue
    
    time_txt = re.findall('"timestampText": {"simpleText": "(.*?)"}', split_text)[0]
    chat_txt = re.findall('text": "(.*?)"}',  split_text)
    # 文字列が分かれている場合は結合
    joined_txt = ''.join(chat_txt)
    # 保存
    timeList.append(time_txt)
    chatList.append(joined_txt)

df["Time"] = timeList
df["Chat"] = chatList

# csvファイルに書き出す
df.to_csv('chat.csv', encoding='shift-jis', index=False, errors='ignore')

まとめ

YouTubeライブのチャット一覧を取得する方法はいかがでしたでしょうか。

YouTubeライブのチャットは一覧でみることができないので,この方法でライブの振り返りができると思います。

この方法では,URLを変えるだけでどんなライブアーカイブにも使用できるので,ぜひ使ってみてください!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

このブログでは,PythonやLaTeXの使い方などを紹介しています!
仕事でも趣味でもプログラミングをしています。
ブログは2022年8月にスタートしました。
【経歴】東京大学大学院修了→大手IT企業勤務

コメント

コメントする

目次