2007-01-18  楽天API使ってみました

昨年12月下旬,「楽天市場が商品データベースのAPIを公開するらしい」というお話をしました。昨日,予定どおりAPIが公開されました。

【楽天ウェブサービス】RAKUTEN WEBSERVICE

APIの概要

  • 提供されたサービスは「商品検索:ItemSearch」「ジャンル検索:GenreSearch」「商品コード検索:ItemCodeSearch」「書籍検索:BookSearch」の4種類
  • いずれもREST(REpresentational State Transfer)を使う。「RESTって何?」という話になりますが,HTTPのGETメソッドで要求を投げて,XMLで応答が返ってくるものと理解しておけば実用上の問題はなさそうです
  • サーバホストへのアクセス頻度には制限がある。1秒に1回だそうです

できることはWWWブラウザで操作する内容とほとんど同じようです。

使ってみた感想

率直な感想を言うと,かなり簡単に使えます。が,できることは商品情報の取得のみで込み入った情報は取得できないようです。例えば「ある商品とよく一緒に売れる商品」「男性がよく買う商品,女性は買わない商品」「売れているのか,売れていないのか」といった,「動的」というか付加価値の高い情報は提供されていません。

Perlによる実装

今回はPerlで実装してみました。試してみたのは商品検索のみです。クエリやXMLががちゃがちゃ出てくると目眩がしそうだったので,まずクラスを導入して詳細を隠蔽することにしました。

静的構造

<画像の説明>大雑把な静的構造です。HTTPやXMLの処理には,CPANで公開されているPerlモジュールを使用しました。

クラスの説明です。(作ったクラスは公開しておりません。)

  • Rakuten::ItemSearch ― 商品検索をカプセル化したクラス
  • Rakuten::ItemSearchResponse ― 商品検索の結果をカプセル化したクラス

以下,商品検索をするためのサンプルコードです。Rakuten::ItemSearchクラスをnewして,getメソッドを呼び出すだけで商品一覧(この場合「テスト」という文字列を含む商品の一覧)が返って来るようにしました。(都合によりdeveloperIdは伏せ字にしてありますよ。)

use strict ;
use Rakuten::ItemSearch ;
use encoding 'utf8' ;

binmode(STDIN, ':raw :encoding(cp932)') ;
binmode(STDOUT, ':raw :encoding(cp932)') ;

my $is ;
$is = new Rakuten::ItemSearch(
    developerId    => '********************************',
    keyword        => 'テスト',
) ;

my $resp ;
$resp = $is->get() ;

if( $resp->Status eq 'Success' )
{
    foreach( @{ $resp->items() } )
    {
        print $_->{ itemCode } ;
        print "\t" ;
        print $_->{ itemName } ;
        print "\t" ;
        print $_->{ itemUrl } ;
        print "\t" ;
        print $_->{ itemPrice } ;
        print "\n" ;
    }
}
else
{
    die "ERR" ;
}
標準出力の例

<画像の説明>こんな感じで標準出力に結果が出力されます。

Excelでの取り込み例

<画像の説明>Excelに貼り付けることもできます。

上記の結果を得るまでに掛かった作業時間は,3時間ほどでした。

関連リンク