【Rails】Railsでプロキシを通しつつ、楽天APIにアクセスする
参考サイトは以下です
http://d.hatena.ne.jp/toyoshi/20100414/1271214117
楽天API
http://webservice.rakuten.co.jp/api/itemsearch/
以下、参考サイトほぼそのまんまですが…
違うのは、私が使おうとしているのは、"楽天ブックス系API"という処です。
model辺りが割と違う・参考サイト通りにやると、指定する値などが微妙に違ってエラーとなるので注意です。
(controller名などは参考サイトのままになっています)
/controller
class ItemsController < ApplicationController def index @items = Rakuten.item_search("検索ワード") end end
/model/rakuten.rb
ruby script/generate model Rakuten
をして、modelを作成後、rakuten.rbを以下のように書き換えます。
class Rakuten < ActiveResource::Base self.site = "http://api.rakuten.co.jp/" #リソースのURL self.format = :xml #リソースのフォーマット self.proxy = "プロキシサーバ指定" #プロキシを通すときは指定します #AFFILIATE_ID = "" DEVELOPER_ID = "自分で入力" VERSION = "2010-03-18" #参考サイトから変更 FROM = "/rws/3.0/rest" #参考サイトから変更 def self.item_search(keyword, genre_id=0, page=1) self.find( :one, :from => FROM, :params => { :developerId => DEVELOPER_ID, #:affiliateId => AFFILIATE_ID, :version => VERSION, :operation => "BooksBookSearch",#使用APIの指定 #:genreId => genre_id, #:page => page, :title => "test".toutf8 } ) end end
/view
<% @items.Body.BooksBookSearch.Items.Item.each do |item| %> <div><%= item.title %></div> <% end %>
このようにすると、結果の商品名の羅列が出来ます。
楽天ブックス系APIでないときは、返ってくる値の名前(ブックス系だと、商品名がtitleなのに対し、市場系だとitemNameである等)があるので、気をつけます。
↑のviewはブックス系APIだったので、そのようにしましたが、参考サイトでは以下のようになっています。
<% @items.Body.ItemSearch.Items.Item.each do |item| %> <%= item.itemName %><br> <% end %>
例えば エラーのお話
script/consoleで、
test = Rakuten.search(“a”)
などとして、適当にAPIでaを検索します。
その時にtestの中に以下のように返ってきたときは、失敗しています。
=> #<Rakuten:0x6ea5870 @prefix_options={}, @attributes={"Header"=>#<Rakuten::Hea der:0x6ea2490 @prefix_options={}, @attributes={"Status"=>"ClientError", "StatusM sg"=>"version繝代Λ繝。繝シ繧ソ縺梧欠螳壹&繧後※縺・∪縺帙s縲Wersion繝代Λ繝。繝シ 繧ソ縺ォ縺ッ[2009-04-15, 2010-06-30, 2010-08-05, 2010-09-15]縺梧欠螳壼庄閭ス縺ァ縺吶€ ・, "Args"=>#<Rakuten::Header::Args:0x6ea1b58 @prefix_options={}, @attributes={" Arg"=>["true", "true", "true", "false"]}>}>}>
ちょっと文字化けしちゃってるのは申し訳ないですが…
よく見ると、一番下の方に、
Arg"=>["true", "true", "true", "false"]
こんなのがあります。
これが1つでもfalseになっていると、失敗しているということなので、帰ってきた結果の様子がおかしい時はこれを見ます。
これは、APIを叩くときに指定する値などが間違っていたり、足りていなかったりするときのようです。