はじめに
YouTubeのチャット欄のデータを取ろうとして解決していない話です。
前提
YouTubeはスクレイピング(クローリング)禁止です。
YouTube利用規約の「本サービスの利用 > 許可と制限事項」を引用
本サービスの利用には制限があり、以下の行為が禁止されています。
...
3. 自動化された手段(ロボット、ボットネット、スクレーパなど)を使用して本サービスにアクセスすること。ただし、(a)公開されている検索エンジンをYouTube の robots.txt ファイルに従って使用する場合、または(b)YouTube が事前に書面で許可している場合を除きます。
...
ですので、スクレイピングでチャット情報やスパチャの金額を取得するのは利用規約違反です。
やってみたこと
とりあえず、配信中のvideosに含まれているactiveLiveChatId(liveStreamingDetails.activeLiveChatId)を元にYouTube LiveStreaming APIを叩いてみる。
リクエスト
- https://www.googleapis.com/youtube/v3/liveChat/messages
- key={APIキー}
- part=snippet,authorDetails
- liveChatId={liveStreamingDetails.activeLiveChatId}
- maxResults=2000
結果
- APIリファレンスにmaxResultsは200~2000と記載があるのに70件程度しか返却されてこない。
- 10,000件チャットがあったら約143回程度実行する必要がある。クォータに関しては後述。
クォータ(APIの利用回数)
- クォータが許すなら、配信が終了したタイミング(を何とか見つけて)で、activeLiveChatIdが消える前にAPIを叩こうかとも思ったけれどもYouTube Live Streaming APIのQuotaはYouTube Data APIのQuota
CalculatorにそれとなくLive Streaming APIのクォータに言及はあるが対応するクォータが見つけられない。 - stackoverflowを探すにリソースに対応するらしいのだが、LiveChatMessagesに対応するようなリソースが見つけられない。
- video内のリソースと思われlist取得なので「1」だとしても、仮に最大1万チャットあるとして1クォータで70件の取得と見積もると143回。
- 大体、1日の配信数は40~60程度なので、多くて60だとして8,580回。
- あれ、意外といけるのでは…。
- チャット数ってどのくらいなのだろう。1万は少なすぎな気がしてきた。
その他気になった事
- YouTube利用規約内、以下の内容からするに、チャット情報を取得しても、チャットのユーザー名を保持するのはダメっぽい。
- メッセージ本文とかスパチャの金額だけならセーフだと思われる。
- 個人を特定できる可能性のある情報(ユーザー名など)を収集または取得するこ
と。ただし、その人物が許可している場合および本項第3号で認められている場合を
除きます。
現状の結論(状況)
- チャット数と消費クォータ数が未知数なので、今度適当な配信で試してみようと思う。
後日談
- liveChatの取得は諦めた。詳細は別記事参照。