PostHeaderIcon Yahoo!ショッピングWeb APIを利用してJANコードから商品情報を取得する(Java)

需要があるかわかりませんが、JavaでJANコードから商品情報を取得するプログラムを書いたので紹介します。

 

商品情報の検索はYahoo!ショッピングWeb APIの商品検索APIを利用しています。

http://developer.yahoo.co.jp/webapi/shopping/shopping/v1/itemsearch.html

 

JSONPのパースにはJSONIC1.3.0 (http://jsonic.sourceforge.jp/) を使っています。予め、ダウンロードしてプロジェクトに追加してください。

Yahoo!デベロッパーネットワークでAPP IDを取得することも忘れずに。

 

以下ソースコードです。


package yahooApiWrapper;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Map;

import net.arnx.jsonic.JSON;
public class YahooAPI {

/**
 * Yahoo!ディベロッパーのAPP ID
 */
 private static String APP_ID = "****** INSERT APP ID HERE ******";

/**
 * Yahoo!ショッピングAPIのベースURI
 */
 private static String BASE_URI = "http://shopping.yahooapis.jp/ShoppingWebService/V1/json/itemSearch";
 // サンプルコード (いろはす)
 public static void main(String[] args){

try{

Product product = new Product();
 product.janCode = 4902102091855L;

System.out.println(JSON.encode(product));

YahooAPI.productData(product);

System.out.println(JSON.encode(product));

}catch(IOException e){
 e.printStackTrace();
 }

}

/**
 * YahooショッピングAPIを使って商品データを検索し、Productインスタンスの該当フィールドを補足する
 *
 * @param product
 * @throws IOException
 */
 public static void productData(Product product) throws IOException{

if(product != null && product.janCode != null){

URL url = new URL(BASE_URI+"?appid="+APP_ID+"&jan="+product.janCode);

HttpURLConnection urlconn = (HttpURLConnection)url.openConnection();
 urlconn.setRequestMethod("GET");
 urlconn.setInstanceFollowRedirects(false);

urlconn.connect();

BufferedReader reader =
 new BufferedReader(new InputStreamReader(urlconn.getInputStream()));

StringBuffer responseBuffer = new StringBuffer();
 while (true){
 String line = reader.readLine();
 if ( line == null ){
 break;
 }
 responseBuffer.append(line);
 }

reader.close();
 urlconn.disconnect();

String response = responseBuffer.toString();

parse(product, response);

}
 }
 /**
 * JSONテキストをパースして、Productインスタンスの該当フィールドに追加
 *
 * @param product
 * @param jsonText
 */
 private static void parse(Product product, String jsonText){

Map<String, Map<String, Object>> json = JSON.decode(jsonText);

if( !Integer.valueOf((String) json.get("ResultSet").get("totalResultsAvailable")).equals(0) ){

@SuppressWarnings("unchecked")
 Map<String, Object> result = ((Map<String, Object>)(
 (Map<String, Map<String, Object>>)json.get("ResultSet").get("0")
 ).get("Result").get("0")
 );

String name = result.get("Name").toString();
 @SuppressWarnings("unchecked")
 String imageUrl = ((Map<String, Object>)result.get("Image")).get("Medium").toString();

product.name = name;
 product.uri = imageUrl;

}

}

}

/**
 * 商品データを受け取るクラス
 */
class Product {
 public Long janCode;
 public String name;
 public String uri;

}

Leave a Reply