Webエンジニアの開発記

Webエンジニアの開発記録です。Java,SAStruts,jQuery,AmazonWebService,マッシュアップ。

Product Advertising APIのTimestampとかSignatureとかは不要

前回の記事で、頑張って各パラメータについて調べました。

後はTimestampとSignatureだなって思っていたのですが、

それについて調べているうちに、Amazonが用意してくれている、

SignedRequestsHelperというクラスがあることが判明。

 

自分で面倒なことをしなくても、

そのクラスのインスタンスを取得して、

キーとかパラメータとか指定してあげれば、

TimestampやSignature意識しなくて良いみたいです。

 

それを知ったのはこのサイトを見つけてから。

にゃんたこす!徒然草。: Amazon署名認証対応(Java)

 

Amazonのサンプルソースを使ってやっていました。

サンプルソースなんて気にもとめていなかったです。

突っ走っていた自分に反省。

 

 SignedRequestsHelper.java をそのままパッケージに追加しました。

f:id:tahkah0124:20131223004246j:plain

 にゃんたこす!の指摘にあります通り、

Base64() ⇒ Base64(0) に修正

しておきました。

 

でも私の場合は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が取得できました。

f:id:tahkah0124:20131223005723j:plain

 

必須パラメータさえ忘れていなければ、

問題なくリクエストが通るはずです。

 

明日はこれをXPathで解析して情報をとってみます。

いつも読んでいただき、ありがとうございます。