YouTubeライブのチャット一覧の取得イメージ
今回ご紹介する方法では,下のように「チャット時間」と「チャット内容」の一覧がcsvファイルで出力できます。
一部モザイクにしていますが,ライブ開始前〜終了までの全てのチャットが得られるため,ライブ配信を振り返る場合に使えると思います。
csvファイルなので,Excelやスプレッドシートで開くことができ,分析にも使えると思います。
チャット一覧の取得概要
準備するもの
今回は,Pythonを使って取得するためPythonの導入は前提となります。
他に必要なパッケージは以下の通りです。
- yt_dlp(YouTubeチャット取得)
- pandas(csv出力)
必要モジュールのインストール
yt_dlp,pandasに関してはcondaやpipでインストールしてください。
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を変えるだけでどんなライブアーカイブにも使用できるので,ぜひ使ってみてください!
コメント