Youtube v3 API - pageToken不起作用

时间:2014-10-24 15:45:10

标签: javascript youtube youtube-javascript-api

我在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的经验,特别是使用带有搜索结果的页面令牌?我真的很感激这方面的帮助。

1 个答案:

答案 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();

这意味着我必须在上传时手动将每个视频添加到播放列表,这是我试图避免的。如果我必须参与其中,这不是一个真正的动态过程!

如果有人在我的网页上遇到了同样的问题,可以发布此答案。