sncf 0.2.3 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a026f1bfe24c4ced4665a384074384d182d5517f
4
- data.tar.gz: c7aa7f84fe05f301775fffdc25e0a9d72cdb9781
3
+ metadata.gz: 294f2a61e3f1f7d2200b9f6e79ebadb1876bb9c2
4
+ data.tar.gz: e04537454ac8128eb48211a2ee00f37ff9e6ace6
5
5
  SHA512:
6
- metadata.gz: 3cd58abdb81144af7542fbb382897b533efb87c6b521f22e3a03240947e4387fd1544b6fcfe138463f7a4a77139c6b887761974f268904c6fb90183eaa170ff1
7
- data.tar.gz: f1be502d88ca5583b585ee9dff93899e895d858a96a3199cc76da123cf68d383b89d1b69f84f142ac79bf63ca296e0f9e80265f7f2d4cfa940c867e73a35e7d7
6
+ metadata.gz: d1b88782092964e5fce6ebb443c12c30b2f64dfeea34b8c52ec9bba5d3da68a681ccca2cb6d75755cbdc0f4792224be44adf4abb60f220f8b9f3b39a3fd388a8
7
+ data.tar.gz: fec8027ab3d967f30de57bdbd5ca543ae807af1fe6fd0eea499282d4fdcb57733e9415db493fa3c9d3f2a6dbfac7d4012c5fdbef776f8a95c51139421d8079e5
data/README.md CHANGED
@@ -1,13 +1,11 @@
1
1
  # SNCF Open Data API Ruby wrapper
2
2
 
3
- # This gem in currently in beta, it may contains bugs, do not use in production.
4
-
5
- # 1.0.0 release is due to Fri, 03 Jul 2015
6
-
7
3
  [![Gem Version](https://badge.fury.io/rb/sncf.svg)](http://badge.fury.io/rb/sncf)
8
4
 
9
5
  Ruby gem to use easily the SNCF Open Data API with Ruby.
10
6
 
7
+ Current SNCF Open Data API version: `1.0`
8
+
11
9
  API Documentation is available [here](https://data.sncf.com/api)
12
10
 
13
11
  You don't already have an API KEY ? [Register here!](https://data.sncf.com/api/register)
@@ -30,6 +28,70 @@ Or install it yourself as:
30
28
 
31
29
  ## Usage
32
30
 
31
+ ## Fetch train stations
32
+
33
+ ```ruby
34
+ require 'sncf'
35
+
36
+ # Create your Sncf::ApiClient with your API_KEY
37
+ client = Sncf::ApiClient.new('MY_API_KEY')
38
+
39
+ client.api_key
40
+ => 'MY_API_KEY'
41
+
42
+ # Will returns a parsed model
43
+ response = client.fetch_stations('Lille Europe')
44
+ => [#<Sncf::Models::Station:0x007fee0cf051c0
45
+ @administrative_regions=
46
+ [#<Sncf::Models::AdministrativeRegion:0x007fee0cf05490
47
+ @coord={"lat"=>"50.630508", "lon"=>"3.070641"},
48
+ @id="admin:58404extern",
49
+ @insee="59350",
50
+ @label="Lille (59000-59800)",
51
+ @level=8,
52
+ @name="Lille",
53
+ @zip_code="59000;59800">],
54
+ @coord={"lat"=>"50.638861", "lon"=>"3.075774"},
55
+ @id="stop_area:OCE:SA:87223263",
56
+ @label="gare de Lille Europe (Lille)",
57
+ @name="gare de Lille Europe",
58
+ @quality=80,
59
+ @timezone="Europe/Paris">]
60
+
61
+ ```
62
+
63
+ ## Fetch journeys by stations name
64
+
65
+ ```ruby
66
+ require 'sncf'
67
+
68
+ # Create your Sncf::ApiClient with your API_KEY
69
+ client = Sncf::ApiClient.new('MY_API_KEY')
70
+
71
+ # Without options
72
+ response_without_options = client.fetch_journeys_by_stations('Paris Nord', 'Lille Europe', Time.now)
73
+ => #<Sncf::ApiResponse:0x007f8b0592abe8
74
+ @body = #<HTTP::Response::Body:3fc582c9818c @streaming=true>,
75
+ @content = { ... }, # Here is the api response
76
+ @pagination = nil,
77
+ @response = #<HTTP::Response/1.1 200 OK ...>,
78
+ @start_page = 0>
79
+
80
+ # With options
81
+ response_with_options = client.fetch_journeys_by_stations('Paris Nord', 'Lille Europe', Time.now, { datetime_represents: 'arrival' })
82
+ => #<Sncf::ApiResponse:0x007f8b0592abe8
83
+ @body = #<HTTP::Response::Body:3fc582c9818c @streaming=true>,
84
+ @content = { ... }, # Here is the api response
85
+ @pagination = nil,
86
+ @response = #<HTTP::Response/1.1 200 OK ...>,
87
+ @start_page = 0>
88
+
89
+ ```
90
+
91
+ Available options are available here: [https://data.sncf.com/api/documentation#title.1.6.4.1](https://data.sncf.com/api/documentation#title.1.6.4.1)
92
+
93
+ ## Custom API fetch
94
+
33
95
  ```ruby
34
96
  require 'sncf'
35
97
 
@@ -39,7 +101,7 @@ client = Sncf::ApiClient.new('MY_API_KEY')
39
101
  client.api_key
40
102
  => 'MY_API_KEY'
41
103
 
42
- response = req.fetch('coverage')
104
+ response = client.fetch('coverage')
43
105
  => #<Sncf::ApiResponse:0x007f8b0592abe8
44
106
  @body = #<HTTP::Response::Body:3fc582c9818c @streaming=true>,
45
107
  @content = { ... }, # Here is the api response
@@ -53,7 +115,7 @@ Available `fetch` parameters and API actions are here [https://data.sncf.com/api
53
115
 
54
116
  ## Contributing
55
117
 
56
- 1. Fork it ( https://github.com/rdlh/sncf/fork )
118
+ 1. Fork it ( https://github.com/Libertrip/sncf/fork )
57
119
  2. Create your feature branch (`git checkout -b my-new-feature`)
58
120
  3. Commit your changes (`git commit -am 'Add some feature'`)
59
121
  4. Push to the branch (`git push origin my-new-feature`)
@@ -52,6 +52,33 @@ module Sncf
52
52
  Sncf::Parsers::Stations.new(stations_response).get_stations_list
53
53
  end
54
54
 
55
+ def fetch_journeys_by_stations(from, to, time, options = {})
56
+ raise ArgumentError, "The `from` argument should be a string, example: 'Paris Nord'." if from.to_s == ''
57
+ raise ArgumentError, "The `to` argument should be a string, example: 'Paris Nord'." if to.to_s == ''
58
+ raise ArgumentError, "The `time` argument should be Time or DateTime." unless time.is_a?(Time) || time.is_a?(DateTime)
59
+
60
+ from_station = fetch_stations(from).first
61
+ to_station = fetch_stations(to).first
62
+
63
+ case
64
+ when from_station.nil?
65
+ raise ArgumentError, "The '#{from}' station doesn't exist."
66
+ when to_station.nil?
67
+ raise ArgumentError, "The '#{to}' station doesn't exist."
68
+ else
69
+ fetch_journeys_by_station_ids from_station.id, to_station.id, time, options
70
+ end
71
+ end
72
+
73
+ def fetch_journeys_by_station_ids(from_station_id, to_station_id, time, options)
74
+ fetch_options = {
75
+ from: from_station_id,
76
+ to: to_station_id,
77
+ datetime: time.to_datetime.strftime('%Y%m%dT%H%M%S')
78
+ }.merge(options)
79
+ fetch('coverage/sncf/journeys', fetch_options)
80
+ end
81
+
55
82
  protected
56
83
 
57
84
  def construct_formated_url(path, additional_params)
@@ -2,7 +2,7 @@ require 'http'
2
2
  require 'oj'
3
3
  module Sncf
4
4
  class ApiResponse
5
- attr_reader :response, :body, :content, :pagination, :start_page
5
+ attr_reader :response, :body, :content, :pagination, :start_page, :query
6
6
 
7
7
  def initialize(response, query)
8
8
  @response = response
@@ -4,29 +4,31 @@ module Sncf
4
4
  def get_stations_list
5
5
  stations, administrative_regions = [], []
6
6
 
7
- @api_response.content['places'].each do |place|
8
- if place['embedded_type'] == 'stop_area'
9
- place['stop_area']['administrative_regions'].each do |administrative_region|
10
- administrative_regions << create_model('AdministrativeRegion', {
11
- id: administrative_region['id'],
12
- insee: administrative_region['insee'],
13
- level: administrative_region['level'],
14
- coord: administrative_region['coord'],
15
- name: administrative_region['name'],
16
- label: administrative_region['label'],
17
- zip_code: administrative_region['zip_code']
7
+ unless @api_response.content['places'].nil?
8
+ @api_response.content['places'].each do |place|
9
+ if place['embedded_type'] == 'stop_area'
10
+ place['stop_area']['administrative_regions'].each do |administrative_region|
11
+ administrative_regions << create_model('AdministrativeRegion', {
12
+ id: administrative_region['id'],
13
+ insee: administrative_region['insee'],
14
+ level: administrative_region['level'],
15
+ coord: administrative_region['coord'],
16
+ name: administrative_region['name'],
17
+ label: administrative_region['label'],
18
+ zip_code: administrative_region['zip_code']
19
+ })
20
+ end
21
+
22
+ stations << create_model('Station', {
23
+ id: place['id'],
24
+ coord: place['stop_area']['coord'],
25
+ quality: place['quality'],
26
+ name: place['stop_area']['name'],
27
+ label: place['stop_area']['label'],
28
+ timezone: place['stop_area']['timezone'],
29
+ administrative_regions: administrative_regions
18
30
  })
19
31
  end
20
-
21
- stations << create_model('Station', {
22
- id: place['id'],
23
- coord: place['stop_area']['coord'],
24
- quality: place['quality'],
25
- name: place['stop_area']['name'],
26
- label: place['stop_area']['label'],
27
- timezone: place['stop_area']['timezone'],
28
- administrative_regions: administrative_regions
29
- })
30
32
  end
31
33
  end
32
34
 
data/lib/sncf/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Sncf
2
- VERSION = "0.2.3"
2
+ VERSION = "0.3.0"
3
3
  end
data/sncf.gemspec CHANGED
@@ -9,9 +9,9 @@ Gem::Specification.new do |spec|
9
9
  spec.authors = ["Rémi Delhaye"]
10
10
  spec.email = ["remi@libertrip.com"]
11
11
 
12
- spec.summary = %q{SNCF open data API ruby gem}
13
- spec.description = %q{SNCF open source API. Documentation here: https://data.sncf.com/api/documentation }
14
- spec.homepage = "https://github.com/rdlh/sncf"
12
+ spec.summary = %q{Open source ruby api client for SNCF Open Data API}
13
+ spec.description = %q{Open source ruby api client for SNCF Open Data API. Documentation available here: https://github.com/Libertrip/sncf }
14
+ spec.homepage = "https://github.com/Libertrip/sncf"
15
15
  spec.license = "MIT"
16
16
 
17
17
  spec.files = `git ls-files`.split("\n").reject { |f| f.match(%r{^(test|spec|features)/}) }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sncf
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rémi Delhaye
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-06-29 00:00:00.000000000 Z
11
+ date: 2015-07-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: http
@@ -136,7 +136,8 @@ dependencies:
136
136
  - - "~>"
137
137
  - !ruby/object:Gem::Version
138
138
  version: '3.1'
139
- description: 'SNCF open source API. Documentation here: https://data.sncf.com/api/documentation '
139
+ description: 'Open source ruby api client for SNCF Open Data API. Documentation available
140
+ here: https://github.com/Libertrip/sncf '
140
141
  email:
141
142
  - remi@libertrip.com
142
143
  executables: []
@@ -160,7 +161,7 @@ files:
160
161
  - lib/sncf/parsers/stations.rb
161
162
  - lib/sncf/version.rb
162
163
  - sncf.gemspec
163
- homepage: https://github.com/rdlh/sncf
164
+ homepage: https://github.com/Libertrip/sncf
164
165
  licenses:
165
166
  - MIT
166
167
  metadata: {}
@@ -183,5 +184,5 @@ rubyforge_project:
183
184
  rubygems_version: 2.4.6
184
185
  signing_key:
185
186
  specification_version: 4
186
- summary: SNCF open data API ruby gem
187
+ summary: Open source ruby api client for SNCF Open Data API
187
188
  test_files: []