はじめてのRuby on Rails、トラブル記録
<< RailsアプリをHerokuで動かしてみる(1) | TOP | データ容量を気にしてmigrateファイルを作ってみる >>
スポンサーサイト

一定期間更新がないため広告を表示しています

posted by スポンサードリンク | | - | - | - |はてなブックマーク - スポンサーサイト
RailsでAmazonAPIを使ってみる(ruby-aaws)(2)
AmazonAPIを使ってちょっとしたアプリを作ってみました。
内容としては、こんな感じ。
・気になってるけどまだ〜な本・DVD・音楽を登録しておくアプリ
・アマゾンで本・DVD・音楽を検索
・検索結果から該当のものを選んで登録

【1】SEARCH


検索のコード。

・コントローラー
ほんとはコントローラーじゃないとこに出した方がいいのかもしれないけど、よくわからなかったのでコントローラーに書いちゃった汗
def search
 items = amazon_search(params[:category],params[:key])
 @items = items.item_search_response.items.item  # 検索結果を配列として受け取った
 @res_count = items.item_search_response.items.total_results  # 検索結果の件数

 respond_to do |format|
  format.html # search.html.erb
  format.xml { render :xml => @items }
 end
end

def amazon_search(category, key)
 result = Amazon::AWS::Search::Request.new.search(
  Amazon::AWS::ItemSearch.new(category, {'Title'=>key}),
  Amazon::AWS::ResponseGroup.new("Medium")
 )
 return result
end


・ビュー
検索結果は10件まで表示できるっぽい。
画面はこんな感じ↓


なんかJUGEM、preタグでhtml直接表示できないっぽいしょんぼり
仕方ないのでhtmlで書いた部分は削った形で。
<% @items.each do |i| %>
# 検索結果中の選んだデータをモデルに持っていく
<% form_tag(:controller=>"kininarus", :action=>"register") do -%>
 <%= hidden_field(:amazon, :title, { :value=> i.item_attributes.title }) %>
 <%= hidden_field(:amazon, :category, { :value=> @category }) %>
 <%= hidden_field(:amazon, :item_id, { :value=> i.asin }) %>
 <%= submit_tag t('register'), :class=> 'middle' %>
<% end -%>

# イメージに詳細へのリンクを張る
<% unless i.small_image==nil %>
 a href="<%= i.detail_page_url %>">" <%= image_tag(i.medium_image.url) %> /a # aタグね
<% else %>
 <%= image_tag('no_image.png') %>
<% end %>

# タイトルに詳細へのリンクを張る
a href="<%= i.detail_page_url %>"<%= i.item_attributes.title %> /a # ここも本来aタグ
 <%=h i.item_attributes.author %>
<% end %>


【2】lookup


検索から登録したデータの一覧を表示するとき、画像とかは直接データベースに保存しちゃいけないらしいので、
asinからlookupで画像を表示するようにしました。

・ヘルパー
ビューからメソッド呼び出すことってできるのかな?と思って調べてみた。
「ヘルパー」っていうのに作ればいいらしいと判明。
ということで、ヘルパーメソッドを作ってみました。

module GetImageHelper
 def get_medium_image(asin)
  item = lookup(asin)
  unless item.medium_image.url==nil
   image_url = item.medium_image.url.to_s
  else
   image_url = "no image"
  end

  return image_url
 end

 def get_large_image(asin)
  item = lookup(asin)
  unless item.large_image.url==nil
   image_url = item.large_image.url.to_s
  else
   image_url = "no image"
  end

  return image_url
 end

 def get_detail_url(asin)
  item = lookup(asin)
  unless item.detail_page_url==nil
   detail_url = item.detail_page_url.to_s
  end
  return detail_url
 end

 def lookup(asin)
  result = Amazon::AWS::Search::Request.new.search(
   Amazon::AWS::ItemLookup.new('ASIN', 'ItemId'=>asin),
   Amazon::AWS::ResponseGroup.new('Medium')
  )
  item = result.item_lookup_response.items.item
  return item
 end
 
end


・ビュー
実際の画面↓

get_medium_imageでイメージURLを引っ張ってきた。
<% @kininarus.each do |kininaru| %>
   <% unless kininaru.item_id=="" %>
    <%= link_to(image_tag(get_medium_image(kininaru.item_id)), kininaru) %>
   <% else %>
    <%= image_tag('no_image.png') %>
   <% end %>
  <%= link_to kininaru.title, kininaru %>
<% end %>
posted by トモト | 23:15 | AmazonAPI | comments(0) | trackbacks(0) |はてなブックマーク - RailsでAmazonAPIを使ってみる(ruby-aaws)(2)
スポンサーサイト
posted by スポンサードリンク | 23:15 | - | - | - |はてなブックマーク - スポンサーサイト
コメント
コメントする










この記事のトラックバックURL
トラックバック機能は終了しました。
トラックバック
Rails3レシピブック 190の技
Rails3レシピブック 190の技
ついにRails3対応版が出ました!!
WEB+DB PRESS Vol.58
WEB+DB PRESS Vol.58
Rails2系から3への移行時に知りたいことがひとまとまりになっててよかった!色々ググるよりこれを読む方が早い。
Rubyレシピブック 第3版 303の技
Rubyレシピブック 第3版 303の技
Rubyやるならこのリファレンスは必要。
Search this site