class Rakuten::Travel::Crawler::Api
Public Class Methods
new(params)
click to toggle source
# File lib/rakuten/travel/crawler/api.rb, line 5 def initialize params @config = { rakuten_hotel_id: params[:rakuten_hotel_id].to_s ||= 0, rakuten_api_key: params[:rakuten_api_key] ||= ENV["RT_API_KEY"] } end
Public Instance Methods
get_page_num(detail_class_code)
click to toggle source
# File lib/rakuten/travel/crawler/api.rb, line 149 def get_page_num detail_class_code hotel = hotel_info url = "https://app.rakuten.co.jp/services/api/Travel/SimpleHotelSearch/20170426?applicationId=#{@config[:rakuten_api_key]}&largeClassCode=japan&middleClassCode=#{hotel[:middle_class_code]}&smallClassCode=#{hotel[:small_class_code]}&detailClassCode=#{detail_class_code}" uri = URI.parse(url) json = Net::HTTP.get(uri) result = JSON.parse(json) { small_class_code: hotel[:small_class_code], middle_class_code: hotel[:middle_class_code], detail_class_code: detail_class_code, area_name: hotel[:area_name].to_s, page_num: result["pagingInfo"]["pageCount"].to_i } end
get_price(rakuten_hotel_id, checkin_date, num_adults)
click to toggle source
# File lib/rakuten/travel/crawler/api.rb, line 12 def get_price(rakuten_hotel_id, checkin_date, num_adults) query_string = make_query_string(rakuten_hotel_id, checkin_date.to_s, num_adults) url = "https://app.rakuten.co.jp/services/api/Travel/VacantHotelSearch/20131024?#{query_string}" json = Net::HTTP.get(URI.parse(url)) result = JSON.parse(json) if result["error"] == "not_found" { date: DateTime.now.strftime("%Y-%m-%d"), checkin_date: checkin_date, rakuten_hotel_id: @config[:rakuten_hotel_id], adult_num: num_adults, breakfast: "", plan_num: 0, min_price: 0 } elsif result["error"] == "wrong_parameterd" "入力した値が正しくありません。" else { date: Time.now.strftime("%Y-%m-%d"), checkin_date: checkin_date, rakuten_hotel_id: rakuten_hotel_id, hotel_name: result["hotels"][0]["hotel"][0]["hotelBasicInfo"]["hotelName"], adult_num: num_adults, breakfast: "", plan_num: result["pagingInfo"]["recordCount"], room_name: result["hotels"][0]["hotel"][1]["roomInfo"][0]["roomBasicInfo"]["roomName"], plan_name: result["hotels"][0]["hotel"][1]["roomInfo"][0]["roomBasicInfo"]["planName"], min_price: result["hotels"][0]["hotel"][1]["roomInfo"][1]["dailyCharge"]["rakutenCharge"] } end end
hotel_info()
click to toggle source
# File lib/rakuten/travel/crawler/api.rb, line 51 def hotel_info uri = URI.parse("https://app.rakuten.co.jp/services/api/Travel/HotelDetailSearch/20131024?hotelNo=" + @config[:rakuten_hotel_id].to_s + "&applicationId=" + @config[:rakuten_api_key].to_s + "&datumType=1&responseType=large") json = Net::HTTP.get(uri) result = JSON.parse(json) return "ホテル情報がありませんでした。" if result["error"] == "not_found" return result["error_description"] if result["error"] == "wrong_parameter" result["hotels"][0].each do |_key, field| field[0].each do |_, value| @data_hash = { rakuten_hotel_id: value["hotelNo"], hotel_name: value["hotelName"], room_price_min: value["hotelMinCharge"], lat: value["latitude"], lon: value["longitude"], tel: value["telephoneNo"], zip_code: value["postalCode"], prefecture: value["address1"], address1: value["address2"], fax: value["faxNo"], access: value["access"], parking_info: value["parkingInformation"], near_station: value["nearestStation"], hotel_img_url: value["hotelImageUrl"], rakuten_review_count: value["reviewCount"], rakuten_review_avg: value["reviewAverage"].to_f } end end result["hotels"][0].each do |_key, field| field[1].each do |_, value| @data_hash[:rakuten_service_review] = value["serviceAverage"].to_f @data_hash[:rakuten_location_review] = value["locationAverage"].to_f @data_hash[:rakuten_room_review] = value["roomAverage"].to_f @data_hash[:rakuten_equipment_review] = value["equipmentAverage"].to_f @data_hash[:rakuten_bath_review] = value["bathAverage"].to_f @data_hash[:rakuten_meal_review] = value["mealAverage"].to_f end end result["hotels"][0].each do |_key, field| field[2].each do |_, value| @data_hash[:middle_class_code] = value["middleClassCode"].to_s @data_hash[:small_class_code] = value["smallClassCode"].to_s @data_hash[:area_name] = value["areaName"].to_s @data_hash[:hotel_class_code] = value["hotelClassCode"].to_s @data_hash[:checkin_time] = value["checkinTime"].to_s @data_hash[:checkout_time] = value["checkoutTime"].to_s @data_hash[:last_checkin_time] = value["lastCheckinTime"].to_s end end result["hotels"][0].each do |_key, field| field[3].each do |_, value| @data_hash[:total_room_num] = value["hotelRoomNum"].to_s room_facilities = [] value["roomFacilities"].each_with_index do |f, i| room_facilities[i] = f["item"] end @data_hash[:room_facilities] = room_facilities end end result["hotels"][0].each do |_key, field| field[4].each do |_, value| @data_hash[:hotel_policy_note] = value["note"].to_s @data_hash[:cancel_policy] = value["cancelPolicy"].to_s end end @data_hash end
make_query_string(rakuten_hotel_id, checkin_date, num_adults)
click to toggle source
# File lib/rakuten/travel/crawler/api.rb, line 45 def make_query_string(rakuten_hotel_id, checkin_date, num_adults) checkout_date = (Date.parse(checkin_date) + 1).strftime("%Y-%m-%d") "format=json&sort=%2BroomCharge&searchPattern=1&applicationId=#{@config[:rakuten_api_key]}&hotelNo=#{rakuten_hotel_id}&adultNum=#{num_adults}&checkinDate=#{checkin_date}&checkoutDate=#{checkout_date}&squeezeCondition=" end
search_ranking(params)
click to toggle source
# File lib/rakuten/travel/crawler/api.rb, line 119 def search_ranking params body = { middle_class_code: params[:middle_class_code], small_class_code: params[:small_class_code], detail_class_code: params[:detail_class_code], page_num: params[:page_num] } url = "https://app.rakuten.co.jp/services/api/Travel/SimpleHotelSearch/20170426?applicationId=#{@config[:rakuten_api_key]}&largeClassCode=japan&middleClassCode=#{body[:middle_class_code]}&smallClassCode=#{body[:small_class_code]}&detailClassCode=#{body[:detail_class_code]}&page=#{body[:page_num]}" uri = URI.parse(url) json = Net::HTTP.get(uri) result = JSON.parse(json) i = 1 result["hotels"].each do |key, _value| if @config[:rakuten_hotel_id] == key["hotel"][0]["hotelBasicInfo"]["hotelNo"].to_s return { status: "found", hotel_name: key["hotel"][0]["hotelBasicInfo"]["hotelName"], area_name: body[:area_name], page_num: params[:page_num], area_rank: i.to_i + ((body[:page_num].to_i - 1) * 30), middle_class_code: body[:middle_class_code], small_class_code: body[:small_class_code], detail_class_code: body[:detail_class_code] } end i += 1 end { status: "not_found" } end