Product Advertising APIのTimestampとかSignatureとかは不要
前回の記事で、頑張って各パラメータについて調べました。
後はTimestampとSignatureだなって思っていたのですが、
それについて調べているうちに、Amazonが用意してくれている、
SignedRequestsHelperというクラスがあることが判明。
自分で面倒なことをしなくても、
そのクラスのインスタンスを取得して、
キーとかパラメータとか指定してあげれば、
TimestampやSignature意識しなくて良いみたいです。
それを知ったのはこのサイトを見つけてから。
にゃんたこす!徒然草。: Amazon署名認証対応(Java)
Amazonのサンプルソースを使ってやっていました。
サンプルソースなんて気にもとめていなかったです。
突っ走っていた自分に反省。
SignedRequestsHelper.java をそのままパッケージに追加しました。
にゃんたこす!の指摘にあります通り、
しておきました。
でも私の場合はBase64()のままでも問題なかったです。
Base64(0)にする理由は詳しく読んでいないのですが、
最近バージョンアップされて修正されたのかもしれませんね。
↓のようなメソッドを作り、mainメソッドから呼び出しました。
public String getAamazonRequest(String target) throws UnsupportedEncodingException, InvalidKeyException, IllegalArgumentException, NoSuchAlgorithmException {
String endpoint = "ecs.amazonaws.jp";
String awsAccessKeyId = "XXXXX";
String awsSecretKey = "d/PwLGXXXXXXXXXXgmSAocJ49U";
String associateTag = "okXXXXX";
SignedRequestsHelper signedRequestsHelper =
SignedRequestsHelper.getInstance(endpoint, awsAccessKeyId, awsSecretKey);
HashMap<String, String> map = new HashMap<String, String>();
map.put("Service", "AWSECommerceService");
map.put("AssociateTag", associateTag);
map.put("Version", "2011-08-01");
map.put("Operation", "ItemSearch");
map.put("SearchIndex", "Books");
map.put("Keywords", "箱根駅伝");
return signedRequestsHelper.sign(map);
}
HashMapにパラメータをどんどん追加し、
SignedRequestsHelper#signに渡すだけですね。
生成されたURLをブラウザに打ち込んで結果を確認したところ、
↓↓問題なくXMLが取得できました。
必須パラメータさえ忘れていなければ、
問題なくリクエストが通るはずです。
明日はこれをXPathで解析して情報をとってみます。
いつも読んでいただき、ありがとうございます。