НачатьНачать бесплатно

Соблюдение ограничений 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)
Редактировать и запускать код