5.ケンコーコムウェブサービス使用方法
本文書はケンコーコムウェブサービスの使用方法についてまとめたものです。
サービスはSOAP及びREST(後日対応予定)インターフェイスによって提供されます。
サービスを定義しているWSDLは以下にあります。
http://wsc.kenko.com/wsdl/aff.wsdl
§1.SOAP インターフェイスによるアクセス
SOAPサービスに対するアクセス方法はいくつかあると思いますが
java + axis によるサービスアクセス方法について簡単に説明します。
1.axis のインストール
詳細なインストール手順については省略します。
ここではWindows上でTomcat にaxis の機能を追加する方法について簡単に説明します。
axis はhttp://ws.apache.org/axis からダウンロードできます。
Windows版の場合はzip形式のファイルをダウンロードして解凍します。
axisを解凍したディレクトリの中のwebappsディレクトリの下のaxis ディレクトリをその
配下のディレクトリやファイル全体とともにTomcat のwebapps ディレクトリにコピーします。
これでAxisのインストールは完了ですのでTomcat起動後に
http://localhost:8080/axis/
等で動作確認してみて下さい。
(ここで表示される画面の中のValidate をクリックした際にaxis の実行に必要なコンポーネント
がそろっているかを確認できます。不足しているものがあれば適宜追加して下さい。)
2.サービスアクセス用javaクラスファイルの生成
サービス定義してあるWSDLからaxis付属のWSDL2Javaツールによりクライアント用ファイルを生成します。
以下にWindows上で実行する際の簡単な実行例を示します
----------------------------------------------------------------------------------------
SET AXIS_HOME=C:\Java\axis-1_3
SET TOMCAT_HOME=C:\Java\apache-tomcat-5.5.17
SET CLASSPATH=.
SET CLASSPATH=%CLASSPATH%;%AXIS_HOME%\lib\axis.jar
SET CLASSPATH=%CLASSPATH%;%AXIS_HOME%\lib\axis-ant.jar
SET CLASSPATH=%CLASSPATH%;%AXIS_HOME%\lib\jaxrpc.jar
SET CLASSPATH=%CLASSPATH%;%AXIS_HOME%\lib\saaj.jar
SET CLASSPATH=%CLASSPATH%;%AXIS_HOME%\lib\commons-logging-1.0.4.jar
SET CLASSPATH=%CLASSPATH%;%AXIS_HOME%\lib\commons-discovery-0.2.jar
SET CLASSPATH=%CLASSPATH%;%AXIS_HOME%\lib\log4j-1.2.8.jar
SET CLASSPATH=%CLASSPATH%;%AXIS_HOME%\lib\wsdl4j-1.5.1.jar
SET CLASSPATH=%CLASSPATH%;%TOMCAT_HOME%\common\lib\servlet-api.jar
SET CLASSPATH=%CLASSPATH%;%TOMCAT_HOME%\common\lib\mail.jar
SET CLASSPATH=%CLASSPATH%;%TOMCAT_HOME%\common\lib\activation.jar
java org.apache.axis.wsdl.WSDL2Java -v -W -a -p com.kenko.aff.soap.client
[WSDLのURL]
----------------------------------------------------------------------------------------
生成するとサービスにアクセスするためのjavaソースファイルが
\com\kenko\aff\soap\client
に展開されます
3.Webサービスへのアクセス
2で生成したファイルの中でstubクラス(AWSECommerceServiceBindingStub)を使うと簡単にアクセスできます。
3.1 実行環境の準備
実行に必要なライブラリをCLASSPATHに追加しておきます。
----------------------------------------------------------------------------------------
SET CLASSPATH=.
SET CLASSPATH=%CLASSPATH%;%AXIS_HOME%\lib\axis.jar
SET CLASSPATH=%CLASSPATH%;%AXIS_HOME%\lib\jaxrpc.jar
SET CLASSPATH=%CLASSPATH%;%AXIS_HOME%\lib\saaj.jar
SET CLASSPATH=%CLASSPATH%;%AXIS_HOME%\lib\commons-discovery-0.2.jar
SET CLASSPATH=%CLASSPATH%;%AXIS_HOME%\lib\commons-logging-1.0.4.jar
SET CLASSPATH=%CLASSPATH%;%AXIS_HOME%\lib\wsdl4j-1.5.1.jar
SET CLASSPATH=%CLASSPATH%;%TOMCAT_HOME%\common\lib\mail.jar
SET CLASSPATH=%CLASSPATH%;%TOMCAT_HOME%\common\lib\activation.jar
----------------------------------------------------------------------------------------
作成するソースプログラムにはWSDLから生成したファイルをimport しておきます。
(これで各サービスオペレーションが使用可能になります)
import com.kenko.aff.soap.client.*;
3.2 オペレーションの実行
ここではItemSearchオペレーション(商品検索)を例に簡単なサンプルを実行してみます。
簡単なサンプルソース(ItemSearchSample.java)を以下に示します。
実行すると正しく商品情報が取得できた場合コンソールへ結果が表示されます。
(※データは随時更新されますのでサンプル通りの結果は期待できない場合があります)
----------------------------------------------------------------------------------------
package samples.client;
import org.apache.axis.client.Service;
import org.apache.axis.types.NonNegativeInteger;
import com.kenko.aff.soap.client.*;
@SuppressWarnings("serial")
public class ItemSearchSample
{
public static void main (String[] args)
{
try
{
ItemSearchSample tester = new ItemSearchSample();
tester.doSearch();
System.exit (0);
}
catch (Exception e)
{
e.printStackTrace();
System.exit (1);
}
}
/*
* サービスへのアクセス
*/
private void doSearch()
{
try
{
Service service = new Service();
String endpoint = "http://wsc.kenko.com/axis/services/AWSECommerceServicePort";
// サービスendpointの指定
AWSECommerceServiceBindingStub stub = new AWSECommerceServiceBindingStub(new
java.net.URL(endpoint), service);
// 汎用パラメータのセット
ItemSearch itemSearch = new ItemSearch(); // ItemSearchオペレーションクラス
itemSearch.setAWSAccessKeyId("発行されたIDを指定"); // 発行されたあなたのIDを指定して下さい
itemSearch.setAssociateTag("TEST_TAG"); // AssociateTag は今後拡張します(現時点では何も処理されません)
// ItemSearchオペレーション用パラメータのセット
ItemSearchRequest req = new ItemSearchRequest();
req.setSearchIndex("Blended"); // 検索ジャンル指定(必須)
req.setKeywords("アミノ酸"); // 検索キーワード指定
String[] rg = new String[] { "Medium","EditorialReview"
}; // レスポンスグループ指定
req.setResponseGroup(rg);
itemSearch.setRequest(req);
// サービスリクエスト発行
ItemSearchResponse response = stub.itemSearch(itemSearch);
// 結果の表示
this.displayResult(response);
}
catch(Exception e)
{
e.printStackTrace();
}
System.out.println ("===おしまい===");
}
/**
* 結果の表示
* @param response
*/
private void displayResult(ItemSearchResponse response)
{
// 汎用結果確認
OperationRequest ope_req = response.getOperationRequest();
System.out.println ("リクエストID:" + ope_req.getRequestId());
com.kenko.aff.soap.client.ErrorsError[] errors = ope_req.getErrors();
if(this.dumpErrors(errors, "システムエラー"))
{
System.out.println ("システムエラーがあったので処理は中断");
return;
}
// リクエスト結果確認
Items[] items_items = response.getItems();
com.kenko.aff.soap.client.Request items_req = items_items[0].getRequest();
com.kenko.aff.soap.client.ErrorsError[] req_errors = items_req.getErrors();
this.dumpErrors(req_errors, "Operationエラー");
// 結果表示
NonNegativeInteger total_results = items_items[0].getTotalResults();
NonNegativeInteger total_pages = items_items[0].getTotalPages();
int ttl_results = (total_results != null)? total_results.intValue():0;
int ttl_pages = (total_pages != null)? total_pages.intValue():0;
System.out.println ("該当商品は" + ttl_results + "個("
+ ttl_pages + "ページ)ありました");
// 商品情報表示
com.kenko.aff.soap.client.Item[] items = items_items[0].getItem();
if((items != null) && (items.length > 0))
{
System.out.println ("商品を" + items.length + "個取得しました");
for(int i = 0; i < items.length; i++)
{
System.out.println ("----- " + (i+1) + "個目 -----");
com.kenko.aff.soap.client.Item item = items[i];
this.dumpItem(item);
}
}
else
System.out.println ("商品はありませんでした");
}
/**
* エラーの表示
* @param errors
* @param err_type
* @return
*/
public boolean dumpErrors(com.kenko.aff.soap.client.ErrorsError[] errors,
String err_type)
{
if((errors == null) || (errors.length < 1)) return false;
for(com.kenko.aff.soap.client.ErrorsError err:errors)
{
System.out.println (err_type + ":" + err.getCode() + ":"
+ err.getMessage());
}
return true;
}
/**
* 個別商品情報出力(サンプル)※1
* @param item
*/
public void dumpItem(com.kenko.aff.soap.client.Item item)
{
com.kenko.aff.soap.client.ItemAttributes attr = item.getItemAttributes();
System.out.println ("ASIN=" + item.getASIN());
System.out.println ("タイトル:" + attr.getTitle());
System.out.println ("メーカー(" + attr.getManufacturerType() +
"):" +
attr.getManufacturer() + "(" + attr.getManufacturerId() +
")");
System.out.println ("ブランド:" + attr.getBrand() + "("
+ attr.getBrandId() + ")");
System.out.println ("発売日:" + attr.getReleaseDate());
System.out.println ("短い説明:" + item.getShortDescription());
}
}
----------------------------------------------------------------------------------------
※1:指定するResponseGroupに依存して取得できる情報が異なるためdumpItem()で例外が
発生しますがここでは特に処理していません。
ItemSearchオペレーションで使用できる主なパラメータには以下のようなものがあります。
3.2.1 SearchIndex 検索ジャンル(指定必須)
検索ジャンルを指定することにより商品を絞り込みすることができます。
Ex.1)商品名にカモミールを含む全商品
SearchIndex=Blended
Title=カモミール
----------------
アロマコンセントライト カモミール
アロマソフターカモミール540ml
:
Ex.2)商品名にカモミールを含む化粧品
SearchIndex=Cosme
Title=カモミール
----------------
アロマデュウ バスエッセンス カモミール
Ex.3)商品名にカモミールを含む日用品
SearchIndex=Toiletry
Title=カモミール
----------------
アロマソフターカモミール540ml
アロマデュウ グリセリン ゲストソープ カモミール
:
3.2.2 Keywords キーワード
商品名、説明、メーカー名、ブランド名、成分名等を指定されたキーワードで検索します。
複数のキーワード指定が可能です(最大5個まで)
複数指定する場合は,で区切って指定して下さい(絞込みになります)
Ex)ウコンと酒を含む商品
SearchIndex=Blended
Keywords=ウコン,酒
----------------
秋ウコン茶
3.2.3 Brand ブランド
ブランド名により商品検索することができます。
Ex)ブランド名に愛犬を含む商品
SearchIndex=Blended
Brand=愛犬
----------------
愛犬元気 おいしいお腹の健康ビスケット小型犬用 200g
愛犬元気 おいしいお腹の健康ビスケット小型犬用 500g
愛犬元気 おいしいお腹の健康ビスケット中・大型犬用 500g
3.2.4 Manufacturer メーカー
メーカー名により商品検索することができます。
Ex)アース製薬の商品商品
SearchIndex=Blended
Manufacturer=アース製薬
----------------
アース 屋外用虫よけ線香 ミニ 5本
アース おそとでノーマット 携帯用つめかえ
アース ハエとり棒
3.2.5 Ingredient 成分名
含有成分名を指定することにより商品検索することができます。
Ex)アース製薬の商品商品
SearchIndex=Blended
Ingredient=ニョウソ
----------------
アクアタンク モイストローション(さっぱり)
アロヴィヴィ 尿素&ヒアルロン酸エッセンス
3.2.6 ページ指定
商品情報は10件毎に取得しますのでそれ以上の商品が必要であればページの指定を行います。
商品が全部で何件該当したかは毎回商品情報と合わせて取得できます。
Ex.1)赤ちゃん関連商品の2ページ目を取得(名前順)
SearchIndex=Blended
Keywords=赤ちゃん
ItemPage=2
----------------
赤ちゃん村 スープセット 2g*8袋 3ヶ月頃から
赤ちゃん村 鶏ささみと野菜5g*6袋 5ヶ月頃から
Ex.2)赤ちゃん関連商品の5ページ目を取得(名前順)
SearchIndex=Blended
Keywords=赤ちゃん
ItemPage=5
----------------
安心赤ちゃん ビーンズスポンジ
安心赤ちゃん やわらかガーゼ3枚入り
3.2.7 並び順指定
取得する商品の並び順を変更することができます。
Sortパラメータにtitlerank(デフォルト),release-date 等を指定することで取得する商品のに順序を
変更することができます(先頭に-を付けると逆順になります)。
Ex.1)赤ちゃん関連商品を取得(商品名降順)
SearchIndex=Blended
Keywords=赤ちゃん
sort=-titlerank
----------------
森永やさしい赤ちゃんの水 2L*6本
アンパンマン3WAYマグ
あんしんおそうじスプレー 500ml
Ex.2)赤ちゃん関連商品を取得(発売日が最近順)
SearchIndex=Blended
Keywords=赤ちゃん
sort=-release-date
----------------
アンパンマン3WAYマグ
あんしんおそうじスプレー 500ml
アットンピーランド スキンケアブック
3.2.8 取得する情報の指定
ResponseGroup に指定するパラメータにより検索した商品の欲しい情報を切替えることができます。
Ex.1)赤ちゃん関連商品の基本的な情報のみ欲しい
SearchIndex=Blended
Keywords=赤ちゃん
ResponseGroup=Small
----------------
赤ちゃん手袋
赤ちゃんの肌着洗い 720ml
Ex.2)赤ちゃん関連商品の基本的な情報に加えて簡単な商品説明が欲しい
SearchIndex=Blended
Keywords=赤ちゃん
ResponseGroup=Small,ShortDescription
----------------
赤ちゃん手袋
シルク100%の赤ちゃん用手ぶくろ。寝ている間に、かき傷を作ってしまわないように。
赤ちゃんの肌着洗い 720ml
赤ちゃんのデリケートな体をやさしく包む、ふっくらとした洗い上がり。洗濯をするお母さんの手肌にもマイルド。
|