楽天商品検索API Javaサンプルコード解説
楽天商品検索APIを利用したJavaの簡単なサンプルコードを紹介します。
■動作環境
- Java実行環境
- Javaサーブレットコンテナ
■サンプルソースご利用の際の注意事項
・ここで掲載するプログラムに関するサポートは一切しておりません。
・ここで掲載するプログラムで発生した直接的及び間接的に生じた損害について
弊社は一切責任を負いませんのでご了承ください。
■楽天商品検索API/サンプルコード概要
・ファイル構成
WEB-INF/src/shopping/ItemSearchServlet.java
WEB-INF/itemSearch.xsl
WEB-INF/web.xml
■ItemSearchServlet.java
検索キーワードを取得して、XSLT処理を行うサーブレットクラスです。
この全ソースコードは
こちら
・解説1 keywordパラメータの取得
26: // パラメータを取得
27: String keyword = request.getParameter("keyword");
28: if (keyword == null) {
29: keyword = "";
30: } else {
31: keyword = new String(keyword.getBytes("ISO-8859-1"),
32: "JISAutoDetect");
33: }
|
27行目でkeywordパラメータを取得し、
31行目で文字コード変換をしています。
・解説2 XML Transformerの作成
今回のサンプルではXSLTでXMLをHTMLに変換してページを表示します。
実際に、変換処理を行うJavaのTransformerオブジェクトを作成します。
36: TransformerFactory factory = TransformerFactory.newInstance();
37: Transformer transformer = factory.newTransformer(new StreamSource(
38: this.getServletContext().getRealPath(
39: "/WEB-INF/itemSearch.xsl")));
40:
41: transformer.setOutputProperty(OutputKeys.METHOD, "html");
42: transformer.setOutputProperty(OutputKeys.ENCODING, "EUC-JP");
43: transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION,
44: "yes");
45: transformer.setOutputProperty(OutputKeys.INDENT, "yes");
46: transformer.setParameter("keyword", keyword);
|
36行目でファクトリを作成し、37行目でファクトリから新しいTransformerオブジェクトを作成し、
41~45行目でTransformerオブジェクトのプロパティを設定し、46行目でXSLファイルで使用するkeywordパラメータの値を設定しています。
・解説3 APIからの入力ストリームを取得
49: String requestPath = "http://api.rakuten.co.jp/rws/1.11/rest?developerId="
50: + DEVELOPER_ID
51: + "&operation=ItemSearch&version=2007-10-25&keyword="
52: + URLEncoder.encode(keyword, "UTF-8");
53:
54: URL requestUrl = new URL(requestPath);
55: URLConnection connection = requestUrl.openConnection();
56: InputStream input = connection.getInputStream();
57: BufferedReader reader = new BufferedReader(new InputStreamReader(
58: input, "UTF-8"));
|
49行目でリクエストするAPIのパスを作成し、54行目でそのURLオブジェクトを作成しています。
55行目から57行目で実際にAPIに接続し入力ストリームを取得しています。
・解説4 XSLT処理の実行
61: transformer.transform(new StreamSource(reader), new StreamResult(
62: response.getOutputStream()));
|
61行目でTransformerオブジェクトのtransformメソッドでXMLからHTMLへの変換を行っています。
■itemSearch.xsl
XMLからHTMLへの変換方法が記述されているXSLファイルです。このファイルをいろいろいじることによって画面に表示するデータやレイアウトを自由に変えることができます。
今回のサンプルは画像と商品名のみの表示を行う簡単なものです。
全ソースコードは
こちら
・解説1 パラメータの取得
4: <xsl:param name="keyword" />
|
4行目でサーブレットで設定されたkeywordパラメータの値を取得しています。
・解説2 APIのステータスの取得
21: <xsl:variable name="status" select="Response/header:Header/Status" />
|
21行目でStatus要素の中にあるAPIレスポンスのステータス情報を取得しています。
・解説3 ステータス毎の処理
22: <xsl:choose>
23: <xsl:when test="$status='Success'"> <!-- Successの場合 -->
24: <b>検索結果:<xsl:value-of select="Response/Body/itemSearch:ItemSearch/count" />件
25: <xsl:value-of select="Response/Body/itemSearch:ItemSearch/page" />ページ目を表示</b> <br/>
26:
27: <table border="0">
28: <!-- 商品毎にループ開始 -->
29: <xsl:for-each select="Response/Body/itemSearch:ItemSearch/Items/Item">
30: <tr>
31: <td>
32: <!-- 画像表示 -->
33: <img>
34: <xsl:attribute name="src">
35: <xsl:value-of select="smallImageUrl" />
36: </xsl:attribute>
37: </img>
38: </td>
39: <td>
40:
41: <!-- 商品名表示 -->
42: <a>
43: <xsl:attribute name="href">
44: <xsl:value-of select="itemUrl" />
45: </xsl:attribute>
46: <xsl:value-of select="itemName" /><br/>
47: </a>
48: </td>
49: </tr>
50: </xsl:for-each>
51: <!-- 商品毎にループ終了 -->
52: </table>
53:
54: </xsl:when>
55: <xsl:when test="$status='NotFound'"> <!-- NotFoundの場合 -->
56: 商品は見つかりませんでした
57: </xsl:when>
58: <xsl:when test="$status='ClientError'"> <!-- ClientErrorの場合 -->
59: キーワードを入力してください
60: </xsl:when>
61: <xsl:when test="$status='ServerError'"> <!-- ServerErrorの場合 -->
62: サーバーエラーが発生しました
63: </xsl:when>
64: </xsl:choose>
|
24行目から54行目で、ステータスがSuccess(成功)だった場合の処理を記述しています。
25行目で検索結果件数を表示し、29行目から商品毎にループさせて、商品画像と商品名の表示を行っています。
■web.xml
web.xmlでは、/itemSearchというパスでリクエストを受けたときにItemSearchSearvletで処理するようにサーブレットマッピングの設定をします。
1: <?xml version="1.0" encoding="UTF-8"?>
2: <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
3: <servlet>
4: <servlet-name>itemSearch</servlet-name>
5: <servlet-class>shopping.ItemSearchServlet</servlet-class>
6: </servlet>
7:
8: <servlet-mapping>
8: <servlet-name>itemSearch</servlet-name>
10: <url-pattern>/itemSearch</url-pattern>
11: </servlet-mapping>
12: </web-app>
|
今回は、JavaでXSLTを使用して商品検索を行う簡単なサーブレットを紹介しました。
簡単なサンプルでしたが、XSLTはとても便利な機能ですので、参考にしていただければ幸いです。