URLを/hondana/asinからisbnに変更。
こんなメソッドを作った。
def isbn num = params[:id] #正しいISBNが入力されたことを確認する render :action => "error" unless num = isbn?(num) #登録済み? @book = Book.find( :first, :conditions=>["isbn13 = ?", num] ) #登録されてない場合 unless @book @book = Book.new @book.isbn13 = num end #Amazonから情報を得る unless @book.title item = Asin.amazon_get(num) attributes = item.elements["ItemAttributes"] @book.auther = attributes.elements["Author"].text @book.title = attributes.elements["Title"].text end end
isbn?メソッドは
# isbn? # 正しい13桁ISBN => そのまま返す # 正しい 9桁ISBN => 13桁に変換して返す # それ以外 => false def isbn?(n) #まだ未実装 n end
というプライベートメソッド。要するにまだ何にもしてない(笑)。後でやろう。
Asinモジュールは、こないだ載っけたasin.rbをhondana/libに突っ込んで、上下を
module Asin end
で挟んで、メソッドもクラスメソッドに変更したもの。
Asin.amazon_getはREXML::Elementsを返すので、environment.rbに
require 'rexml/document'
を足しておく。
確認用にviewも作ろう。isbn.rhtmlを作る。
<h1> 入力内容 </h1> <dl> <dt>ISBN:</dt><dd><%= @book.isbn13 %></dd> <dt>Title:</dt><dd><%= @book.title %></dd> <dt>Auther:</dt><dd><%= @book.auther %></dd> </dl>
さあ、動かしてみよう
hondana/isbn/の後にDBに入っているレコードのISBN13が指定されればDBから読んで、ないものであればAmazonから引っ張ってきてる。うむうむ