require 'uri' require 'net/http' require 'openssl' require 'nokogiri' require "json" require 'active_support/all' token = "05fcc54b-f553-47e9-b532-57b890134b24" crss = ["station_code_1", "station_code_2"] numRows = "8" SCHEDULER.every "3m", :first_in => 0 do |job| crss.each do |crs| url = URI("https://lite.realtime.nationalrail.co.uk/OpenLDBWS/ldb6.asmx") http = Net::HTTP.new(url.host, url.port) http.use_ssl = true # http.verify_mode = OpenSSL::SSL::VERIFY_NONE request = Net::HTTP::Post.new(url) request["content-type"] = 'text/xml' request["cache-control"] = 'no-cache' request.body = "\r\n\r\n \r\n \r\n #{token}\r\n \r\n \r\n \r\n \r\n #{numRows}\r\n #{crs}\r\n \r\n \r\n" response = http.request(request) parsed_json = Hash.from_xml(response.read_body).to_json data = JSON.parse(parsed_json) stationMessage = data.dig("Envelope", "Body", "GetDepartureBoardResponse", "GetStationBoardResult", "nrccMessages") trains = [] digResult = data.dig("Envelope", "Body", "GetDepartureBoardResponse", "GetStationBoardResult", "trainServices","service") if(digResult != nil) services = data['Envelope']['Body']['GetDepartureBoardResponse']['GetStationBoardResult']['trainServices']['service'] if(services.kind_of?(Array)) data['Envelope']['Body']['GetDepartureBoardResponse']['GetStationBoardResult']['trainServices']['service'].each do |child| isValidTime = Time.parse(child['etd']) rescue nil if isValidTime timeDiff = "- #{time_diff(child['std'].to_time.to_i , child['etd'].to_time.to_i )} min" end item = { label: "#{child['destination']['location']['locationName']}", value: "#{child['std']} (#{child['etd']}) #{timeDiff}", } trains.push(item) end if(stationMessage == nil) send_event "NationalRail_#{crs}", { items: trains, message: ""} else message = stationMessage['message'] indexOf = stationMessage['message'].index "