我正在尝试使用以下代码从 Youtube 播放列表中获取所有 137 个视频:
function loadVideos() {
let pagetoken = '';
let resultCount = 0;
const mykey = "***********************************";
const playListID = "PLzMXToX8Kzqggrhr-v0aWQA2g8pzWLBrR";
const URL = `https://www.googleapis.com/youtube/v3/playlistItems?
part=snippet
&maxResults=50
&playlistId=${playListID}
&key=${mykey}`;
fetch(URL)
.then(response => {
return response.json();
})
.then(function(response) {
resultCount = response.pageInfo.totalResults;
console.log("ResultCount: " + resultCount);
pagetoken = response.nextPageToken;
console.log("PageToken: " + pagetoken);
resultCount = resultCount - 50;
console.log("ResultCount: " + resultCount);
while (resultCount > 0) {
const URL = `https://www.googleapis.com/youtube/v3/playlistItems?
part=snippet
&maxResults=50
&playlistId=${playListID}
&key=${mykey}
&pageToken=${pagetoken}`;
fetch(URL)
.then(response => {
return response.json();
})
.then(function(response) {
pagetoken = response.nextPageToken ? response.nextPageToken : null;
console.log("PageToken: " + pagetoken);
});
resultCount = resultCount - 50;
}
})
.catch(function(error) {
console.log("Looks like there was a problem: \n", error);
});
} // End of loadVideos function
// Invoking the loadVideos function
loadVideos();
加载前 50 个视频 第二个 50 个视频也被加载 但是我的脚本没有加载列表中剩余的 37 个视频,而是再次加载了之前的 50 个视频。
pagetoken 似乎没有为第三个请求更新。
我的代码有什么问题?
最佳答案
您不需要使用 50 - maxResults
进行数学运算,只需查找 nextPageToken
并在有新 token 时让代码调用 API。
例如
function getUrl(pagetoken) {
var pt = (typeof pagetoken === "undefined") ? "" :`&pageToken=${pagetoken}`,
mykey = "************",
playListID = "PLzMXToX8Kzqggrhr-v0aWQA2g8pzWLBrR",
URL = `https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&maxResults=50&playlistId=${playListID}&key=${mykey}${pt}`;
return URL;
}
function apiCall(npt) {
fetch(getUrl(npt))
.then(response => {
return response.json();
})
.then(function(response) {
if(response.error){
console.log(response.error)
} else {
responseHandler(response)
}
});
}
function responseHandler(response){
if(response.nextPageToken)
apiCall(response.nextPageToken);
console.log(response)
}
apiCall();
如果您看到 api 进行了 3 次调用,因为在第三次之后没有 nextPageToken
关于javascript - 带有 JavaScript 的 Youtube API - 显示播放列表中的所有视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52990581/