我在Youtube v3 API上苦苦挣扎,特别是pageToken
概念。这是我熟悉的许多其他API的一个,但这个似乎不起作用。
我发出搜索请求并获得预期结果以及nextPageToken
,因为所需结果数超过了所需数量。
然后我执行请求并传递该pageToken值,但之后我开始得到不正确的结果。
这是我到目前为止的代码(我在另一段代码中加载了gapi客户端)...
function getVideos(pageToken) {
var options = {
channelId: "UC1HkhNoUIYYyaruWmxRRUsQ",
q: "GTA V - Stunt practise",
part: "snippet",
maxResults: 10,
order: "date"
};
if (pageToken) {
options.pageToken = pageToken;
}
var request = gapi.client.youtube.search.list(options);
request.execute(function(response) {
var items = response.result.items;
if (!items.length) return;
for (var i = 0; i < items.length; i++) {
var item = items[i];
addVideo({
id: item.id.videoId,
title: item.snippet.title,
description: item.snippet.description,
date: new Date(item.snippet.publishedAt),
thumbnail: item.snippet.thumbnails.high.url
});
}
if (response.nextPageToken) {
getVideos(response.nextPageToken);
}
});
}
function addVideo(video) {
console.log(video.title);
}
getVideos();
第一批结果显示如下:
GTA V - Stunt practise 21
GTA V - Stunt practise 20
GTA V - Stunt practise 19
GTA V - Stunt practise 18 (version 1)
GTA V - Stunt practise 18 (version 2)
GTA V - Stunt practise 17
GTA V - Stunt practise 16
GTA V - Stunt practise 15
GTA V - Stunt practise 14
GTA V - Stunt practise 13
这是正确的(好吧,足够接近)。然而,第二批结果完全错误......
GTA V - Stunt practise 01
GTA V - Stunt practise 07
GTA V - Stunt practise 02
GTA V - Stunt practise 08
它们还不够,它们不是预期的视频而且它们没有按顺序排列。
有没有人有使用Youtube API的经验,特别是使用带有搜索结果的页面令牌?我真的很感激这方面的帮助。
答案 0 :(得分:-1)
我现在相信这是一个错误。我相信的原因,以及我发布答案的原因,是因为它与播放列表完美配合...
function getVideos(prev) {
var options = {
part: "snippet",
playlistId: "PLvocdfFatwmphP9Lj4Mzpht4H75PtLA-p",
maxResults: 10
};
if (prev) {
options.pageToken = prev.nextPageToken;
}
var request = gapi.client.youtube.playlistItems.list(options);
request.execute(function(response) {
var items = response.result.items;
if (!items.length) return;
for (var i = 0; i < items.length; i++) {
var item = items[i];
addVideo({
id: item.id.videoId,
title: item.snippet.title,
description: item.snippet.description,
date: new Date(item.snippet.publishedAt),
thumbnail: item.snippet.thumbnails.high.url
});
}
if (response.nextPageToken) {
getVideos(response);
}
});
}
function addVideo(video) {
console.log(video.title);
}
getVideos();
这意味着我必须在上传时手动将每个视频添加到播放列表,这是我试图避免的。如果我必须参与其中,这不是一个真正的动态过程!
如果有人在我的网页上遇到了同样的问题,可以发布此答案。