Class: VehicleDataMn

Inherits:
Object
  • Object
show all
Defined in:
lib/vehicle_data_mn.rb

Class Method Summary collapse

Class Method Details

.read(plate, format = nil) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/vehicle_data_mn.rb', line 8

def self.read(plate, format = nil)

  plate = plate.to_s.gsub(/\s+/, "")

  plate_num = plate[0..3].rjust(4, "0")
  plate_ser = plate[4..6]

  url = 'https://www.transdep.mn/homepage/i_result.php?search_vehicle=Y&byPlateno='+CGI.escape(plate_num + plate_ser)

  # retry if tcp connection failed
  begin
    retries ||= 0
    doc = Nokogiri::HTML(open(url))
  rescue
    sleep(15)
    retry if (retries += 1) < 3
  end

  # no result
  if doc.xpath('//center/font/text()').to_s.strip == '&#1058;&#1086;&#1093;&#1080;&#1088;&#1086;&#1093; &#1084;&#1101;&#1076;&#1101;&#1101;&#1083;&#1101;&#1083; &#1086;&#1083;&#1076;&#1089;&#1086;&#1085;&#1075;&#1199;&#1081;'
    result = {
        :result => nil
    }
  else
    vin       = doc.xpath('//table/tr[2]/td[2]/text()').to_s.strip
    maker     = doc.xpath('//table/tr[3]/td[2]/text()').to_s.strip
    model     = doc.xpath('//table/tr[4]/td[2]/text()').to_s.strip
    reinspect = doc.xpath('//table/tr[5]/td[2]/text()').to_s.strip
    result = {
        :result => {
            :plate_ser => plate_ser,
            :plate_num => plate_num,
            :vin => vin,
            :maker => maker,
            :model => model,
            :next_inspection => reinspect.empty? ? 'NULL' : "'"+Date.parse(reinspect).to_s+"'"
        }
    }
  end

  unless format.to_s.downcase == 'json'
    return result
  else
    return result.to_json
  end

end