class VehicleDataMn

Public Class Methods

read(plate, format = nil) click to toggle source
# 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