首页 > 解决方案 > YouTube API nextPageToken 返回不可用的结果

问题描述

我正在使用 Python googleapiclient 加载返回列表的下一页。我的第一个查询返回一个 nextPageToken:

videos = api_service.search().list(
            part='snippet',
            maxResults=20,
            forMine=True,
            type='video').execute()

返回的页面令牌如下所示:

'nextPageToken': 'Cib39GFvs_____81QzNjeU5TRXRMTQD_Af_-NUMzY3lOU0V0TE0AARAUIdZeR03mYiWvOQAAAABMkJ4LSAFQAloLCc8daUP6sg3iEAJgjv3Z_gQ='

在我找到的所有文档中,页面标记几乎总是一个 6 个字符的字符串,如下所示:CA8QAA.

当我再次查询发送返回给我的 pageToken 时,我得到了相同的初始视频结果:

videos = api_service.search().list(
            part='snippet',
            maxResults=20,
            pageToken=request.GET.get('next_page_token'),
            forMine=True,
            type='video').execute()

这可能是什么原因造成的?

标签: pythonpython-3.xyoutubeyoutube-apiyoutube-data-api

解决方案


我想到了。注意=令牌末尾的标志...Jgjv3Z_gQ=

令牌正确地传递给客户端。但是,一旦我尝试执行 GET,就会=转换为 unicode%3D

我的解决方案是不从客户端获取令牌。相反,我将它作为字符串加载到服务器会话中,并直接通过googleapiclient库传递它。

我的代码现在是:

if request.GET.get('next_page_token'):
        page_token = request.session['next_page_token']
else:
    page_token = ''

videos = api_service.search().list(
    part='snippet',
    maxResults=50,
    pageToken=page_token,
    forMine=True,
    type='video').execute()

try:
    request.session['next_page_token'] = videos['nextPageToken']

except KeyError:
    pass

推荐阅读