Youtube Live 放送終了後の動画でチャットを見たかったが Youtube API を使っても見れない

ニコニコ生放送だとタイムシフトで見るときもコメントが見れるけど、 Youtube Live で放送終了後の動画はコメントが見れない。
API からコメントの取得くらいできないかと思って実際に API を叩いてみたがダメだった。

Youtube API

Youtube Live のコメントにアクセスするには、 liveChatId を取得する必要がある。
2段階のデータアクセスが必要。

  1. videoId を使って Videos: list API から liveChatId を取得
  2. liveChatId を使って LiveChatMessages API からチャットデータにアクセス

Youtube Live 放送中であればこれでチャットデータの取得が可能。

Youtube Live 放送後

Youtube Live が終わった後だと、まず liveChatId が取得できなくなる。

URL: https://www.googleapis.com/youtube/v3/videos?part=liveStreamingDetails&id=iEO1rjU16SY&key=YourApiKey

Live 中

Live 中はこのような Response。

{
 "kind": "youtube#videoListResponse",
 "etag": "\"aaaaaaa-jxt9MnFhfJsoACygTo\"",
 "pageInfo": {
  "totalResults": 1,
  "resultsPerPage": 1
 },
 "items": [
  {
   "kind": "youtube#video",
   "etag": "\"S8kisgyDEblalhHF9ooXPiFFrkc/0-Viv-YeQmW8wgR2wZnDPCBPXqY\"",
   "id": "iEO1rjU16SY",
   "liveStreamingDetails": {
    "scheduledStartTime": "2018-01-06T10:17:40.000Z",
    "scheduledEndTime": "2018-01-06T14:39:46.000Z",
    "activeLiveChatId": "Cg0KC2lFTzFyalUxNlNZ"
   }
  }
 ]
}

Live 終了後

actualStartTime, actualEndTime が増えて activeLiveChatId が消えているのがわかる。

{
 "kind": "youtube#videoListResponse",
 "etag": "\"aaaaaaa/KYex8I1p-jxt9MnFhfJsoACygTo\"",
 "pageInfo": {
  "totalResults": 1,
  "resultsPerPage": 1
 },
 "items": [
  {
   "kind": "youtube#video",
   "etag": "\"S8kisgyDEblalhHF9ooXPiFFrkc/0-Viv-YeQmW8wgR2wZnDPCBPXqY\"",
   "id": "iEO1rjU16SY",
   "liveStreamingDetails": {
    "actualStartTime": "2018-01-06T10:17:56.000Z",
    "actualEndTime": "2018-01-06T14:22:59.000Z",
    "scheduledStartTime": "2018-01-06T10:17:40.000Z",
    "scheduledEndTime": "2018-01-06T14:39:46.000Z"
   }
  }
 ]
}

あらかじめ liveChatId を取得して放送後に Chat API にアクセスしてみる

では放送中に liveChatId を取得しておいて、放送終了後にアクセスしてみるとどうなるか。

URL: https://www.googleapis.com/youtube/v3/liveChat/messages?part=snippet,authorDetails&liveChatId=Cg0KC2lFTzFyalUxNlNZ&key=YourApiKey

{
 "error": {
  "errors": [
   {
    "domain": "youtube.liveChat",
    "reason": "liveChatEnded",
    "message": "The live chat is no longer live."
   }
  ],
  "code": 403,
  "message": "The live chat is no longer live."
 }
}

403 が返ってきてチャットデータにアクセスはできなかった。

おわり

ということで、Youtube Live の放送終了後はチャットデータにアクセスができない。( activeLiveChatId って Response だし放送終了したら active じゃないなってしまう... )

もしかしたら Youtube Live のチャットデータは DB に残っておらず放送終了後に消えてしまっているのかもしれない。もし DB に残っているのであれば API でだけでもチャットデータにアクセスできると嬉しいのだが。

もし放送後にもチャットデータを参照したいのであれば、放送中にデータを保存しておくしかなさそう。