ポジティブに生きていく

長い文章を書く

YouTube Live で放送中のチャット取得の手法

今日はYouTube Live のAPIについて調べたよ.
効率的に取得できるようになったらYouTube liveのコメント利用して何かしたいよ..


YouTube Live で放送中のチャット取得の手法

基本的には, メモ帳 | Youtube LiveStreaming APIで配信のコメントを取得する の記事を読めばできると思う. ただしchatidの取得で少しつまづいたのでここに記録しておく.
(後々, Youtube Live 放送終了後の動画でチャットを見たかったが Youtube API を使っても見れない - star__hoshi's diary を読んだ. まさに同じことがやりたかったけどできないぽい..)

本当はやりたいこと: 放送終了後YouTubeのチャットのリプレイを取得したい → 多分無理

なので, まずはリアルタイムで放送しているYouTube liveのコメント取得について書く.

まず,https://www.googleapis.com/youtube/v3/videos?part=liveStreamingDetails&id=xxxxxx を叩いて liveStreamingDetails.activeLiveChatIdからChatIdを取得する.

この際にリアルタイムで行われている場合には, activeLiveChatIdというChatIdが取得できる.

[{'etag': '"XI7nbFXulYBIpL0ayR_gDh3eu1k/lg5PCSBfPU3oLaHomBP10wW4Z1U"',
  'id': 'T-EKwzauGyk',
  'kind': 'youtube#video',
  'liveStreamingDetails': {'activeLiveChatId': 'Cg0KC1QtRUt3emF1R3lr',
   'actualStartTime': '2018-08-27T05:58:52.298Z',
   'concurrentViewers': '2913',
   'scheduledStartTime': '2018-08-27T06:00:00.000Z'}}]

一方で, すでに放送が終わっている場合には, actualEndTimeが返ってくる.

[{'etag': '"XI7nbFXulYBIpL0ayR_gDh3eu1k/pbvrzUQdCep-jOC90vteJxSDJGw"',
  'id': 'JnrlKBWY2Lo',
  'kind': 'youtube#video',
  'liveStreamingDetails': {'actualEndTime': '2018-07-05T10:29:47.000Z',
   'actualStartTime': '2018-07-05T10:00:55.000Z',
   'scheduledStartTime': '2018-07-05T10:00:00.000Z'}}]

ちなみに, 動画(≠アーカイブ)の場合には以下のような結果が返ってくる

[{'etag': '"XI7nbFXulYBIpL0ayR_gDh3eu1k/lBlb0E3FUGTfvTWXg04QHRMVkRw"',
  'id': 'M8MzPSYuDlo',
  'kind': 'youtube#video'}]

次に先ほど取得したactiveLiveChatIdを含めて https://www.googleapis.com/youtube/v3/liveChat/messages?part=snippet,authorDetails&liveChatId=xxxxxx を叩くとチャットを取得できるぜ.

放送終了後のチャットを取得できるかについて

まさにやりたいことはここから..
APIで取得できない.. リプレイの場合, webで確認してみると get_live_chat_replay?continuation=xxxxxxxxxxx.jsonで一定間隔でチャットを取得してることがわかった.
ここでcontinuationを知る方法について調査なう. videoIdから一番初めのcontinuationの値を知ることができたらあとは芋づる式に取得することができる. get_live_chat_replay?continuation=xxxxxxxxxxx.jsonには次に取得するcontinuationの値が含まれているから...