kariaの日記 @ Alice::Diary

ノリツッコミの鳩子がはてなブログ書いちゃうよ

価格.comのAPIで遊んでみた

http://nanatsuiro.side2.net/kakaku/

つくったー。

発端

価格.com WEBサービスって色々面白いことできそうだよなー、というか自分の必要な商品の価格情報だけ持ってきて表示すりゃ便利だよなってことで、普段あまり触らないrubyなどを使ってみた。

機能

1時間に1回ぐらいAPIからデータ持ってきて表が更新されます。

DDR2に比べてDDR1がいかに高いかとか、microSDで一番お得っぽいのはどれかとか、そういうのがわかります。

イメージとしてはAKIBA PC Hotline!の最安値情報ページみたいな感じ。向こうにのってる載ってるやつはこっちと比較すればいいし、DDR1みたいに載らなくなっちゃったやつはこっち見ればいいかなと。

中身

超適当ですが多分一番核になるのはこのへん。

def put_product(productid,capacity)
  # kakaku.com APIから個別データ読み込み
  xmluri = "http://api.kakaku.com/Ver1/iteminfo.ashx?ProductID=" + productid + "&ResultSet=Mini"
  source = ""
  open(xmluri){|io|
    source << io.read
  }
  # XMLパーサに読ます
  xmldoc = REXML::Document.new source

  # XMLから情報取得&容量単価計算
  productmaker = xmldoc.elements['/ProductInfo/Item/MakerName'].text
  productname = xmldoc.elements['/ProductInfo/Item/ProductName'].text
  producturi = xmldoc.elements['/ProductInfo/Item/ItemPageUrl'].text
  price = xmldoc.elements['/ProductInfo/Item/LowestPrice'].text.to_i
  byteprice = price.to_f / capacity

  # result_prに出力
  result_pr = %Q{<tr><td class="productname">} + productmaker + %Q{ <a href="#{producturi}">} + productname + "</a></td>"
  result_pr << %Q{<td class="capacity">} + "#{capacity}Gbyte</td>"
  result_pr << %Q{<td class="lowestprice">#{price}円</td>}
  result_pr << %Q{<td class="byteprice">} + sprintf("%.2f",byteprice) + "円</td></tr>\n"
  return result_pr
end

productidには価格.comの商品ID(URLの末尾んとこ)、capacityにはその商品の容量を入れます。するとput_productがtableの1行を吐いてくれるという。あら簡単。

今後

今のところproductidとcapacityはソースの中に手で書いてるというダサい感じなので、これをフォームから追加削除できるようにするなり自動で取得するなりしたいですね。といっても容量はAPIで取得できないので手で入れてやらないとならんのですが。

あと作ってから気付いたけど価格.comの検索結果にも容量単価出るのね。でもmicroSDとかMB単価になってて小数点以下1桁しか出ないからあまり意味がないw