たたみラボ

  • about
  • member
  • r&d
  • blog
  • tatamicast

blog

RSS

Hotpepper API Ruby向けラッパーを作ってみました

icon January 15, 2007 4:13 PM by funami このエントリーを含むはてなブックマーク

フナミタカオです。

昨年末にオープンした、ホットペッパーAPIのRubyラッパーを作ってみました。
Ruby on Railsから、使いたくて、作り始めています。

サンプル

このライブラリを使った、簡単な、サンプルは、こちらをご覧ください。
http://tatamilab.jp/~funami/hotpepper/search.cgi
○フリーワード検索

○リンク生成
・同エリア+フリーワード検索
・ジャンル+フリーワード検索
・ページング

のサンプルになっています。

使い方

ソース一式はこちら サンプルとしては、こんな感じです。
require 'lib/hotpepper_api'
require 'kconv'
hotp = HotpepperAPI::Gourmet.new
result = hotp.search()
print result.pager.number_of_results  #該当する全件数
print result.pager.display_per_page   #1ページあたりの件数
print result.pager.display_from       #ページの開始位置
result.items.each do |item|
  print item.shop_name.tosjis << "\n"
  print item.shop_address.tosjis << "\n"
end
print "前のページ=#{result.pager.prev.to_s}\n" 
print "現在のページ=#{result.pager.current.to_s}\n"
print "次のページ=#{result.pager.next.to_s}\n"
 

XMLからRubyオブジェクトにする

RubyでXMLから、Rubyオブジェクトを生成する方法がよくわからず、当初は、REXMLで生成したオブジェクトに対して、Xpathでループまわしていました。
しかし、この方法だと、生成コストがすごくかかるようで、使いものにならないくらい遅かったです。
いろいろ調べた結果、RAA - ruby-amazonのソースを参考にして、以下のようなソースで高速化できることがわかりました。
      
      doc = REXML::Document.new(body).elements['Results']
      @result = ResultSet.new(request)
      parse(doc,@result)

    def parse(doc,result)
      result.pager.number_of_results = doc.elements['NumberOfResults'].text.to_i
      result.pager.display_per_page  = doc.elements['DisplayPerPage'].text.to_i
      result.pager.display_from      = doc.elements['DisplayFrom'].text.to_i
      doc.elements.each('Shop') do |item|
        shop = Shop.new
        item.elements.each do |property|
          if property.has_elements?
            if property.name == 'PictureUrl'
               value = parse_picture_url property
            end 
          else
             value = property.text
          end
	        iv = uncamelise(property.name)
	        shop.instance_variable_set("@#{iv}".to_sym, value)
        end
        result.items << shop
      end
      return result
    end
詳細は、ソースを参考にしてみてください。
なお、マスター系は未実装です。 追記: [code reading][ruby] hotpepper_api.rbを読むでコードの解説をしていただいています。 どうもありがとうございます。カメログさんどうもありがとうございます。

TRACKBACKS

ページトップへ



(C) RECRUIT MEDIA COMMUNICATIONS CO., LTD.