APIのレート制限を守る
エラー処理について学んだ内容を実践してみましょう。この演習では レート制限エラー に遭遇します。これは、短時間にサーバーへ送信するリクエストが多すぎることを意味します。レート制限に引っかからないよう対処し、スクリプトが失敗しないように修正しましょう。
音楽ライブラリには3500を超えるトラックが含まれています。各トラックの Length プロパティを確認して、最も長いトラックを見つけてみましょう。
ただし、ここで問題があります。/tracks APIのページサイズは最大500件で、さらに1秒あたり1リクエストというレート制限があります。私たちが書いたスクリプトは、短時間にサーバーへ多すぎるリクエストを送信しています。これを修正しましょう!
requests パッケージと time モジュールはすでにインポートされており、以下の変数もあらかじめ用意されています。
longestTrackLength = 0
longestTrackTitle = ""
headers = {'Authorization': 'Bearer 8apDFHaNJMxy8Kt818aa6b4a0ed0514b5d3'}
page_number = 1
この演習はコースの一部です
Pythonを使ったAPI入門
演習の手順
- まずはコードを変更せずに演習を実行してみましょう。コンソールに
429 Client Errorが出力され、短時間にサーバーへ多すぎるリクエストを送信していることがわかります。 timeモジュールのsleep関数を使って、whileループの末尾に 3秒の一時停止 を追加し、スクリプトを修正しましょう。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
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)