Моя цель - извлечь все видео из плейлиста, который может содержать много видео, ~ 3000 и может содержать более 5000 видео. При maxResults = 50 и после реализации разбиения на страницы с помощью nextPageToken я могу вызывать API только 20 раз, после чего nextPageToken не отправляется с ответом
Я вызываю API из приложения Python. У меня есть цикл while до тех пор, пока nextPageToken не будет отправлен, в идеале это должно произойти ПОСЛЕ того, как все видео извлечены, но он преждевременно завершает работу после вызова API 19-20 раз
def main():
youtube = get_authorised_youtube() # returns YouTube resource authorized with OAuth.
first_response = make_single_request(youtube, None) # make_single_request() takes in the youtube resource and nextPageToken, if any.
nextPageToken = first_response["nextPageToken"]
try:
count = 0
while True:
response = make_single_request(youtube, nextPageToken)
nextPageToken = response["nextPageToken"]
count += 1
print(count, end=" ")
print(nextPageToken)
except KeyError as e: # KeyError to catch if nextPageToken wasn't present
response.pop("items")
print(response) # prints the last response for analysis
if __name__ == '__main__':
main()
фрагмент make_single_request()
:
def make_single_request(youtube, nextPageToken):
if nextPageToken is None:
request = youtube.videos().list(
part="id",
myRating="like",
maxResults=50
)
else:
request = youtube.videos().list(
part="id",
myRating="like",
pageToken=nextPageToken,
maxResults=50
)
response = request.execute()
return response
Ожидается, что код будет содержать до 50 вызовов API, но, как ожидается, будет совершать только около 20 вызовов, соответственно.
Примечание. Следующий код был выполнен с неоплаченной учетной записью GCP. Выполненные вызовы имеют part = "id", стоимость квоты которого равна 0. Предел вызовов в соответствии с GCP составляет: 10000. По квоте на консоль я делаю только 20.
Выход:
1 CGQQAA
2 CJYBEAA
3 CMgBEAA
4 CPoBEAA
5 CKwCEAA
6 CN4CEAA
7 CJADEAA
8 CMIDEAA
9 CPQDEAA
10 CKYEEAA
11 CNgEEAA
12 CIoFEAA
13 CLwFEAA
14 CO4FEAA
15 CKAGEAA
16 CNIGEAA
17 CIQHEAA
18 CLYHEAA
19 {'kind': 'youtube#videoListResponse', 'etag': '"ETAG"', 'prevPageToken': 'CLYHEAE', 'pageInfo': {'totalResults': TOTAL_RESULTS(>4000), 'resultsPerPage': 50}}
РЕДАКТИРОВАТЬ: после изменения maxResults=20
наблюдается, что код выполняет около 50 вызовов API, поэтому общее количество видео, которое может быть извлечено, является постоянным на уровне 1000.