Written by: vottie on 2008/05/20 @ 1:51 AM
コントローラにコードが多すぎですが、価格コムのapiを使用したサンプルが出来ました。
railsのアプリケーション作成
$ rails -d sqlite3 rails
名前はともかくとして、railsというプロジェクトを作成します。
コントローラの作成
$ ruby script/generate controller api
これまたapiコントローラって名前がいいか悪いかはおいといて、作成します。そして、今回はデータベースは使わないので、モデルはなしです。
あとはゴリゴリ書いてみました。
app/controller/api_controller.rb
require 'open-uri'
require 'rexml/document'
require 'pp'
class ApiController < ApplicationController
def index
end
def kakaku
search = URI.escape(params[:name])
uri = "http://api.kakaku.com/Ver1/ItemSearch.asp?Keyword=" + search
doc = REXML::Document.new(open(uri))
@products = Array.new
doc.elements.each('ProductInfo/Item') { |elem|
product = Product.new
elem.elements.each('ProductID') {|e| product.id = e.text }
elem.elements.each('ProductName') {|e| product.name = e.text }
elem.elements.each('ItemPageUrl') {|e| product.url = e.text }
@products << product
}
@products
end
end
app/views/api/index.html.erb
入力画面です。
<% form_tag :action => "kakaku" do -%> <%= text_field_tag :name %> <%= submit_tag 'submit' %> <% end %>
app/view/api/kakaku.html.erb
結果を表示する画面です。
<table border="1"> <% @products.each do |p| %> <tr> <td><%= p.id %></td> <td><%= p.name %></td> <td><a href="<%= p.url %>">url</a></td> </tr> <% end %> </table>
app/model/product.rb
最後にrailsのモデルではないのですが、プロダクトというクラスを使用しているので、作成します。
class Product attr_accessor :id, :name, :url end
異常時の処理とか書いてませんが、これで全部です。
アプリケーションを起動して、http://localhost:3000/apiにアクセスすると動作が確認できました。
とりあえず、こういったapiを組み合わせていければ、世に言うマッシュアップなんだと思います。とはいえ、特別すごいアイデアとか出てこないんですけど...