Class: Qunar::Rank

Inherits:
Object
  • Object
show all
Includes:
Capybara::DSL
Defined in:
lib/qunar/rank.rb

Instance Method Summary collapse

Constructor Details

#initialize(hotelId) ⇒ Rank

Returns a new instance of Rank.



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/qunar/rank.rb', line 14

def initialize(hotelId)
  raise "id should be string" if !hotelId.instance_of?(String)
  @HotelSEQ = hotelId                #hotelId is "cityurl_hotelcode"
  @cityurl = hotelId[0..hotelId.rindex("_",-1)-1]
  @hotelcode = hotelId[hotelId.rindex("_",-1)+1..hotelId.length]
  @uri = URI(File.join('/city', @cityurl, "dt-#{@hotelcode}"))
  visit @uri
  all('//*[text()="展开报价"]').each do |btn|
    btn.click
  end
  all('//*[text()="全部订完"]').each do |btn|
    btn.click
  end
  #@page = Capybara.current_session.driver.browser.page_source    #use when choose capybara driver selenium
  @page = Capybara.current_session.driver.browser.body    #use when choose capybara driver webkit
  @hotel = Nokogiri::HTML @page
end

Instance Method Details

#roomsObject



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# File 'lib/qunar/rank.rb', line 32

def rooms
  rooms = []
  # room
  @hotel.search("//ul[@class='htl-type-list clrfix']/li").each do |li|
    room = {}
    type = li.search("span[@class='type-name']").first.text.strip
    room['room_type'] = type
    room['otas'] = []
    # ota

    li.search("div[@class='similar-type-agent-list']/div/div").each do |row|
      otas = {}

      ota = row.search("div[@class='profile-tit']").first.text.strip
      otas['ota'] = ota

      bookable = row.search("a[@class='btn-book']/span")
      unless bookable.empty?
        bookable == bookable.first.text.strip
        if bookable == '订完'
          bookable = false
        else
          bookable = true
        end
      else
        bookable = true
      end
      otas['bookable'] = bookable

      insurance = row.search("p[@class='dbt-ct']").first
      if insurance == nil
        insurance = false
      else
        insurance = true
      end
      otas['insurance'] = insurance

      coupon = row.search("span[@class='fan']/em[@class='pr']").first

      if coupon == nil
        coupon = 0
      else
        coupon = coupon.text.sub(/¥/,'').strip.to_i
      end

      otas['coupon'] = coupon

      reserve_detail = row.search("div[@class='clrfix order-detail']").first.text.strip
      otas['reserve_detail'] = reserve_detail

      prepay = row.search("span[@title='需要预先支付房款']").first
      if prepay == nil
        prepay = false
      else
        prepay = true
      end
      otas['prepay'] = prepay

      price = row.search("p[@class='final-price ']/b").first.text.strip
      otas['price'] = price.to_i

      neat_price = row.search("p[@class='count_pr']").first.children[1].to_s
      otas['neat_price'] = neat_price.to_i

      room['otas'] << otas
    end
    rooms << room

  end
  return rooms
end