Tôn trọng giới hạn tốc độ của API
Hãy áp dụng những gì bạn đã học về xử lý lỗi. Trong bài này, bạn sẽ gặp lỗi rate-limit, nghĩa là bạn đang gửi quá nhiều yêu cầu đến máy chủ trong một khoảng thời gian ngắn. Hãy khắc phục bằng cách triển khai một giải pháp tạm để vượt qua giới hạn tốc độ, giúp script không bị lỗi.
Thư viện nhạc của bạn có hơn 3500 bản nhạc, nên hãy thử tìm bản dài nhất bằng cách kiểm tra thuộc tính Length của từng bản.
Nhưng có một vấn đề: API /tracks có kích thước trang tối đa là 500 mục và giới hạn tốc độ là 1 yêu cầu mỗi giây. Script hiện tại của chúng ta đang gửi quá nhiều yêu cầu đến máy chủ trong thời gian ngắn. Hãy sửa nó!
Các gói requests và time đã được nhập sẵn, và chúng tôi đã tạo sẵn cho bạn các biến sau:
longestTrackLength = 0
longestTrackTitle = ""
headers = {'Authorization': 'Bearer 8apDFHaNJMxy8Kt818aa6b4a0ed0514b5d3'}
page_number = 1
Bài tập này là một phần của khóa học
Giới thiệu về API trong Python
Hướng dẫn bài tập
- Hãy chạy bài tập trước mà không thay đổi mã, bạn sẽ thấy console hiển thị
429 Client Error, cho biết chúng ta đang gửi quá nhiều yêu cầu đến máy chủ trong thời gian ngắn. - Sửa script bằng cách thêm khoảng dừng 3 giây ở cuối vòng lặp while, sử dụng phương thức
sleeptừ góitime.
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
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)