楽天 API で商品データが取得できない時が時々あるので、レスポンスデータをログに残してみました。
結果的には、API サーバ側でエラーが発生しているようでした。
サーバエラーの内容
1 2 3 4 5 | ※XXXXXXXXXXは数字 <Status>ServerError</Status> <StatusMsg> APIサーバー内部でのエラーのため、レスポンスを返せません。エラーコード=20091018223256086-XXXXXXXXXX </StatusMsg> |
PHP の simplexml_load_file() でレスポンスデータを取得した場合、
結果的に Body の有無で判定しているのですが、サーバエラーが頻発すると困ります。
どのようなサーバエラーが発生しているのか、具体的な内容も知りたいところですね。
まあ、知ったところでこっちではどうにもならないのですが・・・。
コミュニティでも報告されている
楽天 API のデベロッパーズコミュニティに同じような状況報告があり、楽天側からも正式回答がされていました。
どうやらサーバの負荷みたいですね。
API からの結果は 1 時間の間はキャッシュするようにしているのですが、毎回リクエストしているユーザーもいるでしょうね。
キャッシュした方が明らかに効率的ですが、商品情報の鮮度を考えるとキャッシュ時間もそれほど長くない方がいいかもしれません。
この度はお客様にご迷惑をおかけしております。
ただいま、楽天APIのうち、市場系APIにおきまして、
リクエスト数の増加に伴い、弊社システムの負荷が増え、検索がしにくい状態が続いております。
現在、システム増強などの対応方針を検討中でございます。
後日、今度は 503(AccessForbidden)のエラーが返ってくるようになりました。
気付いたのがこの日だったので、もう少し前からなのかも。
API からの結果は自分のサーバ側で 1 時間キャッシュしているので、多くても 1 時間(3600秒)に 100 回くらいの問い合わせになります。
楽天側では 1 秒間に 1 アクセス以上が制限対象なので謎です。
今のところ、こちらの実装の問題とは思えないですが、様子を見ることにします。
API のリクエスト時にすべてログに残すようにしたので、成功・失敗を時間軸で追えると思います。このログを元に問い合わせてみようかな。
[エラーメッセージ]
アクセス数上限を超えたため、楽天ウェブサービスへのアクセスを制限させて頂いております。
この制限は、一定時間アクセスを中止いただくことで解除されます。
恐れ入りますが、しばらく経ってからご利用いただけますようお願い致します。
なんだかんだで、サンプルソースを渡していた人のサイトでアクセス過多になっていただけでした。
ID を差し替えてもらっていたと思ったのですが、行き違いがあったようです。
なので、2009 年 11 月の対応以降は、アクセス増加の制御はまともになっていると思って良さそうです。
サポートメールの対応もいいです。失礼いたしました。