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 "