注意:ライブラリなどを使用すれば更にかんたんに安定に取得できる可能性がありますが、
ここではライブラリを使わずにAPIKEYだけで使えるAPIのみで取得することを優先しています
この工程は省略できますが、毎回IDを教えて上げる必要があります。
get https://www.googleapis.com/youtube/v3/search?
eventType=live&
part=id&
channelId=(チャンネルID)&
type=video&
key=(APIキー)
帰ってくるJSONの(json).items[0].id.videoId
にIDがあるのである場合は次に進む
この工程は省略できますが、毎回IDを教えて上げる必要があります。
get https://www.googleapis.com/youtube/v3/videos?
part=liveStreamingDetails&
id=(1で取得したライブID)&
key=(APIキー)
帰ってくるJSONの(json).items[0].liveStreamingDetails.activeLiveChatId
にIDがあるのである場合は次に進む
基本的にこれを一定時間ごとに叩く
get https://www.googleapis.com/youtube/v3/liveChat/messages?
liveChatId=(2で取得したチャットID)&
part=authorDetails,snippet&
hl=ja&
maxResults=2000&
key=(APIキー)
帰
ってくるJSONの(json).items
に取得できる全てのチャットがあるので、
for文などで回し、最後に取得したチャットの日付を記録し新しいかどうかで判断する
以下、JSによる例
var time = 0; // この変数に読んだコメントのUNIXを入れてそれより古いものを弾くから最初に現在時刻を入れておけば以前のは弾かれる
for (var i = 0; i < (json).items.length; i++) {
var item = json.items[i];
time = new Date(item.snippet.publishedAt).getTime();
if (lastRead < time) {
lastRead = time;
console.log(item);
}
}
items[i].snippet.publishedAt
が ISO 8601(YYYY-MM-DDThh:mm:ss.sZ
) フォーマットの投稿時間。
3で選別したそれぞれのitem
についての話
メッセージ:(item).snippet.textMessageDetails.messageText
ユーザー名:(item).authorDetails.displayName
その他詳細:https://developers.google.com/youtube/v3/live/docs/liveChatMessages
3で選別したそれぞれのitem
の内スーパーチャットについての話
スーパーチャットかどうか:(item).type == "superChatEvent"
(string)
スーパーチャットでない場合以下の項目はありません
金額:(item).superChatDetails.amountMicros
(unsigned long)
(購入通貨のマイクロ単位) 例:購入金額が1ドルの場合、1000000です。
通貨:(item).superChatDetails.currency
(string)
(ISO 4217)[https://en.wikipedia.org/wiki/ISO_4217] で定められた通貨コード
表示用文字列:(item).superChatDetails.amountDisplayString
(string)
購入金額と通貨を含む$ 1.00のような文字列。
コメント:(item).superChatDetails.userComment
(string)
ユーザーがスーパーチャットに含めたコメント
階層:(item).superChatDetails.tier
(unsigned integer)
YouTubeが定めたランクのようなもの。YouTubeUIで一定金額ごとに色が変わったり強調されたりする
触ってみるとわかる。送信しなくてもプレビュー出来るから一度見てみると良い(自分のライブで出来るかはわからない)
何かあったら気軽に質問してください