use*_*537 1 javascript youtube api
我正在尝试使用以下代码从 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();
Run Code Online (Sandbox Code Playgroud)
前 50 个视频被加载后 50 个视频也被加载但是我的脚本没有加载列表中剩余的 37 个视频,而是再次加载前 50 个视频。
似乎第三个请求没有更新页面令牌。
我的代码有什么问题?
小智 6
您不需要使用 进行数学运算50 - maxResults
,只需查找nextPageToken
并让代码在有新令牌时调用 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();
Run Code Online (Sandbox Code Playgroud)
如果您看到 api 进行了 3 次调用,因为在第三次调用之后没有 nextPageToken
归档时间: |
|
查看次数: |
1302 次 |
最近记录: |