API YouTube nextPageToken возвращает непригодные результаты - PullRequest
0 голосов
/ 12 декабря 2018

Я работаю над загрузкой следующей страницы возвращаемого списка, используя Python googleapiclient.Мой первый запрос возвращает nextPageToken:

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

Возвращенный маркер страницы выглядит примерно так:

'nextPageToken': 'Cib39GFvs_____81QzNjeU5TRXRMTQD_Af_-NUMzY3lOU0V0TE0AARAUIdZeR03mYiWvOQAAAABMkJ4LSAFQAloLCc8daUP6sg3iEAJgjv3Z_gQ='

Во всей найденной мной документации токены страницы почти всегдастрока символов, подобная этой: CA8QAA.

Когда я снова запрашиваю отправку возвращенного мне pageToken, я получаю те же первоначальные результаты видео:

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

Что может быть причиной этого?

1 Ответ

0 голосов
/ 14 декабря 2018

Я понял это.Обратите внимание на знак = в конце токена ...Jgjv3Z_gQ=.

Токен правильно передал его клиенту.Однако, как только я попытался выполнить GET, = конвертировался в юникод %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
...