Amazon WebService を使う

Ruby on Railsウェブサービスの実装をしてみよう.まずは,アマゾンのWebAPI の検索からだな.ruby-amazon を使えば,もっと簡単に書けるみたいなんだけど,とりあえずベタに書いてみる.

出来上がりはこんな感じ.おおっ!!!!!今さらながら感動的だ!!!

Amazon Webサービス Access Key ID を取得

ビュー

  • 検索フォーム
[app/views/books/amazon_form.rhtml]

<%= form_remote_tag(:url => { :action => :amazon_search } ,:update => 'result', 
    :loading=>'Element.show("loading")',
    :complete=>'Element.hide("loading")') %>
<%= text_field_tag :keyword %>
<%= select_tag :mode ,options_for_select(@mode) %>
<%= submit_tag 'search'%>
<%= end_form_tag %>
<div id="loading" style="display:none;">Now Loading...</div>
<div id="result"></div>
  • 検索結果画像表示
[app/views/books/amazon_search.rhtml]

<% if @asins %>
<div style="border:1px solid black;margin:10px;padding:10px;background-color:#aaa;">
<% for asin in @asins %>
<%= link_to(image_tag("http://images-jp.amazon.com/images/P/#{asin}.09.MZZZZZZZ.jpg", :border=> 0, :height=> '80'), "http://www.amazon.co.jp/exec/obidos/ASIN/#{asin}") %>
<% end %>
</div>
<% end %>

コントロール

  Amazon_Mode = {
    "books-jp"  => "books-jp",
    "books-us"  => "books-us",
    "music-jp"  => "music-jp",
    "dvd-jp"    => "dvd-jp"
  }
  
  Amazon_Dev_Token = 'XXXXXXXXXXXXXXXXXXX'

  def amazon_form
    @mode = Amazon_Mode
  end
  
  def amazon_search
    require 'open-uri'
    @asins = []
    @asins = []
    mode = @params[:mode]
    mode = 'books-jp' unless Amazon_Mode.has_value?(mode)
    keyword = CGI::escape(@params[:keyword])
    url = "http://xml.amazon.co.jp/onca/xml3?t=nomusinolife-22&mode=#{mode}&f=xml&type=lite&dev-t=#{Amazon_Dev_Token}&page=1&locale=jp&KeywordSearch=#{keyword}"
    source = open(url).read
    source.gsub(%r!<Asin>(.+?)</Asin>!){ @asins << $1 }
    render :layout => false
  end