API данных YouTube v3. Как управлять квотой API по умолчанию при необходимости отправлять запросы каждые 60 секунд? - PullRequest
0 голосов
/ 05 марта 2019

В последнее время я боролся с проблемой управления использованием стандартной квоты 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 часа.Теперь я понимаю, что одним из решений здесь было бы расширение квоты по умолчанию, но в то же время мне интересно, есть ли другой способ не отставать от суточной квоты по умолчанию и предоставить себе данные выше?

1 Ответ

0 голосов
/ 05 марта 2019

Я не думаю, что есть какой-то другой способ, что вы делаете.Квота - это квота, если вам нужны данные, тогда вам нужно использовать свою квоту.

Запросить расширение

Вам следует рассмотреть вопрос о продлении своей квоты.

enter image description here

Нажмите на карандашный карандаш

enter image description here

Нажмите, чтобы увеличить квоту и заполнитьформа.Чтобы получить ответ, вам может потребоваться некоторое время, чтобы заплатить за расширенную квоту, но обычно они будут работать с вами.

...