こにしの日記

開発やマネジメント関連の話

Amazon Product Advertising API を叩くとAWS.InvalidAssociateが返ってきた件

このエラー関連で自分が詰まったルートと同じような内容の記事がほぼ見つからなかったので自分でも書いておく。

これにどハマりしてかなり時間を無駄にしてしまった。

 

 

やろうとしたこと

普通にPAAPI(Amazon Product Advertising API)のItemSearch叩いて商品検索をしようとしていた。

API初心者なので、特にややこしいこともせず指定したキーワードで商品が返って来ればまずは良いかな、という程度のもの。

 

 

準備と実施したこと

とりあえずアソシエイトとPAAPIに登録。

リファレンスと技術ブログを参考にしつつリクエスト用のURLを作成。

しかし、実行するとAWS.InvalidAssociateが返ってきてしまう。

 

Your [ACCESS_KEY] is not registered as an Amazon Associate. 

 メッセージを読んだところ、「あなたのアクセスキーはAmazonアソシエイトとして登録されていません」とのこと。

「さっき登録したばかりなんだけど。。。」と思いつつ原因調査を開始。

 

解決のためにしたこと

とりあえず時間を空けてみる

 「さっき登録したばかりだからまだ反映されてないのかな?」ということで翌日再実施するも結果は変わらず、流石に1日待ってるのでデータの反映の問題ではないことは確認。

 

アクセスキーの再生成

「さっき作ったAPIに問題があったのか?」 と思ったので再生成して叩いてみるものの結果は同じ。

シークレットキーを意図的に間違えると「キーが間違ってます」的なエラーになったので「キーの組み合わせは合ってるけどもアソシエイトと紐づいてないだけ」という線を攻略する必要があると再認識。

 

登録しているメールアドレスの確認

技術ブログを漁っていると「PAAPIとアソシエイトは同じアドレスで登録しないといけない」という原因で同じエラーが返ってきているというものを多数発見。

自分もアカウント情報を確認してみるもののメールアドレスは同じものを使っていた。

 

Scratchpadの調査

ネットで調査してもそれらしい情報を得られなかったのでリファレンスやScratchpadをいじり始める。

そうすると、Marketplaceのところが国毎に別れているのを発見。

f:id:ymk_1t:20180211125314p:plain

 

実際自分がどこを叩いているかを調べたところ「ecs.amazonaws.com」になっていたのでそれを日本版の「webservices.amazon.co.jp」に変えたところScratchpad上でもローカルでもちゃんと動いた。

 

なんで「ecs.amazonaws.com」を指定していたのかを調べたところ、開発者ガイドに載ってたからだった。

ここは国毎に使い分けないといけないらしい。

自分は日本のAmazonにしか登録していないから、海外のサイトにリクエスト飛ばしてもアソシエイトID登録されてないと判定されたというのが原因だった模様。

 

Product Advertising API

http://ecs.amazonaws.com/onca/xml?Service=AWSECommerceService&Operation=ItemSearch&
AWSAccessKeyId=[アクセスキー ID]&AssociateTag=[ID]&SearchIndex=Apparel& Keywords=Shirt

 

 

また1つ賢くなりました。

今はまた別のエラー出てますが、だいぶ進歩したのでこれ使って開発進めます。