---
title: Amazon Product Advertising APIをJavaから使うライブラリ aws-apa
tags: []
categories: ["Programming", "Java", "am", "ik", "aws", "apa"]
date: 2011-06-18T18:49:46Z
updated: 2011-09-22T16:54:50Z
---

**2011/07/28 (0.9.1)**

 - 仕様変更に対応 

**2011/08/14 (0.9.2)**

 - WebServiceException(503エラー)が発生した場合にリトライする機能を追加。デフォルト3回
 - associate tagを必須パラメータに変更。

**2011/08/21(0.9.3)**

- ロガーをSLF4Jから[YALF][2]へ変更
- ログメッセージの国際化

**2011/09/23(0.9.4)**

 - 503エラー以外のWebServiceExceptionをすぐにスローするように変更
 - YALFのバージョンを0.9.1に

<hr>

以前本を扱うアプリを作った時にAmazon Product Advertising APIをJavaから使う部分を作り、せっかくだからライブラリに切り出しました。名前はaws-apaです。[Github][1]にコミットしてあります。

「amazon product advertising api java」でぐぐって出てくるJavaサンプルは動かなかったり、日本語の情報を取得できなかったりするので、本ライブラリはそこそこ重宝するかと思います。

JAX-WSでSOAPを叩いています。APIはスキーマからwsimport(ちなみに↓のように)で自動生成したので、作った段階のものはすべてサポートできているはずです。

    wsimport -d ./target/classes -s ./src/main/java -p am.ik.aws.apa.jaxws http://ecs.amazonaws.com/AWSECommerceService/AWSECommerceService.wsdl -b custom.xml .

## 設定
`am.ik.aws.apa.AwsApaRequesterImpl`クラスがAWSにリクエストを送るメインです. 次の情報が必要です。

- Accesskey ID
- Secret Accesskey
- Endpoint (ex. https://ecs.amazonaws.jp)
- Associate Tag

これらの情報をクラスパス直下の`aws-config.properties`に設定します。

    aws.accesskey.id=<Your Accesskey ID for AWS>
    aws.secret.accesskey=<Your Secret Accesskey for AWS>
    aws.endpoint=https://ecs.amazonaws.jp
    aws.associate.tag=ikam-22

`am.ik.aws.apa.AwsApaRequesterImpl.AwsApaRequesterImpl(String, String, String, String)`コンストラクタの引数に与えることもできます。

設定ファイルを使う場合はデフォルトコンストラクタを使います。

## 使用例

### Item Search

    AwsApaRequester requester = new AwsApaRequesterImpl();
    ItemSearchRequest request = new ItemSearchRequest();
    request.setSearchIndex("Books");
    request.setKeywords("Java");
    ItemSearchResponse response = requester.itemSearch(request);

### Item Lookup

    AwsApaRequester requester = new AwsApaRequesterImpl();
    String asin = "489471499X";
    ItemLookupRequest request = new ItemLookupRequest();
    request.getItemId().add(asin);
    request.getResponseGroup().add("Small");
    ItemLookupResponse response = requester.itemLookup(request);

## Mavenへの設定例 

野良レポジトリにデプロイしたのでMavenからも使えます。

### レポジトリの設定

    <repositories>
        ...

        <repository>
            <id>making-dropbox-releases</id>
            <name>making's Maven Release Repository</name>
            <url>http://dl.dropbox.com/u/342817/maven/releases</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>

### 依存関係の設定

    <dependencies>
        ...

        <dependency>
            <groupId>am.ik.aws</groupId>
            <artifactId>aws-apa</artifactId>
            <version>0.9.4</version>
        </dependency>
    </dependencies>

## 依存ライブラリ

- JDK 1.6+
- <s>SLF4J</s> [YALF][2] (0.9.3から移行)
- Commons Codec


  [1]: https://github.com/making/aws-apa
  [2]: https://github.com/making/yalf
