【发布时间】:2018-11-29 15:44:16
【问题描述】:
我正在尝试加载 YouTube 播放列表的所有视频 ID 并将它们保存在一个数组中以便以后访问它们。
我是从这个开始的:
$.getJSON( "https://www.googleapis.com/youtube/v3/playlistItems", {
part : 'snippet',
playlistId : inputId,
key: API_KEY
}, function(data) {
$.each(data.items, function(i, item) {
var itemId = item.snippet.resourceId.videoId;
videoIds.push(itemId);
}
);
然后我注意到只有输入播放列表的前 5 个视频 ID 保存在我的数组“videoIds”中。显然,YouTube API 使用页面来限制 GET 响应中的项目数量。我没有看到增加每个请求的项目数量的方法。因此,我使用响应键“resultsPerPage”、“totalResults”和“nextPageToken”更新了我的代码。基本上,我现在为播放列表的每一页发送一个 GET 请求:
$.getJSON("https://www.googleapis.com/youtube/v3/playlistItems", {
part : 'snippet',
playlistId : inputId,
key: API_KEY
}, function(data) {
resultsPerPage = data.pageInfo.resultsPerPage;
nextPageToken = data.nextPageToken;
totalResults = data.pageInfo.totalResults;
$.each(data.items, function(i, item) {
var itemId = item.snippet.resourceId.videoId;
videoIds.push(itemId);
});
// if playlist items don't fit on a single page
if (resultsPerPage < totalResults) {
for (var i = 0; i < totalResults/resultsPerPage; i++) {
// send the request again...
$.getJSON("https://www.googleapis.com/youtube/v3/playlistItems", {
part: 'snippet',
playlistId: inputId,
// but this time, with a pageToken
pageToken: nextPageToken,
key: API_KEY
}, function(data) {
// debug logging
console.log("old token:" + nextPageToken);
console.log("new token:" + data.nextPageToken);
// update the nextPageToken for the next iteration
nextPageToken = data.nextPageToken;
$.each(data.items, function(i, item) {
var itemId = item.snippet.resourceId.videoId;
videoIds.push(itemId);
});
});
}
}
});
我的问题:'nextPageToken' 的值永远不会改变。这是我运行代码后控制台的样子:
old token:CAUQAA script.js:62
new token:CAoQAA script.js:63
old token:CAoQAA script.js:62
new token:CAoQAA script.js:63
old token:CAoQAA script.js:62
new token:CAoQAA script.js:63
old token:CAoQAA script.js:62
new token:CAoQAA script.js:63
为什么 GET 响应中的 nextPageToken 值与我在相关 GET 请求中用于 pageToken 的值相同?有没有更简单的方法来获取播放列表的所有 ID?
【问题讨论】:
标签: javascript jquery youtube-api youtube-data-api youtube-javascript-api