transport-opendata 0.8.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/lib/checkpoint.rb +22 -0
- data/lib/connection.rb +25 -0
- data/lib/coordinate.rb +15 -0
- data/lib/duration.rb +24 -0
- data/lib/error.rb +13 -0
- data/lib/journey.rb +26 -0
- data/lib/location.rb +20 -0
- data/lib/prognosis.rb +19 -0
- data/lib/section.rb +16 -0
- data/lib/service.rb +14 -0
- data/lib/stop.rb +20 -0
- data/lib/timetable.rb +50 -0
- data/lib/transport-opendata.rb +5 -0
- data/lib/transport_factory.rb +41 -0
- metadata +71 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: e23c345fa314c42131c8df416d56daf3dba9e53b
|
4
|
+
data.tar.gz: 9d27cceeac918eaffcb2ebd8da5d70f6f191db7c
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 6f39b76d4a53fbbcce470fc92896fe4da70a65502778fcebee421229d65c22e0c13a46be9ea7b48ffcb70423c4708c660f7d1cdf3ed7d45d09cbf5920800a456
|
7
|
+
data.tar.gz: 34a2fa0d4426cfe0d6eb1f665a9ce3a81d3524f69816d97facdecd3aa77fb80609ece124373b3849a14d21b3ab6b76c49196495d47433437e7f4c1b812cc783d
|
data/lib/checkpoint.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
#
|
2
|
+
# Checkpoint
|
3
|
+
#
|
4
|
+
|
5
|
+
require_relative 'location'
|
6
|
+
require_relative 'prognosis'
|
7
|
+
|
8
|
+
module Transport
|
9
|
+
class Checkpoint
|
10
|
+
attr_reader :station, :arrival, :departure, :platform, :prognosis
|
11
|
+
|
12
|
+
def initialize(checkpoint)
|
13
|
+
return unless checkpoint
|
14
|
+
|
15
|
+
@station = Location.new checkpoint['station']
|
16
|
+
@arrival = DateTime.parse(checkpoint['arrival']) if checkpoint['arrival']
|
17
|
+
@departure = DateTime.parse(checkpoint['departure']) if checkpoint['departure']
|
18
|
+
@platform = checkpoint['platform']
|
19
|
+
@prognosis = Prognosis.new checkpoint['prognosis']
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/lib/connection.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
#
|
2
|
+
# Connection
|
3
|
+
#
|
4
|
+
|
5
|
+
require_relative 'checkpoint'
|
6
|
+
require_relative 'service'
|
7
|
+
require_relative 'section'
|
8
|
+
require_relative 'duration'
|
9
|
+
|
10
|
+
module Transport
|
11
|
+
class Connection
|
12
|
+
attr_reader :from, :to, :duration, :service, :products, :capacity1st, :capacity2nd, :sections
|
13
|
+
|
14
|
+
def initialize(connection)
|
15
|
+
@from = Checkpoint.new connection['from']
|
16
|
+
@to = Checkpoint.new connection['to']
|
17
|
+
@duration = Duration.new connection['duration']
|
18
|
+
@service = Service.new connection['service']
|
19
|
+
@products = connection['products']
|
20
|
+
@capacity1st = connection['capacity1st']
|
21
|
+
@capacity2nd = connection['capacity2nd']
|
22
|
+
@sections = connection['sections'].map { |section| Section .new section }
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
data/lib/coordinate.rb
ADDED
data/lib/duration.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
#
|
2
|
+
# Duration
|
3
|
+
#
|
4
|
+
|
5
|
+
module Transport
|
6
|
+
class Duration
|
7
|
+
attr_reader :seconds, :minutes, :hours, :days
|
8
|
+
|
9
|
+
def initialize(duration)
|
10
|
+
@days, @hours, @minutes, @seconds = duration.split(/d|:/)
|
11
|
+
@seconds = @seconds.to_i
|
12
|
+
@minutes = @minutes.to_i
|
13
|
+
@hours = @hours.to_i
|
14
|
+
@days = @days.to_i
|
15
|
+
end
|
16
|
+
|
17
|
+
def to_s
|
18
|
+
result = ""
|
19
|
+
result += "#{@days}d" if @days > 0
|
20
|
+
result += "#{@hours}h" if @hours > 0 || @days > 0
|
21
|
+
result += "#{@minutes}m"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
data/lib/error.rb
ADDED
data/lib/journey.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
#
|
2
|
+
# Journey
|
3
|
+
#
|
4
|
+
|
5
|
+
require_relative 'checkpoint'
|
6
|
+
|
7
|
+
module Transport
|
8
|
+
class Journey
|
9
|
+
attr_reader :stop, :name, :category, :categoryCode, :number, :operator, :to, :passList, :capacity1st, :capacity2nd
|
10
|
+
|
11
|
+
def initialize(journey)
|
12
|
+
return unless journey
|
13
|
+
|
14
|
+
@stop = Checkpoint.new journey['stop']
|
15
|
+
@name = journey['name']
|
16
|
+
@category = journey['category']
|
17
|
+
@categoryCode = journey['categoryCode']
|
18
|
+
@number = journey['number'].to_i
|
19
|
+
@operator = journey['operator']
|
20
|
+
@to = journey['to']
|
21
|
+
@passList = journey['passList'].map { |checkpoint| Checkpoint.new checkpoint }
|
22
|
+
@capacity1st = journey['capacity1st']
|
23
|
+
@capacity2nd = journey['capacity2nd']
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
data/lib/location.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
#
|
2
|
+
# Locations
|
3
|
+
#
|
4
|
+
|
5
|
+
require_relative 'coordinate'
|
6
|
+
|
7
|
+
module Transport
|
8
|
+
class Location
|
9
|
+
attr_reader :id, :type, :name, :score, :coordinate, :distance
|
10
|
+
|
11
|
+
def initialize(location)
|
12
|
+
@id = location['id']
|
13
|
+
@type = location['type']
|
14
|
+
@name = location['name']
|
15
|
+
@score = location['score']
|
16
|
+
@coordinate = Coordinate.new location['coordinate']
|
17
|
+
@distance = location['distance']
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
data/lib/prognosis.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
#
|
2
|
+
# Prognosis
|
3
|
+
#
|
4
|
+
|
5
|
+
module Transport
|
6
|
+
class Prognosis
|
7
|
+
attr_reader :platform, :departure, :arrival, :capacity1st, :capacity2nd
|
8
|
+
|
9
|
+
def initialize(prognosis)
|
10
|
+
return unless prognosis
|
11
|
+
|
12
|
+
@platform = prognosis['platform']
|
13
|
+
@departure = DateTime.parse prognosis['departure'] if prognosis['departure']
|
14
|
+
@arrival = DateTime.parse prognosis['arrival'] if prognosis['arrival']
|
15
|
+
@capacity1st = prognosis['capacity1st']
|
16
|
+
@capacity2nd = prognosis['capacity2nd']
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
data/lib/section.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
#
|
2
|
+
# Section
|
3
|
+
#
|
4
|
+
|
5
|
+
module Transport
|
6
|
+
class Section
|
7
|
+
attr_reader :journey, :walk, :departure, :arrival
|
8
|
+
|
9
|
+
def initialize(section)
|
10
|
+
@journey = Journey.new section['journey']
|
11
|
+
@walk = section['walk']
|
12
|
+
@departure = Checkpoint.new section['departure']
|
13
|
+
@arrival = Checkpoint.new section['arrival']
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
data/lib/service.rb
ADDED
data/lib/stop.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
#
|
2
|
+
# Stop
|
3
|
+
#
|
4
|
+
|
5
|
+
module Transport
|
6
|
+
class Stop
|
7
|
+
attr_reader :station, :name, :category, :number, :operator, :to
|
8
|
+
|
9
|
+
def initialize(stop)
|
10
|
+
return unless stop
|
11
|
+
|
12
|
+
@station = Location.new stop['station']
|
13
|
+
@name = stop['name']
|
14
|
+
@category = stop['category']
|
15
|
+
@number = stop['number']
|
16
|
+
@operator = stop['operator']
|
17
|
+
@to = stop['to']
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
data/lib/timetable.rb
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
#
|
2
|
+
# Locations
|
3
|
+
#
|
4
|
+
|
5
|
+
require 'httparty'
|
6
|
+
require_relative 'transport_factory'
|
7
|
+
|
8
|
+
module Transport
|
9
|
+
class Timetable
|
10
|
+
include HTTParty
|
11
|
+
|
12
|
+
attr_accessor :parse
|
13
|
+
|
14
|
+
base_uri 'transport.opendata.ch'
|
15
|
+
|
16
|
+
# default_params :output => 'json'
|
17
|
+
|
18
|
+
def initialize
|
19
|
+
@version = 'v1'
|
20
|
+
@parse = true
|
21
|
+
@options = { query: { } }
|
22
|
+
end
|
23
|
+
|
24
|
+
def search_station station_partial
|
25
|
+
parse_filter(self.class.get(restful_url('locations'), @options.merge(query: { query: station_partial})))
|
26
|
+
end
|
27
|
+
|
28
|
+
def search_connection from, to
|
29
|
+
parse_filter(self.class.get(restful_url('connections'), @options.merge(query: { from: from, to: to})))
|
30
|
+
end
|
31
|
+
|
32
|
+
def board_for station
|
33
|
+
parse_filter(self.class.get(restful_url('stationboard'), @options.merge(query: { station: station, limit: 15})))
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
def restful_url page
|
38
|
+
"/#{@version}/#{page}"
|
39
|
+
end
|
40
|
+
|
41
|
+
def parse_filter unparsed_result
|
42
|
+
if @parse
|
43
|
+
TransportFactory::create(unparsed_result)
|
44
|
+
else
|
45
|
+
unparsed_result
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
#
|
2
|
+
# Transport Factory
|
3
|
+
#
|
4
|
+
|
5
|
+
require 'httparty'
|
6
|
+
require_relative 'location'
|
7
|
+
require_relative 'connection'
|
8
|
+
require_relative 'journey'
|
9
|
+
require_relative 'error'
|
10
|
+
|
11
|
+
module Transport
|
12
|
+
class TransportFactory
|
13
|
+
|
14
|
+
def self.create(json)
|
15
|
+
json.each do |type, data|
|
16
|
+
case type
|
17
|
+
when 'stations'
|
18
|
+
return data.map do |station|
|
19
|
+
Location.new station
|
20
|
+
end
|
21
|
+
when 'connections'
|
22
|
+
return data.map do |connection|
|
23
|
+
Connection.new connection
|
24
|
+
end
|
25
|
+
when 'station'
|
26
|
+
next
|
27
|
+
when 'stationboard'
|
28
|
+
return data.map do |journey|
|
29
|
+
Journey.new journey
|
30
|
+
end
|
31
|
+
when 'errors'
|
32
|
+
return data.map do |error|
|
33
|
+
Error.new error
|
34
|
+
end
|
35
|
+
else
|
36
|
+
raise ArgumentError.new('Unknown Type: ' + type)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
metadata
ADDED
@@ -0,0 +1,71 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: transport-opendata
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.8.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Thomas Bruderer
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-12-03 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: httparty
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
description: Access to the Swiss Public Transport API of transport.opendata.ch
|
28
|
+
email: apophis@apophis.ch
|
29
|
+
executables: []
|
30
|
+
extensions: []
|
31
|
+
extra_rdoc_files: []
|
32
|
+
files:
|
33
|
+
- lib/checkpoint.rb
|
34
|
+
- lib/connection.rb
|
35
|
+
- lib/coordinate.rb
|
36
|
+
- lib/duration.rb
|
37
|
+
- lib/error.rb
|
38
|
+
- lib/journey.rb
|
39
|
+
- lib/location.rb
|
40
|
+
- lib/prognosis.rb
|
41
|
+
- lib/section.rb
|
42
|
+
- lib/service.rb
|
43
|
+
- lib/stop.rb
|
44
|
+
- lib/timetable.rb
|
45
|
+
- lib/transport-opendata.rb
|
46
|
+
- lib/transport_factory.rb
|
47
|
+
homepage: https://github.com/FreeApophis/TransportOpendata
|
48
|
+
licenses:
|
49
|
+
- MIT
|
50
|
+
metadata: {}
|
51
|
+
post_install_message:
|
52
|
+
rdoc_options: []
|
53
|
+
require_paths:
|
54
|
+
- lib
|
55
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
57
|
+
- - ">="
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: '0'
|
60
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
61
|
+
requirements:
|
62
|
+
- - ">="
|
63
|
+
- !ruby/object:Gem::Version
|
64
|
+
version: '0'
|
65
|
+
requirements: []
|
66
|
+
rubyforge_project:
|
67
|
+
rubygems_version: 2.4.8
|
68
|
+
signing_key:
|
69
|
+
specification_version: 4
|
70
|
+
summary: Swiss Public Transport API
|
71
|
+
test_files: []
|