000000 ランダム
 HOME | DIARY | PROFILE 【フォローする】 【ログイン】

楽天ウェブサービスセンターブログ

楽天ウェブサービスセンターブログ

商品検索API サンプルソース (Java)



■ ItemSearchServlet.java


package shopping;

import java.io.IOException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.io.InputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.stream.StreamSource;
import javax.xml.transform.stream.StreamResult;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ItemSearchServlet extends HttpServlet {
  private static final String DEVELOPER_ID = "XXXXXX";

  public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws IOException, ServletException {
    try {
      // パラメータを取得
      String keyword = request.getParameter("keyword");
      if (keyword == null) {
        keyword = "";
      } else {
        keyword = new String(keyword.getBytes("ISO-8859-1"),
            "JISAutoDetect");
      }

      // XSL Transformerの作成
      TransformerFactory factory = TransformerFactory.newInstance();
      Transformer transformer = factory.newTransformer(new StreamSource(
          this.getServletContext().getRealPath(
              "/WEB-INF/itemSearch.xsl")));

      transformer.setOutputProperty(OutputKeys.METHOD, "html");
      transformer.setOutputProperty(OutputKeys.ENCODING, "EUC-JP");
      transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION,
          "yes");
      transformer.setOutputProperty(OutputKeys.INDENT, "yes");
      transformer.setParameter("keyword", keyword);

      // 入力ストリーム取得
      String requestPath = "http://api.rakuten.co.jp/rws/1.11/rest?developerId="
          + DEVELOPER_ID
          + "&operation=ItemSearch&version=2007-10-25&keyword="
          + URLEncoder.encode(keyword, "UTF-8");

      URL requestUrl = new URL(requestPath);
      URLConnection connection = requestUrl.openConnection();
      InputStream input = connection.getInputStream();
      BufferedReader reader = new BufferedReader(new InputStreamReader(
          input, "UTF-8"));

      // XSLT処理
      transformer.transform(new StreamSource(reader), new StreamResult(
          response.getOutputStream()));
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}



■itemSearch.xsl


<?xml version="1.0" encoding="EUC-JP"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:header="http://api.rakuten.co.jp/rws/rest/Header" xmlns:itemSearch="http://api.rakuten.co.jp/rws/rest/ItemSearch/2007-10-25">
<!-- パラメータ取得 -->
<xsl:param name="keyword" />
<xsl:template match="/">
<html>
<head>
<title>商品検索</title>
</head>
<body>
<form>
<input type="text" name="keyword" size="30" >
<xsl:attribute name="value">
<xsl:value-of select="$keyword" />
</xsl:attribute>
</input>
<input type="submit" name="submit" value="商品検索" />
</form>

<!-- ステータス取得 -->
<xsl:variable name="status" select="Response/header:Header/Status" />
<xsl:choose>
<xsl:when test="$status='Success'"> <!-- Successの場合 -->
<b>検索結果:<xsl:value-of select="Response/Body/itemSearch:ItemSearch/count" />件
<xsl:value-of select="Response/Body/itemSearch:ItemSearch/page" />ページ目を表示</b> <br/>

<table border="0">
<!-- 商品毎にループ開始 -->
<xsl:for-each select="Response/Body/itemSearch:ItemSearch/Items/Item">
<tr>
<td>
<!-- 画像表示 -->
<img>
<xsl:attribute name="src">
<xsl:value-of select="smallImageUrl" />
</xsl:attribute>
</img>
</td>
<td>

<!-- 商品名表示 -->
<a>
<xsl:attribute name="href">
<xsl:value-of select="itemUrl" />
</xsl:attribute>
<xsl:value-of select="itemName" /><br/>
</a>
</td>
</tr>
</xsl:for-each>
<!-- 商品毎にループ終了 -->
</table>

</xsl:when>
<xsl:when test="$status='NotFound'"> <!-- NotFoundの場合 -->
商品は見つかりませんでした
</xsl:when>
<xsl:when test="$status='ClientError'"> <!-- ClientErrorの場合 -->
キーワードを入力してください
</xsl:when>
<xsl:when test="$status='ServerError'"> <!-- ServerErrorの場合 -->
サーバーエラーが発生しました
</xsl:when>
</xsl:choose>


</body>
</html>
</xsl:template>
</xsl:stylesheet>



■web.xml


<?xml version="1.0" encoding="UTF-8"?>
<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">
<servlet>
    <servlet-name>itemSearch</servlet-name>
    <servlet-class>shopping.ItemSearchServlet</servlet-class>
  </servlet>

<servlet-mapping>
    <servlet-name>itemSearch</servlet-name>
    <url-pattern>/itemSearch</url-pattern>
  </servlet-mapping>
</web-app>


© Rakuten Group, Inc.
X