首页 > 解决方案 > Youtube api V3 nextPageToken 重复

问题描述

我使用 url 检索 youtube 播放列表项得到了一些奇怪的结果。首先,youtube 播放列表最多可以包含 200 个播放列表项。

https://www.googleapis.com/youtube/v3/playlistItems?part=snippet,status,contentDetails&maxResults=50&playlistId=PLFgquLnL59alCl_2TQvOiD5Vgm1hCaGSI&key=API_KEY

  1. 当我运行它时,我得到了正确的结果(返回 50 项,总结果 200,每页结果 50,nextPageToken:“CDIQAA”)

  2. 然后我总是使用最后一个 nextPageToken 运行新请求:

https://www.googleapis.com/youtube/v3/playlistItems?part=snippet,status,contentDetails&maxResults=49&playlistId=PLFgquLnL59alCl_2TQvOiD5Vgm1hCaGSI&key=API_KEY&pageToken=CDEQAA

100 个结果,nextPageToken: "CGQQAA",

  1. https://www.googleapis.com/youtube/v3/playlistItems?part=snippet,status,contentDetails&maxResults=49&playlistId=PLFgquLnL59alCl_2TQvOiD5Vgm1hCaGSI&key=API_KEY&pageToken=CGQQAA

到目前为止 150 个结果,nextPageToken: "CDIQAA"

现在这个 nextPageToken 一直在重复它最初的 nextPageToken,为什么,我还没有检索到所有 200 个结果?

标签: paginationyoutubeyoutube-data-api

解决方案


我猜您的代码中存在一些逻辑问题,我在第三次请求后获得了 CJYBEAA 令牌。这里的函数适用于您的播放列表 ID 并返回整个 200 个视频 ID:

def getPlaylistVideosIDs(playlist_id):
    videos_IDs = []
    search = YOUR_YOUTUBE_KEY.playlistItems().list(part='snippet', playlistId=playlist_id,
                                              maxResults=50).execute()

    try:
        nextPageToken = search['nextPageToken']
    except KeyError:
        nextPageToken = None

    for item in search['items']:
        videos_IDs.append(item['snippet']['resourceId']['videoId'])

    while (nextPageToken):
        search = YOUR_YOUTUBE_KEY.playlistItems().list(pageToken=nextPageToken, part='snippet',
                                                  playlistId=playlist_id,
                                                  maxResults=50).execute()
        for item in search['items']:
            videos_IDs.append(item['snippet']['resourceId']['videoId'])

        try:
            nextPageToken = search['nextPageToken']
        except KeyError:
            break

    return videos_IDs

推荐阅读