Zacznij terazZacznij za darmo

Szanowanie limitów zapytań API

Sprawdźmy w praktyce to, czego się nauczyliśmy o obsłudze błędów. W tym ćwiczeniu napotkasz błąd limitu zapytań – oznacza to, że w krótkim czasie wysyłasz zbyt wiele żądań do serwera. Naprawmy to, wprowadzając rozwiązanie, które pozwoli ominąć ten limit i zapobiegnie awarii skryptu.

Twoja biblioteka muzyczna zawiera ponad 3500 utworów – spróbujmy znaleźć najdłuższy z nich, sprawdzając właściwość Length każdego utworu.

Jest jednak pewien problem: API /tracks ma maksymalny rozmiar strony wynoszący 500 elementów oraz limit 1 żądania na sekundę. Nasz skrypt wysyła zbyt wiele żądań w zbyt krótkim czasie. Czas to naprawić!

Pakiety requests i time są już zaimportowane, a poniższe zmienne zostały utworzone za ciebie:

longestTrackLength = 0
longestTrackTitle = ""
headers = {'Authorization': 'Bearer 8apDFHaNJMxy8Kt818aa6b4a0ed0514b5d3'}
page_number = 1

To ćwiczenie jest częścią kursu

Wprowadzenie do API w Pythonie

Zobacz kurs

Instrukcje do ćwiczenia

  • Zacznij od uruchomienia ćwiczenia bez wprowadzania żadnych zmian w kodzie – w konsoli pojawi się błąd 429 Client Error, który informuje, że wysyłamy zbyt wiele żądań do serwera w zbyt krótkim czasie.
  • Napraw skrypt, dodając 3-sekundową pauzę na końcu pętli while – użyj metody sleep z pakietu time.

Interaktywne ćwiczenie praktyczne

Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.

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)
Edytuj i uruchom kod