class Mochizuki::Fetcher
Public Class Methods
new(logger = Mochizuki.logger, config = Mochizuki.config)
click to toggle source
# File lib/mochizuki/fetcher.rb, line 9 def initialize(logger = Mochizuki.logger, config = Mochizuki.config) @logger = logger @config = config @uri = URI("http://#{@config.api_host}:#{config.api_port}") @request_body = { '__EVENTTARGET' => '', '__EVENTARGUMENT' => '', '__LASTFOCUS' => '', '__VIEWSTATE' => '', '__VIEWSTATEGENERATOR' => 'CA0B0334', 'drlouming' => '', 'drceng' => '', 'dr_ceng' => '', 'drfangjian' => '', 'radio' => 'usedR', 'ImageButton1.x' => '0', 'ImageButton1.y' => '0' } @cookie = nil end
Public Instance Methods
fetch()
click to toggle source
# File lib/mochizuki/fetcher.rb, line 33 def fetch @logger.info 'Try to query' fetch_viewstate fetch_cookie power = fetch_power if power.nil? @logger.warn 'Failed to query.' return end Mochizuki.update_status(power) power end
Private Instance Methods
fetch_power()
click to toggle source
# File lib/mochizuki/fetcher.rb, line 74 def fetch_power resp = Faraday.get("#{@uri}/usedRecord1.aspx") do |req| req.headers = { 'Cookie' => @cookie, 'Content-Type' => 'application/x-www-form-urlencoded' } end html = Nokogiri::HTML(resp.body) html.xpath('//h6').text.scan(/(\d+[,.]\d+)/)[0][0] end
fetch_viewstate()
click to toggle source
# File lib/mochizuki/fetcher.rb, line 50 def fetch_viewstate @request_body['drlouming'] = @config.campus @request_body['drceng'] = @config.building @request_body['dr_ceng'] = @config.floor @request_body['drfangjian'] = @config.dorm 3.times do resp = Faraday.post(@uri) do |req| req.headers = { 'Content-Type' => 'application/x-www-form-urlencoded' } req.body = URI.encode_www_form(@request_body) end html = Nokogiri::HTML(resp.body) @request_body['__VIEWSTATE'] = html.at_css('input#__VIEWSTATE')['value'] end end