Menghormati batas laju API
Mari kita uji apa yang sudah dipelajari tentang penanganan galat. Pada latihan ini Anda akan menemui galat batas laju (rate limit), yang berarti Anda mengirim terlalu banyak permintaan ke server dalam waktu singkat. Mari perbaiki dengan menerapkan solusi untuk mengakali batas laju sehingga skrip kita tidak gagal.
Pustaka musik Anda berisi lebih dari 3500 trek musik, jadi mari kita coba menemukan trek terpanjang dengan memeriksa properti Length dari setiap trek.
Namun ada masalah: API /tracks memiliki ukuran halaman maksimum 500 item dan batas laju 1 permintaan per detik. Skrip yang kita tulis mengirim terlalu banyak permintaan ke server dalam waktu singkat. Mari kita perbaiki!
Paket requests dan time sudah diimpor, dan kami telah membuat variabel berikut untuk Anda:
longestTrackLength = 0
longestTrackTitle = ""
headers = {'Authorization': 'Bearer 8apDFHaNJMxy8Kt818aa6b4a0ed0514b5d3'}
page_number = 1
Latihan ini adalah bagian dari kursus
Pengantar API di Python
Petunjuk latihan
- Mulailah dengan menjalankan latihan tanpa mengubah kode; Anda akan melihat konsol menampilkan
429 Client Erroryang menunjukkan kita mengirim terlalu banyak permintaan ke server dalam waktu singkat. - Perbaiki skrip dengan menambahkan jeda 3 detik di akhir while-loop menggunakan metode
sleepdari pakettime.
Latihan interaktif praktis
Cobalah latihan ini dengan menyelesaikan kode contoh berikut.
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)