class HotelPrice::Jalan::JalanScraper
Public Class Methods
new(mode = :chrome)
click to toggle source
# File lib/hotel_price/jalan/jalan_scraper.rb, line 5 def initialize(mode = :chrome) @mode = mode end
Public Instance Methods
get_price(jalan_hotel_id, checkin_date, num_adults)
click to toggle source
# File lib/hotel_price/jalan/jalan_scraper.rb, line 9 def get_price(jalan_hotel_id, checkin_date, num_adults) date = DateTime.now.strftime("%Y-%m-%d") query_string = make_query_string(checkin_date.to_s, num_adults) url = "https://www.jalan.net/yad#{jalan_hotel_id}/plan/?screenId=UWW3101&yadNo=#{jalan_hotel_id}&#{query_string}" driver = HotelPrice.get_selenium_driver @mode driver.get(url) sleep 2 @price_box = [] driver.find_elements(class_name: "p-planCassette").each do |f| rows = f.find_elements(:xpath, "//tr") rows.each do |e| @price_box << { date: date, min_price: e.find_element(class_name: "p-searchResultItem__total").text.delete("^0-9").to_i, hotel_name: driver.find_element(id: "yado_header_hotel_name").text, room_name: e.find_element(class_name: "p-searchResultItem__planName").text, plan_name: f.find_element(class_name: "p-planCassette__header").text } rescue StandardError { date: date, min_price: 0 } end end @price_box.sort_by { |_a, _b, c| c }.reverse.first || { date: date, min_price: 0 } rescue StandardError { date: date, min_price: 0 } end
make_date_args(checkin_date)
click to toggle source
# File lib/hotel_price/jalan/jalan_scraper.rb, line 43 def make_date_args checkin_date Date.parse checkin_date rescue return "" Date.parse(checkin_date).strftime("stayYear=%Y&stayMonth=%m&stayDay=%d") end
make_num_adults_arg(num_adults)
click to toggle source
# File lib/hotel_price/jalan/jalan_scraper.rb, line 48 def make_num_adults_arg num_adults return "" if num_adults.to_i < 1 "adultNum=#{num_adults}" end
make_query_string(checkin_date, num_adults)
click to toggle source
# File lib/hotel_price/jalan/jalan_scraper.rb, line 37 def make_query_string(checkin_date, num_adults) cd_args = make_date_args checkin_date na_args = make_num_adults_arg num_adults "rootCd=7701&callbackHistFlg=1&contHideFlg=1&reSearchFlg=1&roomCrack=100000&smlCd=121108&distCd=01&#{cd_args}&stayCount=1&roomCount=1&#{na_args}&minPrice=0&maxPrice=999999" end