Соблюдение ограничений API на частоту запросов
Проверим на практике то, что мы узнали об обработке ошибок. В этом упражнении вы столкнётесь с ошибкой превышения лимита запросов: это означает, что скрипт отправляет слишком много запросов к серверу за короткое время. Исправим это, добавив обходное решение, которое позволит не превышать лимит и избежать сбоя.
Ваша музыкальная библиотека содержит более 3500 треков. Попробуем найти самый длинный из них, проверив свойство Length каждого трека.
Однако есть проблема: API /tracks поддерживает максимум 500 элементов на странице и допускает не более 1 запроса в секунду. Наш скрипт отправляет слишком много запросов за короткое время. Давайте это исправим!
Пакеты requests и time уже импортированы, и мы заранее создали для вас следующие переменные:
longestTrackLength = 0
longestTrackTitle = ""
headers = {'Authorization': 'Bearer 8apDFHaNJMxy8Kt818aa6b4a0ed0514b5d3'}
page_number = 1
Это упражнение является частью курса
Введение в API на Python
Инструкции к упражнению
- Сначала запустите упражнение без изменений в коде — вы увидите, что консоль выводит ошибку
429 Client Error: это означает, что скрипт отправляет слишком много запросов к серверу за короткое время. - Исправьте скрипт, добавив паузу в 3 секунды в конце цикла while с помощью метода
sleepиз пакетаtime.
Интерактивное практическое упражнение
Попробуйте выполнить это упражнение, дополнив этот пример кода.
while True:
params = {'page': page_number, 'per_page': 500}
response = requests.get('http://localhost:3000/tracks', params=params, headers=headers)
response.raise_for_status()
response_data = response.json()
print(f'Fetching tracks page {page_number}')
if len(response_data['results']) == 0:
break
for track in response_data['results']:
if(track['Length'] > longestTrackLength):
longestTrackLength = track['Length']
longestTrackTitle = track['Name']
page_number = page_number + 1
# Add your fix here
____.____(3)
print('The longest track in my music library is: ' + longestTrackTitle)