skanetrafiken 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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: []