「楽天市場」 Web API(β版)を公開
「楽天市場」がAPI(β版)を公開しました。
現在公開されているAPIは、次の4つです。
「楽天商品検索API」
「楽天ジャンル検索API」
「楽天商品コード検索API」
「楽天書籍検索API」
各APIの詳細は、「楽天ウェブサービスセンター」を参照してください。
これらのAPIを利用するためには、こちらのページから楽天にログインして、「デベロッパID」を取得する必要があります。アフィリアイトに興味のある方は、一緒に「アフィリエイトID」も取得しておきましょう。
今回は、上で紹介した4つのAPIのなかから「楽天書籍検索API」を利用して簡単なアプリケーションを作ってみようと思います。
アプリケーションは、まず、キーワードを指定して、商品情報を取得します。
次に、取得した商品情報から「タイトル」と「価格」を抽出して表示するというものです。
それでは、はじめましょう。
APIを利用するためのプロトコルはRESTなので、
「Amazon E-Commerce Service(ECS) Ruby編」を参考にコーディングをします。
RESTパラメータの詳細は、「楽天書籍検索API」を参照してください。
ソースコードを以下に示します。
------------------------------- ここから(rakuten.rb)
require 'net/http'
require 'cgi'
require 'rexml/document'
RAKUTEN_BASE_URL = "http://api.rakuten.co.jp/rws/1.1/rest?"
RAKUTEN_DEVELOPER_ID = "[デベロッパIDを指定します]"
RAKUTEN_AFFILIATE_ID = "[アフィリアイトIDを指定します(省略可)]"
SERVICE_VERSION = "2007-01-17"
# 利用するAPIの種類を指定する
operation = "BookSearch"
# 検索のジャンルを指定する(今回はdefault値をしようします)
genreID = "200162"
# 検索キーワードを指定する
keywords = "Java"
# レビュー件数順(降順)でソートする
sort = "-reviewCount"
parameters = {
:developerId => RAKUTEN_DEVELOPER_ID,
:affiliateId => RAKUTEN_AFFILIATE_ID,
:version => SERVICE_VERSION,
:operation => operation,
:keyword => keywords,
:genreId => genreID,
:sort => sort
}
paramString = (
parameters.collect { |key,value| "#{key}=#{CGI::escape(value)}" }
).join('&')
url = URI.parse( RAKUTEN_BASE_URL + paramString )
xml = xml = REXML::Document.new( Net::HTTP.get( url ) )
xpath = "Response/Body/BookSearch/Items/Item"
xml.elements.each( xpath ) { |element|
# 書籍のタイトルを抜き出します
name = REXML::XPath.match(element, "itemName/text()").to_s
# 書籍の価格を抜き出します
price = REXML::XPath.match(element, "itemPrice/text()").to_s
# 書籍のタイトルと価格を表示します
puts name << " (\\" << price << ")"
}
------------------------------- ここまで(rakuten.rb)
(出力例)
徹底攻略Java2プログラマ問題集 (\3360)
Java言語で学ぶデザインパターン入門増補改訂版 (\3990)
Javaによるアルゴリズムとデータ構造 (\2520)
独習Java第3版 (\3990)
(以下省略)
今回の「楽天市場」のAPIは待ちに待ったという感じです。
「楽天市場のAPI公開によって「Amazon」,「bidders」,「楽天市場」のAPIを利用して、3つの大きな販売サイトで商品を横断的に検索ができるようになりました。
商品だけでなく、企業情報や株価といったあらゆる情報がAPIで入手できるように
なればいいなぁと思います。
いろいろな場所から情報を探す手間を省き、情報と情報を組み合わせて
ユーザのから見た情報の価値が上がると思います。
しばらくの間、開店休業中の「Item Map」でしたが、これを機に、もう一度再始動をかけてみたいと思います。