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;
}