商品検索API サンプルソース (Java)
楽天商品検索API Javaサンプルコード解説楽天商品検索APIを利用したJavaの簡単なサンプルコードを紹介します。■動作環境- Java実行環境- Javaサーブレットコンテナ■サンプルソースご利用の際の注意事項・ここで掲載するプログラムに関するサポートは一切しておりません。・ここで掲載するプログラムで発生した直接的及び間接的に生じた損害について弊社は一切責任を負いませんのでご了承ください。■楽天商品検索API/サンプルコード概要・ファイル構成WEB-INF/src/shopping/ItemSearchServlet.javaWEB-INF/itemSearch.xslWEB-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_ID51: + "&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.xslXMLから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.xmlweb.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はとても便利な機能ですので、参考にしていただければ幸いです。