YouTube Live(生放送)のアーカイブからチャットを取得したかったので、ツールを使用して取得してみました。
発端はぽんぽこちゃんねるの以下のアーカイブです。
この中でぽんぽこさんが、「ピーナッツくんが犬山たまきさんのチャンネルでコラボに出る」ということをおっしゃっていましたが、コラボ日時をド忘れしました(ぽんぽこさんではなく私がド忘れしました。)。
アーカイブを確認すればいいのですが、動画時間も短くないので簡単に確認できる方法を探したところ、chat-downloader という YouTubeのチャットメッセージをお手軽に取得できるツールを発見。
このチャットメッセージからコラボについて言及した箇所を特定できると考えました。
例えば、犬山たまきさんとのコラボなら「犬山たまき」「たまき」「のりお」「襲来」「コラボ」といったチャットが出てくるのがぽこピーの生放送での通例です。
これは他のチャンネルでも同じようなことが言えると思います。
私はMacなのでターミナルからコマンドを実行してchat-downloaderをインストールします。
なお、Pythonのインストールなどは行っている前提です。
$ pip install chat-downloader
以下のコマンドを実行し、チャットメッセージを別ファイルに出力します。
$ chat_downloader "https://www.youtube.com/watch?v=ihpkjhwbLvQ" > test.txt
[INFO] Site: youtube.com
[INFO] Retrieving chat for "【生放送】大舞台を終え、家に帰ってきたって話。".
[INFO] Finished retrieving chat messages.
待機中のチャットを含め、8065のチャットが取得できました。
test.txtファイルの中で「襲来」で検索すると 22 件のチャットがヒットし、最初の時間が「43:31」でした。
grepで確認すると以下のようになりました。
$ cat test.txt | grep 襲来
43:31 | xx: 襲来!?
43:31 | xx: 襲来か
43:37 | xx: 襲来!?
43:38 | xx: 襲来!?
43:39 | xx: のりお襲来
43:40 | xx: 襲来?
43:41 | xx: 襲来!
43:41 | xx: 逆襲来だ!
43:42 | xx: 佃煮のりお襲来
43:43 | xx: 襲来!?
43:43 | xx: 襲来してけ
43:44 | xx: 襲来!
43:46 | xx: 佃煮のりお襲来!!!
43:47 | xx: 落花生襲来
43:48 | xx: 襲来!?
43:48 | xx: 豆襲来
43:49 | xx: 襲来させよう
43:49 | xx: 襲来だ
43:51 | xx: 襲来
43:56 | xx: 襲来
44:04 | xx: 襲来!?
44:04 | xx: 襲来だ…
キリが良い「43:00」から再生してみると……
「43:10」ころからコラボの話をしており、無事コラボ日時が分かりました。
ちなみに、公式ではJSONファイルにメッセージを保存する方法として以下のコマンドを紹介しています。
$ chat_downloader https://www.youtube.com/watch?v=5qap5aO4i9A --output chat.json
JSON形式でchat.jsonに保存されますが、メッセージは日本語ではなくUTF-16BE形式で保存されているようなので、以下のようなリダイレクトの方式でファイルに保存しました。
$ chat_downloader "https://www.youtube.com/watch?v=ihpkjhwbLvQ" > test.txt
ちなみにリダイレクトなしで公式の方法で行うと、
chat_downloader "https://www.youtube.com/watch?v=ihpkjhwbLvQ" --output output.json
[INFO] Site: youtube.com
[INFO] Retrieving chat for "【生放送】大舞台を終え、家に帰ってきたって話。".
-2:15 | xx: 待機にんにん
-2:06 | xx: たいき
-1:53 | xx: 葉っぱまでかっこいい
-1:52 | xx: このサムネは見る前から高評価やでぇ・・・
-1:48 | xx: 値段が負の自然数になりそう
-1:47 | xx: 待機にんにん!
-1:45 | xx: raccoon:
-1:44 | xx: ぽん氏の生得領域絶対百均じゃん
.
.
.
[INFO] Finished retrieving chat messages.
上記のように標準出力でチャットが出力されます。
output.jsonの中身は以下となります。
[
{
"action_type": "add_chat_item",
"author": {
"id": "xx",
"images": [
{
"id": "source",
"url": "xx"
},
{
"height": 32,
"id": "32x32",
"url": "xx",
"width": 32
},
{
"height": 64,
"id": "64x64",
"url": "xx",
"width": 64
}
],
"name": "xx"
},
"message": "\u5f85\u6a5f\u306b\u3093\u306b\u3093",
"message_id": "xx",
"message_type": "text_message",
"time_in_seconds": -135,
"time_text": "-2:15",
"timestamp": 1653656269579527
},
.
.
.
]
messageの「\u5f85\u6a5f\u306b\u3093\u306b\u3093」をデコードすると、「待機にんにん」となりますが、デコードする手間がかかります。
今回のように特定の発言だけを確認するためにチャットのコメントを確認したい場合は、標準出力されるチャットを別のファイルにリダイレクトした方がいいでしょう。