2014年10月3日金曜日

ProductAdvertisingAPIで503が出た時の対処方法

概要

ProductAdvertisingAPIはAmazonアソシエイトが提供するAPIサービスです
APIの利用にはDeveloper登録が必要で、APIを使うとオリジナルの広告内容を作ったりすることができます

で、今回APIを実行していたら
Service returned HTTP response code 503
なるエラーが返ってきてうまく結果が取得できない現象が発生したのでその対処方法をご紹介します

環境準備

  • Java over 1.7
  • Product Advertision API 2011-07-27

対処方法

公式のドキュメントを調べてみたら以下を発見しました
https://images-na.ssl-images-amazon.com/images/G/09/associates/paapi/dg/index.html?ErrorNumbers.html

上記に

5XX エラーは、一時的なエラーではなく、Amazon 内部のエラーであることを示しています。503 エラーは、リクエストの送信回数が多すぎるため、リクエストが抑制されていることを示しています。この場合、リクエストの頻度を1秒あたり1回以下に下げる必要があります。

要はリクエストしすぎということです

更に調べると英語のドキュメントですが
https://affiliate-program.amazon.com/gp/advertising/api/detail/faq.html

New per Second 1
New Hourly 3,600

とありました
1秒間に1回しかリクエストしちゃダメ
1時間に3600回しかリクエストしちゃダメ
という制限があるようです
1時間に3600回もリクエストしていないので1秒間のリクエスト間隔が短かったのが原因でした

対処方法はダサいですが、Thread.sleep(5000)として5秒待機させてから次のリクエストをコールすることで対応しました
いちおう私の環境ではスリープを入れたあとは503エラーが発生しないようになりました

スリープ入れたけどダメという場合に503が帰ってきた時にリトライするようにしてください、5回くらいリトライするようにすればきっと大丈夫だと思います
(スリープといい、リトライといいワークアラウンドすぎますね。。。)

もし、制限がいやだという場合は上記リンクを見ればわかりますがお金を払えばlimit解除できるみたいです

0 件のコメント:

コメントを投稿