В последнее время я боролся с проблемой управления использованием стандартной квоты API YouTube Data API V3 (10 000 ежедневных запросов).В моем приложении JS мне нужно запрашивать число подписчиков и одновременных наблюдателей каждые 60 секунд, имея только идентификатор канала.Поэтому вот два шага, которые я выполняю: 1. Используйте идентификатор канала для получения количества подписчиков и идентификатор живого потока:
function show_yt_subs(room, youtube_id){
//var envelope = Object.values(JSON.parse(msg))[0];
console.log('[DEBUG] YT_SUBS Request - YT ID: %s.', youtube_id);
// Replace id and key with the accountId and an API key.
// Replace id and key with the accountId and an API key.
var id = youtube_id;
var yt_streamid;
var url = "https://www.googleapis.com/youtube/v3/channels?part=statistics&id=" + id + "&key=" + key;
request({
method: 'GET',
url: url
}, function (err, response, text) {
if (err) {
return;
}
var json = JSON.parse(text);
if (json.error) {
console.log('[DEBUG]YT API Error: ' +JSON.stringify(json.error.errors));
return;
}
if (!json.items) {
console.log('[DEBUG]YT_SUBS unavailable. Check your YouTube ID in Preferences tab.');
return;
} else {
var yt_subs = json.items[0].statistics.subscriberCount;
console.log(yt_subs);
io.to(room).emit('yt_subs', yt_subs);
show_yt_streamid(room, youtube_id);
}
});
}
2.После получения текущего идентификатора Live Stream, получите число одновременных наблюдателей и лайков:
function show_yt_stats(room, yt_streamid){
var key = "##############";
console.log('[DEBUG] YT_STATS Request - YT ID: %s.', yt_streamid);
/*var data = buildApiRequest('GET',
'/youtube/v3/videos',
{'id': youtube_id,
'part': 'snippet,statistics,liveStreamingDetails'}); */
var api_url = 'https://www.googleapis.com/youtube/v3/videos?id='+yt_streamid+'&part=snippet,statistics,liveStreamingDetails&key=' + key;
request({
method: 'GET',
url: api_url,
}, function (err, response, data) {
if (err) {
return;
}
var data = JSON.parse(data);
var getStreamTitle = data.items[0].snippet.title;
var getStreamLikes = data.items[0].statistics.likeCount;
var getStreamViews = data.items[0].liveStreamingDetails.concurrentViewers;
console.log('[DEBUG] Information received: ');
console.log('[DEBUG] Title: %s - LikesCount: %s - Views: %s.', getStreamTitle, getStreamLikes, getStreamViews);
console.log('[DEBUG] Emitting YT_STATS to room: %s', room);
io.to(room).emit('yt_stats', JSON.stringify({"yt_title":getStreamTitle,"yt_watchers":getStreamViews, "yt_likes":getStreamLikes}));
return;});
Обе эти функции выполняются каждые 60 секунд.Это дает два запроса каждую минуту на пользователя.Если пользователь выполняет потоковую передачу в течение примерно 6 часов, он выдаст нам около 720 запросов на пользователя в обычном потоке.Придерживаясь такой квоты (например, с 10 пользователями), она высохнет менее чем через 2 часа.Теперь я понимаю, что одним из решений здесь было бы расширение квоты по умолчанию, но в то же время мне интересно, есть ли другой способ не отставать от суточной квоты по умолчанию и предоставить себе данные выше?