Все найденные страницы результатов не покрывают общие результаты - PullRequest
0 голосов
/ 09 июля 2019

Я использую API данных YouTube для извлечения всех понравившихся видео из аккаунта аутентифицированного пользователя.

Общее количество понравившихся видео из моей учетной записи превышает 3000. Я использую nextPageToken для перехода на следующую страницу. Однако я могу пройти только до 20 страниц. Поскольку я установил maxResults = 50, это составляет в общей сложности 1000 видео, что мне кажется довольно специфичным. Я не понимаю, почему на 20-й странице нет nextPageToken, хотя 3000 видео не были охвачены, есть ли другое ограничение, которое, возможно, говорит о том, что вы не можете получить более 1000 видео?

Я написал следующий код для хранения количества видео по каждой категории в словаре. Категория ID 10 соответствует музыке, 20 - играм и т. Д.

request  = youtube.videos().list(part = 'snippet', myRating = 'like', maxResults = 50)
likedVideos = request.execute()
print(likedVideos['pageInfo']) # prints {'totalResults': 3398, 'resultsPerPage': 50}

countByCategoryId = {}

for video in likedVideos['items']:
    catId = video['snippet']['categoryId']
    if catId in countByCategoryId:
        countByCategoryId[catId] += 1
    else:
        countByCategoryId[catId] = 1

count = 1

while 'nextPageToken' in likedVideos.keys():
    count += 1
    print('page', count) # prints numbers from 2 to 20
    print(likedVideos['pageInfo']) # prints {'totalResults': 3398, 'resultsPerPage': 50} in every iteration

    request  = youtube.videos().list(part = 'snippet', myRating = 'like', maxResults = 50, pageToken = likedVideos['nextPageToken'])
    likedVideos = request.execute()
    for video in likedVideos['items']:
        catId = video['snippet']['categoryId']
        if catId in countByCategoryId:
            countByCategoryId[catId] += 1
        else:
            countByCategoryId[catId] = 1

print('nextPageToken' in likedVideos.keys()) # prints False
print(sum(countByCategoryId.values()) # prints 974, less than 1000 because some videos were deleted or made private
...