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
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
sleepz pakietutime.
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)