楽天WEB SERVICEをRubyから呼び出してみる
Rubyの作者であるまつもとゆきひろ氏が楽天技術研究所のフェローに就任(楽天のプレスリリースと/.-J)ということなので、Rubyで楽天WEB SERVICEのAPIを叩いてみた。
まず、超簡単なhttpクライアント。
require 'open-uri'
html = ''
url = "http://kyow.cocolog-nifty.com"
open(url) do |file|
html = file.read
end
print html
全く簡単だ。
このhttpクライアントで楽天WEB SERVICEの検索APIを叩いてみる。デベロッパーIDはここで取得しておくこと。
require 'open-uri'
require 'kconv'
require 'cgi'
xml = ''
developer_id = 'デベロッパーID'
search_string = "検索キーワード"
rakuten_api_uri = "http://api.rakuten.co.jp/rws/1.7/rest?developerId=#{developer_id}&operation=ItemSearch&version=2007-04-11&keyword=#{CGI.escape(search_string.toutf8)}"
open(rakuten_api_uri) do |f|
xml = f.read.tosjis
end
print xml
マーベラス!!
このサンプルはWindows環境で動作させたので、文字コードをShift_JISとUTF-8間で変換している。
REST方式のAPIを呼び出しているので、戻り値はXMLとなる。あとは、戻ってきたXMLをparseすれば良いんだけど…せっかく楽天WEB SERVICEはJSON形式でも値を返せるんだし、XMLよりも軽量であることを考えて、JSONのAPIを呼び出することにする。セキュリティの問題を置いておくとJavaScriptで直接扱えて、Ajaxとも相性が良さそうだしね。
で、JSON parserにはWebOS GoodiesのSimple JSON parser & builderを使用することにする。コード量が少なくて簡単に扱えそうなので。これをダウンロードしてjsonparser.rbという名前で保存し、こんな感じに。
require 'open-uri'
require 'kconv'
require 'cgi'
require 'jsonparser.rb'
def out(obj)
if obj.is_a? Hash
obj.each_key {|k|
print "key = #{k}\n"
out obj[k]
}
elsif obj.is_a? Array
obj.each {|i|
print "\n"
out i
}
else
if obj.is_a? String
obj = obj.tosjis
end
print "value = #{obj}\n"
end
end
json_string = ''
developer_id = 'デベロッパーID'
search_string = "検索キーワード"
rakuten_api_uri = "http://api.rakuten.co.jp/rws/1.7/json?developerId=#{developer_id}&operation=ItemSearch&version=2007-04-11&keyword=#{CGI.escape(search_string.toutf8)}"
open(rakuten_api_uri) {|f|
json_string = f.read
}
parser = JsonParser.new
obj = parser.parse(json_string)
out obj
Simple JSON parser & builderがparseした結果は「ハッシュと配列が入れ子になったオブジェクト」なので、それを表示するためのコード(outメソッド)が全体のほとんどを占めている。単にオブジェクトの中身を単に見るだけなら、再帰を使わなくてもinspectするだけで良い。
| 固定リンク
「Ruby」カテゴリの記事
- TwitterはRailsを放棄するか(2008.05.04)
- first attack(2008.04.17)
- RSSクライアント(2007.06.15)
- 楽天WEB SERVICEをRubyから呼び出してみる(2007.06.01)
- プロキシが邪魔してRubyGemsでインストールできないとき(2007.04.13)
トラックバック
この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/16742/15276878
この記事へのトラックバック一覧です: 楽天WEB SERVICEをRubyから呼び出してみる:




















コメント
こんにちは、 WebOS Goodies を書いている歩行者と申します。
JSON クラス、ご利用ありがとうございます!
まさにこういうことに使ってほしかった、という感じです。
楽天APIは私も機会があれば試したいと思っていました。
挑戦するときは参考にさせていただきます。
それでは、今後ともよろしくお願いします。
投稿 歩行者 | 2007年6月 1日 (金) 22:36
JSON Parser便利に使わさせていただきました。作者様の意図通りで安心しました。
今後もよろしくお願い致します。
投稿 kyow | 2007年6月 5日 (火) 00:06