Youtubeのチャットをダウンロードする方法
Youtubeで配信やってるとチャットが飛んでくることがある。このチャットを統計とったり分析したりするにはアーカイブからデータを取ってくる必要あり。今回はチャットの取り方について解説。(2021.3が最新。API仕様変わったら動かないかも)メモ書き程度だけど、ここにある情報で環境構築できるようにしたい。結論としては、chat-downloader便利だねってお話。YoutubeAPIから配信リスト取得v3 SearchAPIの仕様は以下。Searchhttps://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 APIpageTokenについては以下仕様です。pageTokennextPageTokenprevPageTokenまた、次を使用して最大ページサイズを設定できます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_|