我正在尝试加载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?
答案 0 :(得分:1)
Youtube API只能返回50 results per page:
maxResult 。maxResults参数指定结果集中应返回的最大项目数。
注意:此参数支持与 myRating参数,但不支持结合使用 与id参数。可接受的值为1到50(含)。的 默认值为5。
nextPageToken的工作方式如下:
情况: 您正在尝试检索200个视频的列表,但Youtube每次分页只能返回50个结果。
在成功发出第一个请求后,youtube会为您提供前50个视频,因此仅剩150个。前50个视频列表中包含nextPageToken,您可以使用它检索下一个51-100。
因此,您需要将此nextPageToken值传递给pageToken属性并执行另一个请求,这将导致Youtube API为您提供下一个51-100个视频,因此只剩下100个视频。有了这51-100个视频,又有了一个新的nextPageToken,它将用于收回下一个101-150视频。冲洗并重复。
通过有关如何执行此操作的实际演示会更容易,因此请注意this tutorial。