SOAPとAmazon
Viewの作成が一通り完了したので、次はAmazonとの接続を行う。
http://www.amazon.co.jp/exec/obidos/subst/associates/join/webservices.html/249-5764965-0472313
にて登録。
詳細な接続の方法だが、
http://www.itmedia.co.jp/enterprise/0311/24/epn02_3.html
を参照して行った。
WSDLとかはやっているうちに上手くいくだろうということで。
躓いたところをいくつか。
◇AmazonWebServices.wsdl
http://soap.amazon.com/schemas3/AmazonWebServices.wsdl
からゲッツします。
◇WSDL2Java
クラスパスをちゃんと設定しる。
で、Javaファイルが大量に生成されました。
計61コ
良く分からないので、進めていきます。
続いて、サンプルの"WebService"をコピりました。
案の定、大量のエラーコード。
Amazon関係のクラスファイルが不足しているようでつ。
Amazon関係のライブラリというと、
最初にダウンロードしたツールキットか
さっき作成された61コのファイルのどちらかしか、思いつきません。
ためしに61個の方をやると・・・
キタ━━(゜∀゜)━━ !!
赤い線のエラーがなくなりました。
さっそく実行!
キタ━━(゜∀゜)━━ !!
「Usage: WebService id」
・・・引数にBookIDを入れろとのことです。
サンプルどおりいれると・・・
>エッセンシャルJava 2nd edition
>宮坂 雅輝
>ソフトバンクパブリッシング
>¥ 2,600
エッセンシャルJavaキタ━━(゜∀゜)━━ !!
懐かしい、大学のときに使ってた本だ・・・。
とりあえず、コメントを入れて次はタイトル検索を行いまつ。
キーワード検索
さて、いよいよキーワード検索KeywordRequest(hoge)を使用します。
まず、単純にキーワード検索するメソッドを作成
detail getDetail(String word)
で、検索できるようにします。
ソート順
Sort Type |
Value |
Featured Items |
+pmrank |
Bestselling |
+salesrank |
Average Customer Review |
+reviewrank |
Price (Low to High) |
+pricerank |
Price (High to Low) |
+inverse-pricerank |
Publication Date |
+daterank |
Alphabetical (A-Z) |
+titlerank |
Alphabetical (Z-A) |
-titlerank |
キーワード検索
public List getBookList(String keyword , String page){ //返り血
ArrayList detailsList = new ArrayList();
try {
//Amazonサーバへの接続
AmazonSearchService service = new
AmazonSearchServiceLocator();
AmazonSearchPort port =
service.getAmazonSearchPort();
//リクエストの登録
KeywordRequest request = new KeywordRequest();
request.setDevtag("DWYW91HQZWKF");
request.setLocale("jp");
request.setMode("books-jp");
request.setKeyword(keyword);
request.setType("lite");
request.setTag("PPPPPPPPPPPPPPPP");
request.setPage(page);
request.setSort("+titlerank");
//リクエストの実行
ProductInfo pinfo = (ProductInfo)
port.keywordSearchRequest(request);
//詳細を取得し、リストへ変換
Details[] detail = pinfo.getDetails();
detailsList = new ArrayList(Arrays.asList(detail));
} catch (ServiceException e) {
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
}
return detailsList;
}
使用方法
while(ite.hasNext()){Details details = (Details)ite.next();
System.out.println(details.getProductName()+"\n");
}