hotel_price 0.3.2 → 0.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 672b35ba401f15c898aec3704672a2f44c036ed6ead4fe58141eb6b733cedb4e
4
- data.tar.gz: 64e76de7703a063114353638292c2beb15654eb43b70fddbf405f2ce303cfcca
3
+ metadata.gz: 92aec7a05284637bc1bd0ccadc6f2022888e6a5392d84bca9c78c236af810393
4
+ data.tar.gz: 2154651c9955907afbb09d429766df445d24919a9cd2eaf6471911a7b8b257b0
5
5
  SHA512:
6
- metadata.gz: 6d22b791dea64cdbb7b7d37b6b3903d5bddf7091032e0b47c3015c0b1fc29510392fe8719ace887ba788ce6c2c0df84d5b8a5d6d2a245b5e525f1457f78b598c
7
- data.tar.gz: bf780e075c09d2bf1afa8d7b9309ac61376d70ad4d8b9b4da29b17e72aaaf85553fd40ae211141647eda2b15c867497c3b6ce4422560d209277a341e53373702
6
+ metadata.gz: 6d48efbd42d28a278fce44b9af78ca1881de8fda7f966e271f3030529474f9847fe3bc053eb36279bf020ef4d7c7060f783a37b1836220e913d21b0c00814582
7
+ data.tar.gz: 79fa05cbf933589dd86918da447a776551d31f5380386d25c2a271ee39389acfef374903bedd2076d5d3b54008dae70766753917daffdb1dceb1eea0bec2211a
data/.rubocop.yml CHANGED
@@ -222,3 +222,6 @@ Style/MutableConstant:
222
222
 
223
223
  Lint/NonDeterministicRequireOrder:
224
224
  Enabled: false
225
+
226
+ Style/RescueModifier:
227
+ Enabled: false
data/Gemfile.lock CHANGED
@@ -1,16 +1,27 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- hotel_price (0.3.1)
4
+ hotel_price (0.3.2)
5
+ activesupport (~> 6.0.2.1)
5
6
  nokogiri (~> 1.10.9)
6
7
  selenium-webdriver (~> 3.141)
7
8
 
8
9
  GEM
9
10
  remote: https://rubygems.org/
10
11
  specs:
12
+ activesupport (6.0.2.1)
13
+ concurrent-ruby (~> 1.0, >= 1.0.2)
14
+ i18n (>= 0.7, < 2)
15
+ minitest (~> 5.1)
16
+ tzinfo (~> 1.1)
17
+ zeitwerk (~> 2.2)
11
18
  childprocess (3.0.0)
19
+ concurrent-ruby (1.1.6)
12
20
  diff-lcs (1.3)
21
+ i18n (1.8.2)
22
+ concurrent-ruby (~> 1.0)
13
23
  mini_portile2 (2.4.0)
24
+ minitest (5.14.0)
14
25
  nokogiri (1.10.9)
15
26
  mini_portile2 (~> 2.4.0)
16
27
  rake (13.0.1)
@@ -27,10 +38,14 @@ GEM
27
38
  diff-lcs (>= 1.2.0, < 2.0)
28
39
  rspec-support (~> 3.9.0)
29
40
  rspec-support (3.9.0)
30
- rubyzip (2.0.0)
31
- selenium-webdriver (3.142.6)
41
+ rubyzip (2.2.0)
42
+ selenium-webdriver (3.142.7)
32
43
  childprocess (>= 0.5, < 4.0)
33
44
  rubyzip (>= 1.2.2)
45
+ thread_safe (0.3.6)
46
+ tzinfo (1.2.6)
47
+ thread_safe (~> 0.1)
48
+ zeitwerk (2.3.0)
34
49
 
35
50
  PLATFORMS
36
51
  ruby
data/LICENSE.txt CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2019 el-fudo
3
+ Copyright (c) 2019 Fumitake Kawasaki
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
data/hotel_price.gemspec CHANGED
@@ -31,6 +31,7 @@ Gem::Specification.new do |spec|
31
31
  spec.add_development_dependency "bundler", "~> 2.0"
32
32
  spec.add_development_dependency "rake", ">= 12.3.3"
33
33
  spec.add_development_dependency "rspec", "~> 3.0"
34
+ spec.add_runtime_dependency "activesupport", "~> 6.0.2.1"
34
35
  spec.add_runtime_dependency "nokogiri", "~> 1.10.9"
35
36
  spec.add_runtime_dependency "selenium-webdriver", "~> 3.141"
36
37
  end
data/lib/hotel_price.rb CHANGED
@@ -3,8 +3,10 @@ require "hotel_price/rakuten"
3
3
  require "hotel_price/jalan"
4
4
  require "hotel_price/agoda"
5
5
  require "hotel_price/booking"
6
+ require "hotel_price/expedia"
6
7
  require "selenium-webdriver"
7
8
  require "net/http"
9
+ require "active_support/all"
8
10
 
9
11
  module HotelPrice
10
12
  class Error < StandardError; end
@@ -1,5 +1,5 @@
1
1
  require_relative "./agoda/agoda_api"
2
-
2
+ require_relative "./agoda/agoda_scraper"
3
3
  module HotelPrice
4
4
  module Agoda
5
5
  end
@@ -0,0 +1,56 @@
1
+ module HotelPrice::Agoda
2
+ class AgodaScraper
3
+ def self.get_price(day)
4
+ datetime = DateTime.now
5
+ retr_datetime = datetime + day
6
+ date = retr_datetime.day
7
+ date_tmrw = (retr_datetime + 1).day
8
+ url = "https://www.agoda.com/ja-jp/hotel-sunroute-new-sapporo/hotel/sapporo-jp.html"
9
+ driver = self.get_selenium_driver
10
+ driver.get(url)
11
+ sleep 2
12
+
13
+ added_months = (retr_datetime.year - datetime.year) * 12 + (retr_datetime.month - datetime.month)
14
+
15
+ if added_months.positive?
16
+ (1..added_months).each do |_n|
17
+ driver.find_element(:class_name, "DayPicker-NavButton--next").click
18
+ sleep 1
19
+ end
20
+ end
21
+
22
+ today = retr_datetime.strftime("%a %b %d %Y")
23
+ tomorrow = (retr_datetime + 1).strftime("%a %b %d %Y")
24
+
25
+ driver.find_elements(:xpath, "//div[@aria-label=\"#{today}\"]")[0].click
26
+ driver.find_elements(:xpath, "//div[@aria-label=\"#{tomorrow}\"]")[0].click
27
+ driver.find_element(:xpath, "/html/body/div[14]/div/div[1]/div/div/div[5]/div/div/div/div/div/div[1]/div[1]").click
28
+ driver.find_element(:class_name, "Searchbox__searchButton__text").click
29
+ sleep 5
30
+ begin
31
+ room_name = driver.find_element(:xpath, "/html/body/div[14]/div/div[4]/div/div[2]/div/div[4]/div/div[2]/div[3]/div[1]/div[1]/div[1]/a/div/div/span").text
32
+ rescue StandardError => e
33
+ room_name = ""
34
+ end
35
+ begin
36
+ min_price = driver.find_element(:class_name, "PriceRibbon__Price").text.gsub(",", "").to_i
37
+ rescue StandardError
38
+ min_price = 0
39
+ end
40
+ sleep 3
41
+ data = {
42
+ checkin_date: datetime.year.to_s + datetime.month.to_s + date.to_i.to_s,
43
+ agoda_min_price: min_price,
44
+ agoda_min_room_name: room_name
45
+ }
46
+ puts data
47
+ driver.quit
48
+ end
49
+
50
+ def self.get_selenium_driver
51
+ options = Selenium::WebDriver::Firefox::Options.new
52
+ options.add_argument("-headless")
53
+ Selenium::WebDriver.for :firefox#, options: options
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,6 @@
1
+ require_relative "./expedia/expedia_scraper"
2
+
3
+ module HotelPrice
4
+ module Expedia
5
+ end
6
+ end
@@ -0,0 +1,50 @@
1
+ require "date"
2
+
3
+ module HotelPrice::Expedia
4
+ class ExpediaScraper
5
+ def self.get_price(expedia_hotel_id, checkin_date, num_adults)
6
+ date = DateTime.now.strftime("%Y-%m-%d")
7
+
8
+ query_string = make_query_string(checkin_date, num_adults)
9
+ url = "https://www.expedia.co.jp/ja/#{expedia_hotel_id}.Hotel-Information?#{query_string}"
10
+ driver = self.get_selenium_driver
11
+ driver.get(url)
12
+ sleep 2
13
+
14
+ data = driver.find_elements(:xpath, "//span[@data-stid='content-hotel-lead-price']")
15
+ return { date: date, min_price: 0 } if data.empty?
16
+ price = data.first.text.delete("^0-9").to_i
17
+
18
+ hotel_name = driver.find_elements(:xpath, "//h1[@data-stid='content-hotel-title']").first.text
19
+ room_name = driver.find_elements(:xpath, "//h3[@data-stid='room-info-title-heading']").first.text
20
+
21
+ { date: date, min_price: price, hotel_name: hotel_name, room_name: room_name }
22
+ end
23
+
24
+ def self.make_query_string(checkin_date, num_adults)
25
+ cd_args = make_date_args checkin_date
26
+ na_args = make_num_adults_arg num_adults
27
+ "#{cd_args}&#{na_args}&x_pwa=1&rfrr=HSR&pwa_ts=1583335742618&swpToggleOn=true&regionId=3250&destination=Sapporo%2C+Hokkaido%2C+Japan&destType=MARKET&neighborhoodId=6290332&selected=5224778&sort=recommended&top_dp=5686&top_cur=JPY"
28
+ end
29
+
30
+
31
+ def self.make_date_args checkin_date
32
+ Date.parse checkin_date rescue return ""
33
+ t = Date.parse(checkin_date)
34
+ checkin_arg = t.strftime("chkin=%Y-%m-%d")
35
+ checkout_arg = (t+1).strftime("chkout=%Y-%m-%d")
36
+ "#{checkin_arg}&#{checkout_arg}"
37
+ end
38
+
39
+ def self.make_num_adults_arg num_adults
40
+ return "" if num_adults.to_i <= 1
41
+ "rm1=a#{num_adults}"
42
+ end
43
+
44
+ def self.get_selenium_driver
45
+ options = Selenium::WebDriver::Firefox::Options.new
46
+ options.add_argument("-headless")
47
+ Selenium::WebDriver.for :firefox, options: options
48
+ end
49
+ end
50
+ end
@@ -1,3 +1,3 @@
1
1
  module HotelPrice
2
- VERSION = "0.3.2"
2
+ VERSION = "0.3.3"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hotel_price
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Fumitake Kawasaki
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2020-03-04 00:00:00.000000000 Z
12
+ date: 2020-03-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -53,6 +53,20 @@ dependencies:
53
53
  - - "~>"
54
54
  - !ruby/object:Gem::Version
55
55
  version: '3.0'
56
+ - !ruby/object:Gem::Dependency
57
+ name: activesupport
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - "~>"
61
+ - !ruby/object:Gem::Version
62
+ version: 6.0.2.1
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: 6.0.2.1
56
70
  - !ruby/object:Gem::Dependency
57
71
  name: nokogiri
58
72
  requirement: !ruby/object:Gem::Requirement
@@ -107,8 +121,11 @@ files:
107
121
  - lib/hotel_price.rb
108
122
  - lib/hotel_price/agoda.rb
109
123
  - lib/hotel_price/agoda/agoda_api.rb
124
+ - lib/hotel_price/agoda/agoda_scraper.rb
110
125
  - lib/hotel_price/booking.rb
111
126
  - lib/hotel_price/booking/booking_scraper.rb
127
+ - lib/hotel_price/expedia.rb
128
+ - lib/hotel_price/expedia/expedia_scraper.rb
112
129
  - lib/hotel_price/jalan.rb
113
130
  - lib/hotel_price/jalan/jalan_api.rb
114
131
  - lib/hotel_price/jalan/jalan_console.rb