2021/03/17(水)10:14
Youtubeのチャットをダウンロードする方法
Youtubeで配信やってるとチャットが飛んでくることがある。
このチャットを統計とったり分析したりするにはアーカイブからデータを取ってくる必要あり。
今回はチャットの取り方について解説。(2021.3が最新。API仕様変わったら動かないかも)
メモ書き程度だけど、ここにある情報で環境構築できるようにしたい。
結論としては、chat-downloader便利だねってお話。
YoutubeAPIから配信リスト取得
v3 SearchAPIの仕様は以下。
Search
https://www.googleapis.com/youtube/v3/search?part=snippet&maxResults=500&pageToken={50件以上必要な場合に}&channelId={チャンネルID}&key={YoutubeAPIキー}
こんな感じでURLを渡すことで上手くいく。
(Youtube API keyは各自で用意。)
pageTokenはレスポンスに書いてあるnextPageTokenとかと同じ。
{
"kind": "youtube#searchListResponse",
"etag": "k14JK4uzVYZb6xwc1GOxh7LsZGI",
"nextPageToken": "CJYBEAA",
"prevPageToken": "CGQQAQ",
"regionCode": "JP",
"pageInfo": {
"totalResults": 347,
"resultsPerPage": 50
},
・・・
}
[参考]YouTube Data APIで特定のYouTubeチャンネルでアップロードされた動画のみ取得する方法
Search API
pageTokenについては以下仕様です。
pageToken
nextPageToken
prevPageToken
また、次を使用して最大ページサイズを設定できます
maxResults = 50 {許容値1?50}
ページ1にいる場合、prevPageTokenを取得しません
しかし、nextPageTokenを取得します
このトークンを次のリクエストに渡します
pageToken = {nextPageToken最後のリクエストから取得}
再帰的に取る場合は以下のようなコードが使えるかも。
youtube v3 APIを使用して、YouTubeプレイリストからすべての動画を取得します
【Python】Youtube Data Apiを使ってYouTube 動画コメントを全取得する
Youtube のコメントを取得する in Python
ただこの方法、プレイリストや対象の人のチャンネルまで取得してくるので、不要なデータもはいりがち。
もう少しいい方法ないかな?
あと、50件ずつとってくるので件数多くなってくると途中で拾いきれなかったりとかした。
これは検索に頼っている以上、どうしようもない問題なのかも。
(NoSQL系の検索なのかな?完全性が確保されてない気がする)
→この方法だけじゃなくて、各チャンネルを巡回してvideoIdをyoutube-dl - eとかしてとってくる方法のほうが妥当かも?
=============
チャットをダウンロードする
chat-downloaderを使うのが良い。
READMEに従って環境構築してください。
ダウンロードするときにファイル名に注意。
cookieにも対応してます。(--cookie cokkie.txt、みたいな)
詳細な引数仕様はこちら(Usage)
Initialisation Arguments:
--cookies COOKIES, -c COOKIES
Path of cookies file
ってありますね。
ここからはプログラム実際に組んだ時のトラブルシュートとか。
WSL環境で動かしてもよかったんですが、文字化けや諸々環境対応が面倒なので、cmd環境でpython環境構築して動かすことを推奨。
(docker勢は自力でがんばってもろて)
pythonからcmdを動かす方法は以下。
pythonなどでcp932系のエラーが出る時はファイル名を以下文字列カットすることで解決します。
ファイル名として無効な文字を削除(Python)
Pythonのopen()で詰まった話
ファイル名に日付を付ける時はstrptime()が便利だった。
Pythonのdatetimeで日付や時間と文字列を変換(strftime, strptime)
Python, datetime, pytzでタイムゾーンを設定・取得・変換・削除
jsonの扱い方。
PythonでJSON 読み込み
できたもの↓
チャットダウンローダ
videoIdがわかれば動くはずだよ
videoIdのリストはコメント取得同様にsearchAPIから取ってくる。
win10のcmdで動作します。
chat-downloaderはpip install辺りまで済ませておいてください。
出力結果ファイルやcookie.txtの用意も忘れずに。
(対象チャンネルでcookier.txtを拾ってExportして上書き)
上記スクリプトを実行するとチャット欄のjsonファイルが出力されるが、文字コードが違うのでそれを変換するスクリプトが欲しい。
(まだ作ってない。)
もう1つの.txtのほうが人間が読める形式だと思う。
もっと詳しく書きたいけど、ひとまずのメモ書きとして情報まとめてみた。
Youtubeのチャット欄は分析可能であるってことがわかってもらえると幸い。
他に紹介するとしたら、ytcFilterも便利。
ソースコード
ytcFilter とは・・・
===
YouTube Liveおよびアーカイブの特定のチャットを抽出してリスト化する。
発言者名、チャットに含まれるテキスト、モデレーター、チャンネル主、正規表現を配信/アーカイブごとに任意に設定可能。
リスト化されたコメントはページを閉じるまで残るため、他のチャットに埋もれることなく確認できる。
ライバーの発言を翻訳してくれるリスナーの発言を抽出する形で海外リスナーがよく使っている拡張機能のひとつ。
===
[引用元]にじさんじ非公式wiki
海外勢の配信とかを視る時に使える。自動翻訳便利。
ww
,,#´ω`#,,
#´・_・`#ノシ
#´・ρ・`#ノシ
#´・▽・`#ノシ
#´・w・`#ノシ
#´・ω・`#ノシ
#´・∀・`#ノシ
#´・Д・`#ノシ
#´・-・`#ノシ
#´・ε・`#ノシ
#´・ヮ・`#ノシ
#´・⊇・`#ノシ
..[..===..]
|ノシショボテン|
|_\3500_|