Я нанял фрилансера для создания аддона, и он сказал, что я должен запросить Google Qoutes, чтобы использовать приложение, которое я запрашивал.Ну, Google продолжает повторять мне, чтобы заполнить форму каждый раз, когда я ее заполняю.Так что не повезло.
Я сделал несколько расчетов, используя это: https://developers.google.com/youtube/v3/determine_quota_cost И я думаю, что когда я выбираю 14 видео, это должно быть около 900 цитат.Тем не менее, после выбора 15-го видео в списке подписки у меня нет 10000 цитат.
Теперь этот аддон либо использовал кто-то другой, либо код запрашивает все выбранные видео снова и снова.
* 1008Может ли кто-нибудь проверить, правильно ли написан код, потому что я не уверен?Я выкладываю соответствующий код ниже.
Этот git также является открытым исходным кодом, если кто-то хочет использовать или отладить аддон: https://github.com/whitevo/youtubeAddon
function getVideoListForChannels(channels) {
let target = $("#channel-video-list");
target.find('.loading-msg').show();
target.find('.content-window, .error-msg').hide();
let allChannels = [];
let filterDate = new Date();
filterDate = filterDate.setDate(filterDate.getDate() - 14); // how many days goes into past
filterDate = new Date(filterDate).toISOString();
channels.forEach((channelId, index) => {
allChannels.push(getChannelVideos(channelId, filterDate));
});
Promise.all(allChannels).then(function(channelVideos) {
let videos = [].concat.apply([], channelVideos);
//sort all videos
videos.sort(function(a,b){
// Turn your strings into dates, and then subtract them
// to get a value that is either negative, positive, or zero.
return new Date(b.snippet.publishedAt) - new Date(a.snippet.publishedAt);
});
buildChanelVideoList(videos);
});
}
function getChannelVideos(channelId, date, nextPageToken) {
const page = nextPageToken ? '&pageToken='+nextPageToken : '';
const url = "https://www.googleapis.com/youtube/v3/search?key={}&channelId="+channelId+"&part=snippet,id&order=date&publishedAfter="+date+"&maxResults=50"+page;
return fireApi(url).then(response => {
let items = response.items;
if (response.nextPageToken) {
return getChannelVideos(channelId, date, response.nextPageToken).then(newItems => items.concat(newItems));
} else {
return items;
}
});
}
function fireApi(url, method, body) {
let accessToken = token;
const requestURL = url;
const requestHeaders = new Headers();
requestHeaders.append('Authorization', 'Bearer ' + accessToken);
requestHeaders.append('Content-Type', 'application/json');
const request = new Request(requestURL, {
method: method ? method : "GET",
headers: requestHeaders,
mode : 'cors',
redirect : 'follow',
body : JSON.stringify(body)
});
return fetch(request).then((response) => {
if (response.status === 200) {
return response.json();
} else {
if (response.status === 401) {
invalidCredentials();
}
throw response.status;
}
});
}