skanetrafiken 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/lib/skanetrafiken.rb +29 -0
- data/lib/skanetrafiken/get_departure_arrival.rb +44 -0
- data/lib/skanetrafiken/get_journey.rb +35 -0
- data/lib/skanetrafiken/line.rb +33 -0
- data/lib/skanetrafiken/point.rb +21 -0
- data/lib/skanetrafiken/query_station.rb +31 -0
- metadata +50 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: cde5d0547b7b4f3a410b3ced1a5469613efa731a
|
4
|
+
data.tar.gz: 19277f7976103a6be5ee23d321d0eafb93e85379
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 4562d34730f458aba3201554a42e7a6a8e46ff0ea4d825d3966653a2bb0b6df8f24cc11ba3d2df4f9ad2b97b664619b3d17ced5c1ca48b65278822e3733b81b8
|
7
|
+
data.tar.gz: 38037b61cbca6cf23246cb6a45b5c6347feef7b24080959df46d4b6a8d739b76a4d457a739c04e5d772e787ae17570fd4f93797b2e3e3d42ed60d6d7d0f0ad71
|
@@ -0,0 +1,29 @@
|
|
1
|
+
#!/opt/local/bin/ruby1.9
|
2
|
+
require "rubygems"
|
3
|
+
require 'net/http'
|
4
|
+
require 'rexml/document'
|
5
|
+
require "crack"
|
6
|
+
require "json"
|
7
|
+
Dir[File.join(File.dirname(__FILE__),'skanetrafiken','*.rb')].each {|file| require file }
|
8
|
+
module Skanetrafiken
|
9
|
+
|
10
|
+
class XmlToJson
|
11
|
+
def convert(xml)
|
12
|
+
return Crack::XML.parse(xml).to_json
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
class UriHelper
|
17
|
+
def parameters_from_hash(hash)
|
18
|
+
return hash.map{ |key,value|
|
19
|
+
"#{key.to_s}=#{URI.escape(value.to_s)}"
|
20
|
+
}.join("&")
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.to_ruby_convention(name)
|
25
|
+
return name.split(/(?=[A-Z])/).map do |word|
|
26
|
+
word.downcase
|
27
|
+
end.join('_')
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module Skanetrafiken
|
2
|
+
class GetDepartureArrival
|
3
|
+
def initialize opts={}
|
4
|
+
@xmltojson = opts[:xml_to_json] || XmlToJson.new()
|
5
|
+
end
|
6
|
+
def render_url(point)
|
7
|
+
return "http://www.labs.skanetrafiken.se/v2.2/stationresults.asp?selPointFrKey=#{point.id}"
|
8
|
+
end
|
9
|
+
|
10
|
+
def get_lines(html)
|
11
|
+
doc = REXML::Document.new(html)
|
12
|
+
el = []
|
13
|
+
v = doc.elements["soap:Envelope/soap:Body/GetDepartureArrivalResponse/GetDepartureArrivalResult/Lines"]
|
14
|
+
v.elements.each("Line") { |j|
|
15
|
+
dic = {}
|
16
|
+
$properties_line.each{ |key,value|
|
17
|
+
xval = j.elements[value].text
|
18
|
+
dic[key] = xval
|
19
|
+
#puts "#{key} = #{value} = #{xval}"
|
20
|
+
}
|
21
|
+
#deviation
|
22
|
+
info = j.elements["RealTime/RealTimeInfo"]
|
23
|
+
if info
|
24
|
+
dic[:dep_time_deviation] = info.elements["DepTimeDeviation"].text
|
25
|
+
dic[:dep_deviation_affect] = info.elements["DepDeviationAffect"].text
|
26
|
+
end
|
27
|
+
#<RealTime>
|
28
|
+
#<RealTimeInfo>
|
29
|
+
#<DepTimeDeviation>40</DepTimeDeviation>
|
30
|
+
#<DepDeviationAffect>CRITICAL</DepDeviationAffect>
|
31
|
+
|
32
|
+
#puts dic.map{ |k,v| "#{k}, #{v}" }.join('; ')
|
33
|
+
el.push(Line.new(dic))
|
34
|
+
}
|
35
|
+
return el
|
36
|
+
end
|
37
|
+
|
38
|
+
def json(html)
|
39
|
+
doc = REXML::Document.new(html)
|
40
|
+
xml = doc.elements["soap:Envelope/soap:Body/GetDepartureArrivalResponse/GetDepartureArrivalResult/Lines"]
|
41
|
+
return @xmltojson.convert( xml.to_s )
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module Skanetrafiken
|
2
|
+
class GetJourney
|
3
|
+
def initialize opts = {}
|
4
|
+
@uri = UriHelper.new
|
5
|
+
@xmltojson = opts[:xml_to_json] || XmlToJson.new()
|
6
|
+
end
|
7
|
+
def render_url(pointFrom,pointTo,lastStart)
|
8
|
+
lastStartText = lastStart.strftime("%Y-%m-%d %H:%M")
|
9
|
+
to = pointTo.render()
|
10
|
+
from = pointFrom.render()
|
11
|
+
parameters = {
|
12
|
+
:cmdaction =>:next,
|
13
|
+
:selPointFr =>pointFrom.render(),
|
14
|
+
:selPointTo =>pointTo.render(),
|
15
|
+
:LastStart =>lastStartText
|
16
|
+
}
|
17
|
+
return "http://www.labs.skanetrafiken.se/v2.2/resultspage.asp?" + @uri.parameters_from_hash(parameters)
|
18
|
+
end
|
19
|
+
|
20
|
+
def get_times(html)
|
21
|
+
doc = REXML::Document.new(html)
|
22
|
+
el = []
|
23
|
+
doc.elements["soap:Envelope/soap:Body/GetJourneyResponse/GetJourneyResult/Journeys"]\
|
24
|
+
.elements.each("Journey") { |j|
|
25
|
+
el.push(j.elements["DepDateTime"].text)
|
26
|
+
}
|
27
|
+
return el
|
28
|
+
end
|
29
|
+
def json(html)
|
30
|
+
doc = REXML::Document.new(html)
|
31
|
+
xml = doc.elements["soap:Envelope/soap:Body/GetJourneyResponse/GetJourneyResult/Journeys"]
|
32
|
+
return @xmltojson.convert( xml.to_s )
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Skanetrafiken
|
2
|
+
$properties_line = {:name=>'Name',:no=>'No',:journey_date_time=>'JourneyDateTime',:is_timing_point=>'IsTimingPoint',\
|
3
|
+
:stop_point=>'StopPoint',:line_type_id=>'LineTypeId',:line_type_id=>'LineTypeId',:line_type_name=>'LineTypeName',\
|
4
|
+
:towards=>'Towards'}
|
5
|
+
|
6
|
+
class Line
|
7
|
+
attr_reader :name,:no,:journey_date_time,:is_timing_point,\
|
8
|
+
:stop_point,:line_type_id,:line_type_id,:line_type_name,\
|
9
|
+
:towards
|
10
|
+
def initialize dic
|
11
|
+
$properties_line.each{ |key,value|
|
12
|
+
val = dic[key]
|
13
|
+
instance_variable_set("@#{key.to_s}", val)
|
14
|
+
}
|
15
|
+
#puts @name
|
16
|
+
#puts dic.map{ |k,v| "#{k}: #{v}" }.join('; ')
|
17
|
+
end
|
18
|
+
def ==(another)
|
19
|
+
return $properties_line.map{ |key,value|
|
20
|
+
k = "@#{key.to_s}"
|
21
|
+
instance_variable_get(k) == another.instance_variable_get(k)
|
22
|
+
}.inject(true){ |result, element| result and element}
|
23
|
+
end
|
24
|
+
def to_s
|
25
|
+
a = []
|
26
|
+
$properties_line.each{ |key,value|
|
27
|
+
val = instance_variable_get("@#{key.to_s}")
|
28
|
+
a.push(":#{key.to_s}=> '#{val}'")
|
29
|
+
}
|
30
|
+
return a.join(", ")
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Skanetrafiken
|
2
|
+
|
3
|
+
$point_indexes = [:stop, :address, :poi, :unknown]
|
4
|
+
|
5
|
+
class Point
|
6
|
+
attr_reader :name, :id, :type
|
7
|
+
def initialize(name,id,type)
|
8
|
+
@name=name
|
9
|
+
@id=id
|
10
|
+
@type=type
|
11
|
+
end
|
12
|
+
def ==(another_point)
|
13
|
+
self.name == another_point.name && self.id == another_point.id && self.type == another_point.type
|
14
|
+
end
|
15
|
+
def render()
|
16
|
+
idx = $point_indexes.index(@type)
|
17
|
+
return "#{@name}|#{@id}|#{idx}"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Skanetrafiken
|
2
|
+
|
3
|
+
$point_string_totype ={ "STOP_AREA" => :stop, "ADDRESS" => :address, "POI" => :poi, "UNKNOWN" => :unknown}
|
4
|
+
|
5
|
+
class QueryStation
|
6
|
+
def initialize opts={}
|
7
|
+
@xmltojson = opts[:xml_to_json] || XmlToJson.new()
|
8
|
+
end
|
9
|
+
def render_url(name)
|
10
|
+
return "http://www.labs.skanetrafiken.se/v2.2/querystation.asp?inpPointfr=#{URI.escape(name)}"
|
11
|
+
end
|
12
|
+
def get_stations(html)
|
13
|
+
doc = REXML::Document.new(html)
|
14
|
+
el = []
|
15
|
+
v = doc.elements["soap:Envelope/soap:Body/GetStartEndPointResponse/GetStartEndPointResult/StartPoints"]
|
16
|
+
v.elements.each("Point") { |j|
|
17
|
+
el.push(Point.new(
|
18
|
+
j.elements["Name"].text,
|
19
|
+
j.elements["Id"].text,
|
20
|
+
$point_string_totype[j.elements["Type"].text]
|
21
|
+
))
|
22
|
+
}
|
23
|
+
return el
|
24
|
+
end
|
25
|
+
def json(html)
|
26
|
+
doc = REXML::Document.new(html)
|
27
|
+
xml = doc.elements["soap:Envelope/soap:Body/GetStartEndPointResponse/GetStartEndPointResult/StartPoints"]
|
28
|
+
return @xmltojson.convert( xml.to_s )
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
metadata
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: skanetrafiken
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Oskar Gewalli
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2013-09-21 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: Using ruby to query some of the API for Skanetrafiken. It can be found
|
14
|
+
at http://www.labs.skanetrafiken.se/api.asp
|
15
|
+
email:
|
16
|
+
- oskar@gewalli.se
|
17
|
+
executables: []
|
18
|
+
extensions: []
|
19
|
+
extra_rdoc_files: []
|
20
|
+
files:
|
21
|
+
- lib/skanetrafiken/get_departure_arrival.rb
|
22
|
+
- lib/skanetrafiken/get_journey.rb
|
23
|
+
- lib/skanetrafiken/line.rb
|
24
|
+
- lib/skanetrafiken/point.rb
|
25
|
+
- lib/skanetrafiken/query_station.rb
|
26
|
+
- lib/skanetrafiken.rb
|
27
|
+
homepage: https://github.com/wallymathieu/skanetrafiken
|
28
|
+
licenses: []
|
29
|
+
metadata: {}
|
30
|
+
post_install_message:
|
31
|
+
rdoc_options: []
|
32
|
+
require_paths:
|
33
|
+
- lib
|
34
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
35
|
+
requirements:
|
36
|
+
- - '>='
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
version: '0'
|
39
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
40
|
+
requirements:
|
41
|
+
- - '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
requirements: []
|
45
|
+
rubyforge_project:
|
46
|
+
rubygems_version: 2.0.3
|
47
|
+
signing_key:
|
48
|
+
specification_version: 4
|
49
|
+
summary: Using ruby to query the API provided by Skanetrafiken
|
50
|
+
test_files: []
|