読者です 読者をやめる 読者になる 読者になる

ゆうなんとかさんの雑記帳的な。

Twitterで踊ったり音ゲーしたりしてるあの名前がよくわからない人が書いてるらしいよ。

AmazonのAPI調べてるんだけど、今日中ではついに叩けなかった

ドキュメントに書いてないけど必要なパラメーターがあるというトラップに引っかかってしまった

やりたいこと

スクレイピング*1ではなくてAPIから、ASINをもとに商品情報を取りたい、ちなみに今回は本だけでいいです。

ここまでわかった

まず、

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

Product Advertising API

というサンプルリクエストが提示されていますが、これ動きません

<?xml version="1.0"?>
<ItemSearchErrorResponse xmlns="http://ecs.amazonaws.com/doc/2005-10-05/">
  <Error>
    <Code>MissingParameter</Code>
    <Message>The request must contain the parameter Signature.</Message>
  </Error>
  <RequestId>e884b4a1-8bcd-4ce3-9b88-6ccd64018297</RequestId>
</ItemSearchErrorResponse>

ちゃんとIDを埋めてもこんなのが返ってきます。(本物のレスポンスはインデントされてない)
実は書名が必要なのが見て取れますが、ならばと署名をつけてみると今度は

<Message>The request must contain the parameter Timestamp.</Message>

というのが返ってきます(Message要素のみ引用)。
そうかそうならばと今度はタイムスタンプをつけてみたところ…

<Error>
  <Code>SignatureDoesNotMatch</Code>
  <Message>The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for details.</Message>
</Error>

(Error要素のみ引用)
・・・・・・・・・・・・・・。
今日はここまででした。ライブラリー使ってもいいんよってところですが、一応確認しておきたかったのでリクエスト投げてるんです。ライブラリー使うにしてもどのみち認証通らないとお話にならないのでこれは暗雲立ち込めてきましたですね…

*1:そこまでAmazonAPI利用規約はしっかり読み切れてないけど、スクレイピングで情報ぶっこ抜くのはAPI提供しているサービスではだいたい御法度。Twitterとかそうだったはず