SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

Amazon Web ServiceとMavenで開発する蔵書管理システム

第1回 Mavenによる開発環境構築とAmazon Web Serviceの利用

  • X ポスト
  • このエントリーをはてなブックマークに追加

実装

 Amazon Web ServiceのItemSearch Serviceにアクセスするプログラムを実装します。ItemSearch Serviceは、著者、題名(の一部)により該当する書誌情報を検索するサービスです。

 なお今回は、必要最小限度のパラメータしか設定していません。

src/main/java/bookrack/webservice/amazon/SimpleAmazonWebServices.java
package bookrack.webservice.amazon;

import org.apache.commons.httpclient.*;         ← (1)
import org.apache.commons.httpclient.methods.*;
import org.apache.commons.logging.*;

public class SimpleAmazonWebServices
{
    private final static Log log =
        LogFactory.getLog(SimpleAmazonWebServices.class);

    private final static String HOST
                                = "webservices.amazon.co.jp";
    private final static int PORT = 80;
    private final static String PATH = "/onca/xml";
    private final static String SERVICE
                                = "AWSECommerceService";
    private final static String ACCESS_KEY_ID
                                = "Your Subscription ID"; ← (2)

    public String itemSearch(String searchIndex, String keywords)
    {
        String response = null;
        try
        {
            NameValuePair[] params = new NameValuePair[5];
            params[0] = new NameValuePair("Service"       , SERVICE      );
            params[1] = new NameValuePair("AWSAccessKeyId", ACCESS_KEY_ID);
            params[2] = new NameValuePair("Operation"     , "ItemSearch" );
            params[3] = new NameValuePair("SearchIndex"   , searchIndex  );
            params[4] = new NameValuePair("Keywords"      , keywords     );

            HttpMethod method = new GetMethod();
            method.setURI(new HttpURL(HOST, PORT, PATH));
            log.trace("URI: " + method.getURI());
            method.setQueryString(params);               ← (3)
            log.trace("queryString: " + method.getQueryString());

            HttpClient client = new HttpClient();
            client.executeMethod(method);

            log.trace("statusCode: " + method.getStatusCode());
            response = method.getResponseBodyAsString(); ← (4)
        }
        catch(Exception e)      ← (5)
        {
            e.printStackTrace();
        }
        return response;
    }
}
  1. このようないいかげんなimportは、お奨めしません。
  2. 自分の登録IDを設定してください。
  3. NameValuePairクラスは、文字コードのエンコーディングを自前で行います。
  4. サンプルですので、結果のXMLを文字列として返します。実際はInputStreamを返して、JAXB2でXML→Java Objectに変換します。
  5. このようないいかげんなtry/catchは、お奨めしません。

テスト

 テストを実装します。

src/test/java/bookrack/webservice/amazon/SimpleAmazonWebServicesTest.java
package bookrack.webservice.amazon;

import junit.framework.*;                    ← (1)
import org.apache.commons.logging.*;

public class SimpleAmazonWebServicesTest extends TestCase
{
    private finalstatic Log log
        = LogFactory.getLog(SimpleAmazonWebServicesTest.class);
    public void testItemSearch()
    {
        SimpleAmazonWebServices service = new SimpleAmazonWebServices();
        String response = service.itemSearch("Books", "java web");
        log.trace("response: " + response);   ← (2)
    }
}
  1. テストなので、いいかげんなimportになっています。
  2. 本来なら、asertXXXで検証すべきですが……。

 テストの実行結果は、次のとおりです。

% mvn test

...
-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running bookrack.webservice.amazon.SimpleAmazonWebServicesTest
2007/06/11 15:55:53:601 JST [TRACE] SimpleAmazonWebServicesTest
 - response:
<?xml version="1.0" encoding="UTF-8"?>   ← (1)
<ItemSearchResponse
 xmlns="http://webservices.amazon.com/AWSECommerceService/2005-10-05">
  ...
    <Item>
      <ASIN>4844357808</ASIN>
      <DetailPageURL>http://www.amazon.co.jp/...</DetailPageURL>
      <ItemAttributes>
        <Author>シーズ</Author>
        <Creator Role="著">シーズ</Creator>
        <Manufacturer>エムディエヌコーポレーション</Manufacturer>
        <ProductGroup>Book</ProductGroup>
        <Title>JavaScriptビジュアル・リファレンス</Title>
      </ItemAttributes>
    </Item>
    <Item>
    ...                    ← (2)
</ItemSearchResponse>
...
[INFO] ---------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ---------------------------------------------------------------
%
  1. 実際の出力は1行です。
  2. この後に、最大で10個Item(書誌情報)が続きます。

まとめ

 Amazon Web ServiceへのアクセスとMavenのTipsを紹介しました。次回は、Java Architecture for XML Binding(JAXB2)を利用して、Amazon Web ServiceのXMLデータをJava Objectに変換するMaven Pluginについて紹介します。

参考資料

  1. Amazon Web Service
  2. Amazon E-Commerce Service: Getting Started Guide (API Version: 2007-05-14)
  3. Amazon E-Commerce Service: Making REST Requests
  4. Apache Maven
  5. Maven Archetype Plugin
  6. Maven Surefire Plugin
  7. Jakarta commons logging
  8. Jakarta commons HTTPClient

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
特集記事連載記事一覧

もっと読む

この記事の著者

宮地 康彦(ミヤチ ヤスヒコ)

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/1431 2008/09/03 14:03

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング