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
31
32
33
# 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
  File.open("test1.html","w") do |file|
    file.puts @page
  end
end

Instance Method Details

#roomsObject



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
# File 'lib/qunar/rank.rb', line 36

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").first.text.strip
      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
      end

      otas['coupon'] = coupon

      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