JAVAでAmazon Product Advertising APIを使用するときのメモ(2016/11時点)

JAVAでAmazon Product Advertising APIを使用するときの手順・サンプルコードをメモ書きします。なお、当該APIは今後仕様変更の可能性もあるので、今回のメモは2016/11時点での内容とします。

## 1.アカウント作成
amazonのサイトでアカウント登録をします。[Amazon Product Advertising API関連リンク集](http://qiita.com/yokkong/items/a33c9c1b21a3e4396995)の記事が参考になります。
## 2.ヘルパークラス・サンプルコードの取得
[Product Advertising API Signed Requests Sample Code - Java REST/QUERY](https://aws.amazon.com/code/Product-Advertising-API/2478)よりコードをダウンロードします。
## 3.APIリクエスト先のURL確認
[Anatomy of a REST Request](http://docs.aws.amazon.com/AWSECommerceService/latest/DG/AnatomyOfaRESTRequest.html)からAPIのリクエスト先のURLを確認します。
## 4.APIリクエストのコード例
以下に歌手名で音楽を検索する場合を例に、サンプルコードを記載します。なお、パラメータのリファレンスは[Product Advertising API](http://docs.aws.amazon.com/AWSECommerceService/latest/DG/Welcome.html)のページに詳しく記載されています。

```java:AmazonApiSample.java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;

public class AmazonApiSample {

    public static String searchMusic(String artist) {
        // ダウンロードしたヘルパークラスでオブジェクトの作成
        SignedRequestsHelper helper;
        try {
        	// ENDPOINTに確認したURLのドメインを入力
            helper = SignedRequestsHelper.getInstance(AmazonConstants.ENDPOINT, AmazonConstants.AWS_ACCESS_KEY_ID, AmazonConstants.AWS_SECRET_KEY);
        } catch (Exception e) {
        	// exceptionの時はnullを返す
            return null;
        }
        // Mapにリクエストのキー情報をつめる
        Map<String, String> params = new HashMap<String, String>();
        params.put("Service", "AWSECommerceService");
        params.put("AWSAccessKeyId", AmazonConstants.AWS_ACCESS_KEY_ID);
        params.put("Version", "2013-08-01");
        params.put("AssociateTag", AmazonConstants.AWS_ASSOCIATETAG);
        params.put("Operation", "ItemSearch");
        params.put("SearchIndex", "Music");
        params.put("Artist", artist);
        params.put("Sort", "-releasedate");
        params.put("ContentType", "text/xml");
        
        HttpURLConnection httpURLConnection = null;
        BufferedReader bufferedReader = null;

        try{
            // リクエスト処理
        	String requestUrl = helper.sign(params);
            URL url = new URL(requestUrl);
            httpURLConnection = (HttpURLConnection)url.openConnection();
            String charSet = "UTF-8";
            String method = "GET";
            httpURLConnection.setRequestMethod( method );
            InputStreamReader inputStreamReader = new InputStreamReader( httpURLConnection.getInputStream(), charSet );
            bufferedReader = new BufferedReader( inputStreamReader );

            // レスポンスのXMLを取得。
            String oneLine = null;
            String responseXml = "";
            while( true ){
            	oneLine = bufferedReader.readLine();
            	// 行がNULLの場合
            	if(oneLine == null){
            		break;
            	// レスポンスの文字列へ行を追加
            	}else{
            		responseXml += oneLine;
            	}
            }
            return responseXml;
        }catch( Exception e ){
            // exceptionの時はnullを返す
        	return null;
        }finally{

            if( bufferedReader != null ){
                try{
                    bufferedReader.close();
                }catch( IOException e ){
                    // エラー時は無処理
                }
            }
            if( httpURLConnection != null ){
                httpURLConnection.disconnect();
            }
        }
    }

}
```