ニコニコ生放送だとタイムシフトで見るときもコメントが見れるけど、 Youtube Live で放送終了後の動画はコメントが見れない。
API からコメントの取得くらいできないかと思って実際に API を叩いてみたがダメだった。
Youtube API
Youtube Live のコメントにアクセスするには、 liveChatId
を取得する必要がある。
2段階のデータアクセスが必要。
videoId
を使って Videos: list API からliveChatId
を取得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
を取得しておいて、放送終了後にアクセスしてみるとどうなるか。
{ "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 でだけでもチャットデータにアクセスできると嬉しいのだが。
もし放送後にもチャットデータを参照したいのであれば、放送中にデータを保存しておくしかなさそう。