From 1ffc9c42054e208a01d3e70e6b6f3e1781e798f8 Mon Sep 17 00:00:00 2001 From: Julien Dessaux Date: Mon, 5 Apr 2021 17:52:31 +0200 Subject: Moved code around to conform best practices --- navitia_api_client/client.go | 31 - navitia_api_client/client_test.go | 38 - navitia_api_client/departures.go | 73 - navitia_api_client/departures_test.go | 57 - navitia_api_client/test_data/invalid.json | 1 - navitia_api_client/test_data/normal-crepieux.json | 2135 --------------------- 6 files changed, 2335 deletions(-) delete mode 100644 navitia_api_client/client.go delete mode 100644 navitia_api_client/client_test.go delete mode 100644 navitia_api_client/departures.go delete mode 100644 navitia_api_client/departures_test.go delete mode 100644 navitia_api_client/test_data/invalid.json delete mode 100644 navitia_api_client/test_data/normal-crepieux.json (limited to 'navitia_api_client') diff --git a/navitia_api_client/client.go b/navitia_api_client/client.go deleted file mode 100644 index aef8d0e..0000000 --- a/navitia_api_client/client.go +++ /dev/null @@ -1,31 +0,0 @@ -package navitia_api_client - -import ( - "fmt" - "net/http" - "sync" - "time" -) - -type Client struct { - baseURL string - httpClient *http.Client - - mutex sync.Mutex - cache map[string]cachedResult -} - -type cachedResult struct { - ts time.Time - result interface{} -} - -func NewClient(token string) *Client { - return &Client{ - baseURL: fmt.Sprintf("https://%s@api.sncf.com/v1", token), - httpClient: &http.Client{ - Timeout: time.Minute, - }, - cache: make(map[string]cachedResult), - } -} diff --git a/navitia_api_client/client_test.go b/navitia_api_client/client_test.go deleted file mode 100644 index 332b222..0000000 --- a/navitia_api_client/client_test.go +++ /dev/null @@ -1,38 +0,0 @@ -package navitia_api_client - -import ( - "fmt" - "io/ioutil" - "net/http" - "net/http/httptest" - "testing" -) - -// package utilities -func NewTestClient(ts *httptest.Server) *Client { - return &Client{ - baseURL: fmt.Sprintf(ts.URL), - httpClient: ts.Client(), - cache: make(map[string]cachedResult), - } -} - -func NewTestClientFromFilename(t *testing.T, filename string) (*Client, *httptest.Server) { - ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - page, err := ioutil.ReadFile(filename) - if err != nil { - t.Fatalf("Could not open test file : %s", err) - } - w.Write(page) - })) - return NewTestClient(ts), ts -} - -// tests -func TestNewClient(t *testing.T) { - client := NewClient("test") - want := "https://test@api.sncf.com/v1" - if client.baseURL != want { - t.Fatal("Invalid new client") - } -} diff --git a/navitia_api_client/departures.go b/navitia_api_client/departures.go deleted file mode 100644 index 7738940..0000000 --- a/navitia_api_client/departures.go +++ /dev/null @@ -1,73 +0,0 @@ -package navitia_api_client - -import ( - "encoding/json" - "fmt" - "net/http" - "time" -) - -type DeparturesResponse struct { - Disruptions []interface{} `json:"disruptions"` - Notes []interface{} `json:"notes"` - Departures []struct { - DisplayInformations struct { - Direction string `json:"direction"` - Code string `json:"code"` - Network string `json:"network"` - Links []interface{} `json:"links"` - Color string `json:"color"` - Name string `json:"name"` - PhysicalMode string `json:"physical_mode"` - Headsign string `json:"headsign"` - Label string `json:"label"` - Equipments []interface{} `json:"equipments"` - TextColor string `json:"text_color"` - TripShortName string `json:"trip_short_name"` - CommercialMode string `json:"commercial_mode"` - Description string `json:"description"` - } `json:"display_informations"` - StopDateTime struct { - Links []interface{} `json:"links"` - ArrivalDateTime string `json:"arrival_date_time"` - AdditionalInformations []interface{} `json:"additional_informations"` - DepartureDateTime string `json:"departure_date_time"` - BaseArrivalDateTime string `json:"base_arrival_date_time"` - BaseDepartureDateTime string `json:"base_departure_date_time"` - DataFreshness string `json:"data_freshness"` - } `json:"stop_date_time"` - } `json:"departures"` - Context struct { - Timezone string `json:"timezone"` - CurrentDatetime string `json:"current_datetime"` - } `json:"context"` -} - -func (c *Client) GetDepartures() (departures *DeparturesResponse, err error) { - request := fmt.Sprintf("%s/coverage/sncf/stop_areas/stop_area:SNCF:87723502/departures", c.baseURL) - start := time.Now() - c.mutex.Lock() - defer c.mutex.Unlock() - if cachedResult, ok := c.cache[request]; ok { - if start.Sub(cachedResult.ts) < 60*1000*1000*1000 { - return cachedResult.result.(*DeparturesResponse), nil - } - } - req, err := http.NewRequest("GET", request, nil) - if err != nil { - return nil, err - } - resp, err := c.httpClient.Do(req) - if err != nil { - return nil, err - } - defer resp.Body.Close() - if err = json.NewDecoder(resp.Body).Decode(&departures); err != nil { - return nil, err - } - c.cache[request] = cachedResult{ - ts: start, - result: departures, - } - return -} diff --git a/navitia_api_client/departures_test.go b/navitia_api_client/departures_test.go deleted file mode 100644 index a1658d2..0000000 --- a/navitia_api_client/departures_test.go +++ /dev/null @@ -1,57 +0,0 @@ -package navitia_api_client - -import ( - "net/http" - "net/http/httptest" - "testing" -) - -func TestGetDepartures(t *testing.T) { - // invalid characters in token - client := NewClient("}") - _, err := client.GetDepartures() - if err == nil { - t.Fatalf("invalid characters in token should raise an error") - } - // unreachable server - client = NewClient("https://") - _, err = client.GetDepartures() - if err == nil { - t.Fatalf("unreachable server should raise an error") - } - // invalid json - client, ts := NewTestClientFromFilename(t, "test_data/invalid.json") - defer ts.Close() - _, err = client.GetDepartures() - if err == nil { - t.Fatalf("invalid json should raise an error") - } - // http error - ts = httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - w.WriteHeader(http.StatusNotFound) - })) - client = NewTestClient(ts) - _, err = client.GetDepartures() - if err == nil { - t.Fatalf("404 should raise an error") - } - // normal working request - client, ts = NewTestClientFromFilename(t, "test_data/normal-crepieux.json") - defer ts.Close() - departures, err := client.GetDepartures() - if err != nil { - t.Fatalf("could not get normal-crepieux departures : %s", err) - } - if len(departures.Departures) != 10 { - t.Fatalf("did not decode normal-crepieux departures properly, got %d departures when expected 10", len(departures.Departures)) - } - // test the cache (assuming the test takes less than 60 seconds (and it really should) it will be accurate) - ts.Close() - departures, err = client.GetDepartures() - if err != nil { - t.Fatalf("could not get normal-crepieux departures : %s", err) - } - if len(departures.Departures) != 10 { - t.Fatalf("did not decode normal-crepieux departures properly, got %d departures when expected 10", len(departures.Departures)) - } -} diff --git a/navitia_api_client/test_data/invalid.json b/navitia_api_client/test_data/invalid.json deleted file mode 100644 index 98232c6..0000000 --- a/navitia_api_client/test_data/invalid.json +++ /dev/null @@ -1 +0,0 @@ -{ diff --git a/navitia_api_client/test_data/normal-crepieux.json b/navitia_api_client/test_data/normal-crepieux.json deleted file mode 100644 index 19a635a..0000000 --- a/navitia_api_client/test_data/normal-crepieux.json +++ /dev/null @@ -1,2135 +0,0 @@ -{ - "pagination": { - "start_page": 0, - "items_on_page": 10, - "items_per_page": 10, - "total_result": 10 - }, - "links": [ - { - "href": "https://api.sncf.com/v1/coverage/sncf/stop_points/{stop_point.id}", - "type": "stop_point", - "rel": "stop_points", - "templated": true - }, - { - "href": "https://api.sncf.com/v1/coverage/sncf/commercial_modes/{commercial_modes.id}", - "type": "commercial_modes", - "rel": "commercial_modes", - "templated": true - }, - { - "href": "https://api.sncf.com/v1/coverage/sncf/stop_areas/{stop_area.id}", - "type": "stop_area", - "rel": "stop_areas", - "templated": true - }, - { - "href": "https://api.sncf.com/v1/coverage/sncf/physical_modes/{physical_modes.id}", - "type": "physical_modes", - "rel": "physical_modes", - "templated": true - }, - { - "href": "https://api.sncf.com/v1/coverage/sncf/routes/{route.id}", - "type": "route", - "rel": "routes", - "templated": true - }, - { - "href": "https://api.sncf.com/v1/coverage/sncf/commercial_modes/{commercial_mode.id}", - "type": "commercial_mode", - "rel": "commercial_modes", - "templated": true - }, - { - "href": "https://api.sncf.com/v1/coverage/sncf/vehicle_journeys/{vehicle_journey.id}", - "type": "vehicle_journey", - "rel": "vehicle_journeys", - "templated": true - }, - { - "href": "https://api.sncf.com/v1/coverage/sncf/lines/{line.id}", - "type": "line", - "rel": "lines", - "templated": true - }, - { - "href": "https://api.sncf.com/v1/coverage/sncf/physical_modes/{physical_mode.id}", - "type": "physical_mode", - "rel": "physical_modes", - "templated": true - }, - { - "href": "https://api.sncf.com/v1/coverage/sncf/networks/{network.id}", - "type": "network", - "rel": "networks", - "templated": true - }, - { - "href": "https://api.sncf.com/v1/coverage/sncf/stop_areas/stop_area:OCE:SA:87723502/departures", - "type": "first", - "templated": false - } - ], - "disruptions": [], - "notes": [], - "feed_publishers": [], - "departures": [ - { - "display_informations": { - "direction": "Ambérieu-en-Bugey (Ambérieu-en-Bugey)", - "code": "", - "network": "SNCF", - "links": [], - "color": "000000", - "name": "St-Etienne - Lyon - Ambérieu", - "physical_mode": "Train régional / TER", - "headsign": "886823", - "label": "St-Etienne - Lyon - Ambérieu", - "equipments": [], - "text_color": "FFFFFF", - "trip_short_name": "886823", - "commercial_mode": "TER", - "description": "" - }, - "stop_point": { - "commercial_modes": [ - { - "id": "commercial_mode:ter", - "name": "TER" - } - ], - "name": "Crépieux-la-Pape", - "links": [], - "physical_modes": [ - { - "id": "physical_mode:LocalTrain", - "name": "Train régional / TER" - } - ], - "coord": { - "lat": "45.803921", - "lon": "4.892737" - }, - "label": "Crépieux-la-Pape (Rillieux-la-Pape)", - "equipments": [], - "administrative_regions": [ - { - "insee": "69286", - "name": "Rillieux-la-Pape", - "level": 8, - "coord": { - "lat": "45.823514", - "lon": "4.8994366" - }, - "label": "Rillieux-la-Pape (69140)", - "id": "admin:fr:69286", - "zip_code": "69140" - } - ], - "fare_zone": { - "name": "0" - }, - "id": "stop_point:OCE:SP:TrainTER-87723502", - "stop_area": { - "codes": [ - { - "type": "CR-CI-CH", - "value": "0087-723502-00" - }, - { - "type": "UIC8", - "value": "87723502" - }, - { - "type": "external_code", - "value": "OCE87723502" - } - ], - "name": "Crépieux-la-Pape", - "links": [], - "coord": { - "lat": "45.803921", - "lon": "4.892737" - }, - "label": "Crépieux-la-Pape (Rillieux-la-Pape)", - "administrative_regions": [ - { - "insee": "69286", - "name": "Rillieux-la-Pape", - "level": 8, - "coord": { - "lat": "45.823514", - "lon": "4.8994366" - }, - "label": "Rillieux-la-Pape (69140)", - "id": "admin:fr:69286", - "zip_code": "69140" - } - ], - "timezone": "Europe/Paris", - "id": "stop_area:OCE:SA:87723502" - } - }, - "route": { - "direction": { - "embedded_type": "stop_area", - "stop_area": { - "codes": [ - { - "type": "CR-CI-CH", - "value": "0087-743716-BV" - }, - { - "type": "UIC8", - "value": "87743716" - }, - { - "type": "external_code", - "value": "OCE87743716" - } - ], - "name": "Ambérieu-en-Bugey", - "links": [], - "coord": { - "lat": "45.954008", - "lon": "5.342313" - }, - "label": "Ambérieu-en-Bugey (Ambérieu-en-Bugey)", - "timezone": "Europe/Paris", - "id": "stop_area:OCE:SA:87743716" - }, - "quality": 0, - "name": "Ambérieu-en-Bugey (Ambérieu-en-Bugey)", - "id": "stop_area:OCE:SA:87743716" - }, - "name": "St-Etienne-Châteaucreux vers Ambérieu-en-Bugey (Train TER)", - "links": [], - "physical_modes": [ - { - "id": "physical_mode:LocalTrain", - "name": "Train régional / TER" - } - ], - "is_frequence": "False", - "geojson": { - "type": "MultiLineString", - "coordinates": [] - }, - "direction_type": "forward", - "line": { - "code": "", - "name": "St-Etienne - Lyon - Ambérieu", - "links": [], - "color": "000000", - "geojson": { - "type": "MultiLineString", - "coordinates": [] - }, - "text_color": "FFFFFF", - "physical_modes": [ - { - "id": "physical_mode:LocalTrain", - "name": "Train régional / TER" - } - ], - "codes": [], - "closing_time": "221200", - "opening_time": "053500", - "commercial_mode": { - "id": "commercial_mode:ter", - "name": "TER" - }, - "id": "line:OCE:199" - }, - "id": "route:OCE:199-TrainTER-87726000-87743716" - }, - "links": [ - { - "type": "line", - "id": "line:OCE:199" - }, - { - "type": "vehicle_journey", - "id": "vehicle_journey:OCE:SN886823F29029_dst_1" - }, - { - "type": "route", - "id": "route:OCE:199-TrainTER-87726000-87743716" - }, - { - "type": "commercial_mode", - "id": "commercial_mode:ter" - }, - { - "type": "physical_mode", - "id": "physical_mode:LocalTrain" - }, - { - "type": "network", - "id": "network:sncf" - } - ], - "stop_date_time": { - "links": [], - "arrival_date_time": "20210218T131800", - "additional_informations": [], - "departure_date_time": "20210218T131800", - "base_arrival_date_time": "20210218T131800", - "base_departure_date_time": "20210218T131800", - "data_freshness": "base_schedule" - } - }, - { - "display_informations": { - "direction": "St-Etienne-Châteaucreux (Saint-Étienne)", - "code": "", - "network": "SNCF", - "links": [], - "color": "000000", - "name": "St-Etienne - Lyon - Ambérieu", - "physical_mode": "Train régional / TER", - "headsign": "886726", - "label": "St-Etienne - Lyon - Ambérieu", - "equipments": [], - "text_color": "FFFFFF", - "trip_short_name": "886726", - "commercial_mode": "TER", - "description": "" - }, - "stop_point": { - "commercial_modes": [ - { - "id": "commercial_mode:ter", - "name": "TER" - } - ], - "name": "Crépieux-la-Pape", - "links": [], - "physical_modes": [ - { - "id": "physical_mode:LocalTrain", - "name": "Train régional / TER" - } - ], - "coord": { - "lat": "45.803921", - "lon": "4.892737" - }, - "label": "Crépieux-la-Pape (Rillieux-la-Pape)", - "equipments": [], - "administrative_regions": [ - { - "insee": "69286", - "name": "Rillieux-la-Pape", - "level": 8, - "coord": { - "lat": "45.823514", - "lon": "4.8994366" - }, - "label": "Rillieux-la-Pape (69140)", - "id": "admin:fr:69286", - "zip_code": "69140" - } - ], - "fare_zone": { - "name": "0" - }, - "id": "stop_point:OCE:SP:TrainTER-87723502", - "stop_area": { - "codes": [ - { - "type": "CR-CI-CH", - "value": "0087-723502-00" - }, - { - "type": "UIC8", - "value": "87723502" - }, - { - "type": "external_code", - "value": "OCE87723502" - } - ], - "name": "Crépieux-la-Pape", - "links": [], - "coord": { - "lat": "45.803921", - "lon": "4.892737" - }, - "label": "Crépieux-la-Pape (Rillieux-la-Pape)", - "administrative_regions": [ - { - "insee": "69286", - "name": "Rillieux-la-Pape", - "level": 8, - "coord": { - "lat": "45.823514", - "lon": "4.8994366" - }, - "label": "Rillieux-la-Pape (69140)", - "id": "admin:fr:69286", - "zip_code": "69140" - } - ], - "timezone": "Europe/Paris", - "id": "stop_area:OCE:SA:87723502" - } - }, - "route": { - "direction": { - "embedded_type": "stop_area", - "stop_area": { - "codes": [ - { - "type": "CR-CI-CH", - "value": "0087-726000-BV" - }, - { - "type": "UIC8", - "value": "87726000" - }, - { - "type": "external_code", - "value": "OCE87726000" - } - ], - "name": "St-Etienne-Châteaucreux", - "links": [], - "coord": { - "lat": "45.443382", - "lon": "4.399996" - }, - "label": "St-Etienne-Châteaucreux (Saint-Étienne)", - "timezone": "Europe/Paris", - "id": "stop_area:OCE:SA:87726000" - }, - "quality": 0, - "name": "St-Etienne-Châteaucreux (Saint-Étienne)", - "id": "stop_area:OCE:SA:87726000" - }, - "name": "Ambérieu-en-Bugey vers St-Etienne-Châteaucreux (Train TER)", - "links": [], - "physical_modes": [ - { - "id": "physical_mode:LocalTrain", - "name": "Train régional / TER" - } - ], - "is_frequence": "False", - "geojson": { - "type": "MultiLineString", - "coordinates": [] - }, - "direction_type": "backward", - "line": { - "code": "", - "name": "St-Etienne - Lyon - Ambérieu", - "links": [], - "color": "000000", - "geojson": { - "type": "MultiLineString", - "coordinates": [] - }, - "text_color": "FFFFFF", - "physical_modes": [ - { - "id": "physical_mode:LocalTrain", - "name": "Train régional / TER" - } - ], - "codes": [], - "closing_time": "221200", - "opening_time": "053500", - "commercial_mode": { - "id": "commercial_mode:ter", - "name": "TER" - }, - "id": "line:OCE:199" - }, - "id": "route:OCE:199-TrainTER-87743716-87726000" - }, - "links": [ - { - "type": "line", - "id": "line:OCE:199" - }, - { - "type": "vehicle_journey", - "id": "vehicle_journey:OCE:SN886726F35035_dst_1" - }, - { - "type": "route", - "id": "route:OCE:199-TrainTER-87743716-87726000" - }, - { - "type": "commercial_mode", - "id": "commercial_mode:ter" - }, - { - "type": "physical_mode", - "id": "physical_mode:LocalTrain" - }, - { - "type": "network", - "id": "network:sncf" - } - ], - "stop_date_time": { - "links": [], - "arrival_date_time": "20210218T134100", - "additional_informations": [], - "departure_date_time": "20210218T134100", - "base_arrival_date_time": "20210218T134100", - "base_departure_date_time": "20210218T134100", - "data_freshness": "base_schedule" - } - }, - { - "display_informations": { - "direction": "Ambérieu-en-Bugey (Ambérieu-en-Bugey)", - "code": "", - "network": "SNCF", - "links": [], - "color": "000000", - "name": "St-Etienne - Lyon - Ambérieu", - "physical_mode": "Train régional / TER", - "headsign": "886827", - "label": "St-Etienne - Lyon - Ambérieu", - "equipments": [], - "text_color": "FFFFFF", - "trip_short_name": "886827", - "commercial_mode": "TER", - "description": "" - }, - "stop_point": { - "commercial_modes": [ - { - "id": "commercial_mode:ter", - "name": "TER" - } - ], - "name": "Crépieux-la-Pape", - "links": [], - "physical_modes": [ - { - "id": "physical_mode:LocalTrain", - "name": "Train régional / TER" - } - ], - "coord": { - "lat": "45.803921", - "lon": "4.892737" - }, - "label": "Crépieux-la-Pape (Rillieux-la-Pape)", - "equipments": [], - "administrative_regions": [ - { - "insee": "69286", - "name": "Rillieux-la-Pape", - "level": 8, - "coord": { - "lat": "45.823514", - "lon": "4.8994366" - }, - "label": "Rillieux-la-Pape (69140)", - "id": "admin:fr:69286", - "zip_code": "69140" - } - ], - "fare_zone": { - "name": "0" - }, - "id": "stop_point:OCE:SP:TrainTER-87723502", - "stop_area": { - "codes": [ - { - "type": "CR-CI-CH", - "value": "0087-723502-00" - }, - { - "type": "UIC8", - "value": "87723502" - }, - { - "type": "external_code", - "value": "OCE87723502" - } - ], - "name": "Crépieux-la-Pape", - "links": [], - "coord": { - "lat": "45.803921", - "lon": "4.892737" - }, - "label": "Crépieux-la-Pape (Rillieux-la-Pape)", - "administrative_regions": [ - { - "insee": "69286", - "name": "Rillieux-la-Pape", - "level": 8, - "coord": { - "lat": "45.823514", - "lon": "4.8994366" - }, - "label": "Rillieux-la-Pape (69140)", - "id": "admin:fr:69286", - "zip_code": "69140" - } - ], - "timezone": "Europe/Paris", - "id": "stop_area:OCE:SA:87723502" - } - }, - "route": { - "direction": { - "embedded_type": "stop_area", - "stop_area": { - "codes": [ - { - "type": "CR-CI-CH", - "value": "0087-743716-BV" - }, - { - "type": "UIC8", - "value": "87743716" - }, - { - "type": "external_code", - "value": "OCE87743716" - } - ], - "name": "Ambérieu-en-Bugey", - "links": [], - "coord": { - "lat": "45.954008", - "lon": "5.342313" - }, - "label": "Ambérieu-en-Bugey (Ambérieu-en-Bugey)", - "timezone": "Europe/Paris", - "id": "stop_area:OCE:SA:87743716" - }, - "quality": 0, - "name": "Ambérieu-en-Bugey (Ambérieu-en-Bugey)", - "id": "stop_area:OCE:SA:87743716" - }, - "name": "St-Etienne-Châteaucreux vers Ambérieu-en-Bugey (Train TER)", - "links": [], - "physical_modes": [ - { - "id": "physical_mode:LocalTrain", - "name": "Train régional / TER" - } - ], - "is_frequence": "False", - "geojson": { - "type": "MultiLineString", - "coordinates": [] - }, - "direction_type": "forward", - "line": { - "code": "", - "name": "St-Etienne - Lyon - Ambérieu", - "links": [], - "color": "000000", - "geojson": { - "type": "MultiLineString", - "coordinates": [] - }, - "text_color": "FFFFFF", - "physical_modes": [ - { - "id": "physical_mode:LocalTrain", - "name": "Train régional / TER" - } - ], - "codes": [], - "closing_time": "221200", - "opening_time": "053500", - "commercial_mode": { - "id": "commercial_mode:ter", - "name": "TER" - }, - "id": "line:OCE:199" - }, - "id": "route:OCE:199-TrainTER-87726000-87743716" - }, - "links": [ - { - "type": "line", - "id": "line:OCE:199" - }, - { - "type": "vehicle_journey", - "id": "vehicle_journey:OCE:SN886827F22022_dst_1" - }, - { - "type": "route", - "id": "route:OCE:199-TrainTER-87726000-87743716" - }, - { - "type": "commercial_mode", - "id": "commercial_mode:ter" - }, - { - "type": "physical_mode", - "id": "physical_mode:LocalTrain" - }, - { - "type": "network", - "id": "network:sncf" - } - ], - "stop_date_time": { - "links": [], - "arrival_date_time": "20210218T141800", - "additional_informations": [], - "departure_date_time": "20210218T141800", - "base_arrival_date_time": "20210218T141800", - "base_departure_date_time": "20210218T141800", - "data_freshness": "base_schedule" - } - }, - { - "display_informations": { - "direction": "St-Etienne-Châteaucreux (Saint-Étienne)", - "code": "", - "network": "SNCF", - "links": [], - "color": "000000", - "name": "St-Etienne - Lyon - Ambérieu", - "physical_mode": "Train régional / TER", - "headsign": "886728", - "label": "St-Etienne - Lyon - Ambérieu", - "equipments": [], - "text_color": "FFFFFF", - "trip_short_name": "886728", - "commercial_mode": "TER", - "description": "" - }, - "stop_point": { - "commercial_modes": [ - { - "id": "commercial_mode:ter", - "name": "TER" - } - ], - "name": "Crépieux-la-Pape", - "links": [], - "physical_modes": [ - { - "id": "physical_mode:LocalTrain", - "name": "Train régional / TER" - } - ], - "coord": { - "lat": "45.803921", - "lon": "4.892737" - }, - "label": "Crépieux-la-Pape (Rillieux-la-Pape)", - "equipments": [], - "administrative_regions": [ - { - "insee": "69286", - "name": "Rillieux-la-Pape", - "level": 8, - "coord": { - "lat": "45.823514", - "lon": "4.8994366" - }, - "label": "Rillieux-la-Pape (69140)", - "id": "admin:fr:69286", - "zip_code": "69140" - } - ], - "fare_zone": { - "name": "0" - }, - "id": "stop_point:OCE:SP:TrainTER-87723502", - "stop_area": { - "codes": [ - { - "type": "CR-CI-CH", - "value": "0087-723502-00" - }, - { - "type": "UIC8", - "value": "87723502" - }, - { - "type": "external_code", - "value": "OCE87723502" - } - ], - "name": "Crépieux-la-Pape", - "links": [], - "coord": { - "lat": "45.803921", - "lon": "4.892737" - }, - "label": "Crépieux-la-Pape (Rillieux-la-Pape)", - "administrative_regions": [ - { - "insee": "69286", - "name": "Rillieux-la-Pape", - "level": 8, - "coord": { - "lat": "45.823514", - "lon": "4.8994366" - }, - "label": "Rillieux-la-Pape (69140)", - "id": "admin:fr:69286", - "zip_code": "69140" - } - ], - "timezone": "Europe/Paris", - "id": "stop_area:OCE:SA:87723502" - } - }, - "route": { - "direction": { - "embedded_type": "stop_area", - "stop_area": { - "codes": [ - { - "type": "CR-CI-CH", - "value": "0087-726000-BV" - }, - { - "type": "UIC8", - "value": "87726000" - }, - { - "type": "external_code", - "value": "OCE87726000" - } - ], - "name": "St-Etienne-Châteaucreux", - "links": [], - "coord": { - "lat": "45.443382", - "lon": "4.399996" - }, - "label": "St-Etienne-Châteaucreux (Saint-Étienne)", - "timezone": "Europe/Paris", - "id": "stop_area:OCE:SA:87726000" - }, - "quality": 0, - "name": "St-Etienne-Châteaucreux (Saint-Étienne)", - "id": "stop_area:OCE:SA:87726000" - }, - "name": "Ambérieu-en-Bugey vers St-Etienne-Châteaucreux (Train TER)", - "links": [], - "physical_modes": [ - { - "id": "physical_mode:LocalTrain", - "name": "Train régional / TER" - } - ], - "is_frequence": "False", - "geojson": { - "type": "MultiLineString", - "coordinates": [] - }, - "direction_type": "backward", - "line": { - "code": "", - "name": "St-Etienne - Lyon - Ambérieu", - "links": [], - "color": "000000", - "geojson": { - "type": "MultiLineString", - "coordinates": [] - }, - "text_color": "FFFFFF", - "physical_modes": [ - { - "id": "physical_mode:LocalTrain", - "name": "Train régional / TER" - } - ], - "codes": [], - "closing_time": "221200", - "opening_time": "053500", - "commercial_mode": { - "id": "commercial_mode:ter", - "name": "TER" - }, - "id": "line:OCE:199" - }, - "id": "route:OCE:199-TrainTER-87743716-87726000" - }, - "links": [ - { - "type": "line", - "id": "line:OCE:199" - }, - { - "type": "vehicle_journey", - "id": "vehicle_journey:OCE:SN886728F16016_dst_1" - }, - { - "type": "route", - "id": "route:OCE:199-TrainTER-87743716-87726000" - }, - { - "type": "commercial_mode", - "id": "commercial_mode:ter" - }, - { - "type": "physical_mode", - "id": "physical_mode:LocalTrain" - }, - { - "type": "network", - "id": "network:sncf" - } - ], - "stop_date_time": { - "links": [], - "arrival_date_time": "20210218T144100", - "additional_informations": [], - "departure_date_time": "20210218T144100", - "base_arrival_date_time": "20210218T144100", - "base_departure_date_time": "20210218T144100", - "data_freshness": "base_schedule" - } - }, - { - "display_informations": { - "direction": "Ambérieu-en-Bugey (Ambérieu-en-Bugey)", - "code": "", - "network": "SNCF", - "links": [], - "color": "000000", - "name": "St-Etienne - Lyon - Ambérieu", - "physical_mode": "Train régional / TER", - "headsign": "886871", - "label": "St-Etienne - Lyon - Ambérieu", - "equipments": [], - "text_color": "FFFFFF", - "trip_short_name": "886871", - "commercial_mode": "TER", - "description": "" - }, - "stop_point": { - "commercial_modes": [ - { - "id": "commercial_mode:ter", - "name": "TER" - } - ], - "name": "Crépieux-la-Pape", - "links": [], - "physical_modes": [ - { - "id": "physical_mode:LocalTrain", - "name": "Train régional / TER" - } - ], - "coord": { - "lat": "45.803921", - "lon": "4.892737" - }, - "label": "Crépieux-la-Pape (Rillieux-la-Pape)", - "equipments": [], - "administrative_regions": [ - { - "insee": "69286", - "name": "Rillieux-la-Pape", - "level": 8, - "coord": { - "lat": "45.823514", - "lon": "4.8994366" - }, - "label": "Rillieux-la-Pape (69140)", - "id": "admin:fr:69286", - "zip_code": "69140" - } - ], - "fare_zone": { - "name": "0" - }, - "id": "stop_point:OCE:SP:TrainTER-87723502", - "stop_area": { - "codes": [ - { - "type": "CR-CI-CH", - "value": "0087-723502-00" - }, - { - "type": "UIC8", - "value": "87723502" - }, - { - "type": "external_code", - "value": "OCE87723502" - } - ], - "name": "Crépieux-la-Pape", - "links": [], - "coord": { - "lat": "45.803921", - "lon": "4.892737" - }, - "label": "Crépieux-la-Pape (Rillieux-la-Pape)", - "administrative_regions": [ - { - "insee": "69286", - "name": "Rillieux-la-Pape", - "level": 8, - "coord": { - "lat": "45.823514", - "lon": "4.8994366" - }, - "label": "Rillieux-la-Pape (69140)", - "id": "admin:fr:69286", - "zip_code": "69140" - } - ], - "timezone": "Europe/Paris", - "id": "stop_area:OCE:SA:87723502" - } - }, - "route": { - "direction": { - "embedded_type": "stop_area", - "stop_area": { - "codes": [ - { - "type": "CR-CI-CH", - "value": "0087-743716-BV" - }, - { - "type": "UIC8", - "value": "87743716" - }, - { - "type": "external_code", - "value": "OCE87743716" - } - ], - "name": "Ambérieu-en-Bugey", - "links": [], - "coord": { - "lat": "45.954008", - "lon": "5.342313" - }, - "label": "Ambérieu-en-Bugey (Ambérieu-en-Bugey)", - "timezone": "Europe/Paris", - "id": "stop_area:OCE:SA:87743716" - }, - "quality": 0, - "name": "Ambérieu-en-Bugey (Ambérieu-en-Bugey)", - "id": "stop_area:OCE:SA:87743716" - }, - "name": "St-Etienne-Châteaucreux vers Ambérieu-en-Bugey (Train TER)", - "links": [], - "physical_modes": [ - { - "id": "physical_mode:LocalTrain", - "name": "Train régional / TER" - } - ], - "is_frequence": "False", - "geojson": { - "type": "MultiLineString", - "coordinates": [] - }, - "direction_type": "forward", - "line": { - "code": "", - "name": "St-Etienne - Lyon - Ambérieu", - "links": [], - "color": "000000", - "geojson": { - "type": "MultiLineString", - "coordinates": [] - }, - "text_color": "FFFFFF", - "physical_modes": [ - { - "id": "physical_mode:LocalTrain", - "name": "Train régional / TER" - } - ], - "codes": [], - "closing_time": "221200", - "opening_time": "053500", - "commercial_mode": { - "id": "commercial_mode:ter", - "name": "TER" - }, - "id": "line:OCE:199" - }, - "id": "route:OCE:199-TrainTER-87726000-87743716" - }, - "links": [ - { - "type": "line", - "id": "line:OCE:199" - }, - { - "type": "vehicle_journey", - "id": "vehicle_journey:OCE:SN886871F27027_dst_1" - }, - { - "type": "route", - "id": "route:OCE:199-TrainTER-87726000-87743716" - }, - { - "type": "commercial_mode", - "id": "commercial_mode:ter" - }, - { - "type": "physical_mode", - "id": "physical_mode:LocalTrain" - }, - { - "type": "network", - "id": "network:sncf" - } - ], - "stop_date_time": { - "links": [], - "arrival_date_time": "20210218T151800", - "additional_informations": [], - "departure_date_time": "20210218T151800", - "base_arrival_date_time": "20210218T151800", - "base_departure_date_time": "20210218T151800", - "data_freshness": "base_schedule" - } - }, - { - "display_informations": { - "direction": "Ambérieu-en-Bugey (Ambérieu-en-Bugey)", - "code": "", - "network": "SNCF", - "links": [], - "color": "000000", - "name": "St-Etienne - Lyon - Ambérieu", - "physical_mode": "Train régional / TER", - "headsign": "886837", - "label": "St-Etienne - Lyon - Ambérieu", - "equipments": [], - "text_color": "FFFFFF", - "trip_short_name": "886837", - "commercial_mode": "TER", - "description": "" - }, - "stop_point": { - "commercial_modes": [ - { - "id": "commercial_mode:ter", - "name": "TER" - } - ], - "name": "Crépieux-la-Pape", - "links": [], - "physical_modes": [ - { - "id": "physical_mode:LocalTrain", - "name": "Train régional / TER" - } - ], - "coord": { - "lat": "45.803921", - "lon": "4.892737" - }, - "label": "Crépieux-la-Pape (Rillieux-la-Pape)", - "equipments": [], - "administrative_regions": [ - { - "insee": "69286", - "name": "Rillieux-la-Pape", - "level": 8, - "coord": { - "lat": "45.823514", - "lon": "4.8994366" - }, - "label": "Rillieux-la-Pape (69140)", - "id": "admin:fr:69286", - "zip_code": "69140" - } - ], - "fare_zone": { - "name": "0" - }, - "id": "stop_point:OCE:SP:TrainTER-87723502", - "stop_area": { - "codes": [ - { - "type": "CR-CI-CH", - "value": "0087-723502-00" - }, - { - "type": "UIC8", - "value": "87723502" - }, - { - "type": "external_code", - "value": "OCE87723502" - } - ], - "name": "Crépieux-la-Pape", - "links": [], - "coord": { - "lat": "45.803921", - "lon": "4.892737" - }, - "label": "Crépieux-la-Pape (Rillieux-la-Pape)", - "administrative_regions": [ - { - "insee": "69286", - "name": "Rillieux-la-Pape", - "level": 8, - "coord": { - "lat": "45.823514", - "lon": "4.8994366" - }, - "label": "Rillieux-la-Pape (69140)", - "id": "admin:fr:69286", - "zip_code": "69140" - } - ], - "timezone": "Europe/Paris", - "id": "stop_area:OCE:SA:87723502" - } - }, - "route": { - "direction": { - "embedded_type": "stop_area", - "stop_area": { - "codes": [ - { - "type": "CR-CI-CH", - "value": "0087-743716-BV" - }, - { - "type": "UIC8", - "value": "87743716" - }, - { - "type": "external_code", - "value": "OCE87743716" - } - ], - "name": "Ambérieu-en-Bugey", - "links": [], - "coord": { - "lat": "45.954008", - "lon": "5.342313" - }, - "label": "Ambérieu-en-Bugey (Ambérieu-en-Bugey)", - "timezone": "Europe/Paris", - "id": "stop_area:OCE:SA:87743716" - }, - "quality": 0, - "name": "Ambérieu-en-Bugey (Ambérieu-en-Bugey)", - "id": "stop_area:OCE:SA:87743716" - }, - "name": "St-Etienne-Châteaucreux vers Ambérieu-en-Bugey (Train TER)", - "links": [], - "physical_modes": [ - { - "id": "physical_mode:LocalTrain", - "name": "Train régional / TER" - } - ], - "is_frequence": "False", - "geojson": { - "type": "MultiLineString", - "coordinates": [] - }, - "direction_type": "forward", - "line": { - "code": "", - "name": "St-Etienne - Lyon - Ambérieu", - "links": [], - "color": "000000", - "geojson": { - "type": "MultiLineString", - "coordinates": [] - }, - "text_color": "FFFFFF", - "physical_modes": [ - { - "id": "physical_mode:LocalTrain", - "name": "Train régional / TER" - } - ], - "codes": [], - "closing_time": "221200", - "opening_time": "053500", - "commercial_mode": { - "id": "commercial_mode:ter", - "name": "TER" - }, - "id": "line:OCE:199" - }, - "id": "route:OCE:199-TrainTER-87726000-87743716" - }, - "links": [ - { - "type": "line", - "id": "line:OCE:199" - }, - { - "type": "vehicle_journey", - "id": "vehicle_journey:OCE:SN886837F18018_dst_1" - }, - { - "type": "route", - "id": "route:OCE:199-TrainTER-87726000-87743716" - }, - { - "type": "commercial_mode", - "id": "commercial_mode:ter" - }, - { - "type": "physical_mode", - "id": "physical_mode:LocalTrain" - }, - { - "type": "network", - "id": "network:sncf" - } - ], - "stop_date_time": { - "links": [], - "arrival_date_time": "20210218T161800", - "additional_informations": [], - "departure_date_time": "20210218T161800", - "base_arrival_date_time": "20210218T161800", - "base_departure_date_time": "20210218T161800", - "data_freshness": "base_schedule" - } - }, - { - "display_informations": { - "direction": "St-Etienne-Châteaucreux (Saint-Étienne)", - "code": "", - "network": "SNCF", - "links": [], - "color": "000000", - "name": "St-Etienne - Lyon - Ambérieu", - "physical_mode": "Train régional / TER", - "headsign": "886734", - "label": "St-Etienne - Lyon - Ambérieu", - "equipments": [], - "text_color": "FFFFFF", - "trip_short_name": "886734", - "commercial_mode": "TER", - "description": "" - }, - "stop_point": { - "commercial_modes": [ - { - "id": "commercial_mode:ter", - "name": "TER" - } - ], - "name": "Crépieux-la-Pape", - "links": [], - "physical_modes": [ - { - "id": "physical_mode:LocalTrain", - "name": "Train régional / TER" - } - ], - "coord": { - "lat": "45.803921", - "lon": "4.892737" - }, - "label": "Crépieux-la-Pape (Rillieux-la-Pape)", - "equipments": [], - "administrative_regions": [ - { - "insee": "69286", - "name": "Rillieux-la-Pape", - "level": 8, - "coord": { - "lat": "45.823514", - "lon": "4.8994366" - }, - "label": "Rillieux-la-Pape (69140)", - "id": "admin:fr:69286", - "zip_code": "69140" - } - ], - "fare_zone": { - "name": "0" - }, - "id": "stop_point:OCE:SP:TrainTER-87723502", - "stop_area": { - "codes": [ - { - "type": "CR-CI-CH", - "value": "0087-723502-00" - }, - { - "type": "UIC8", - "value": "87723502" - }, - { - "type": "external_code", - "value": "OCE87723502" - } - ], - "name": "Crépieux-la-Pape", - "links": [], - "coord": { - "lat": "45.803921", - "lon": "4.892737" - }, - "label": "Crépieux-la-Pape (Rillieux-la-Pape)", - "administrative_regions": [ - { - "insee": "69286", - "name": "Rillieux-la-Pape", - "level": 8, - "coord": { - "lat": "45.823514", - "lon": "4.8994366" - }, - "label": "Rillieux-la-Pape (69140)", - "id": "admin:fr:69286", - "zip_code": "69140" - } - ], - "timezone": "Europe/Paris", - "id": "stop_area:OCE:SA:87723502" - } - }, - "route": { - "direction": { - "embedded_type": "stop_area", - "stop_area": { - "codes": [ - { - "type": "CR-CI-CH", - "value": "0087-726000-BV" - }, - { - "type": "UIC8", - "value": "87726000" - }, - { - "type": "external_code", - "value": "OCE87726000" - } - ], - "name": "St-Etienne-Châteaucreux", - "links": [], - "coord": { - "lat": "45.443382", - "lon": "4.399996" - }, - "label": "St-Etienne-Châteaucreux (Saint-Étienne)", - "timezone": "Europe/Paris", - "id": "stop_area:OCE:SA:87726000" - }, - "quality": 0, - "name": "St-Etienne-Châteaucreux (Saint-Étienne)", - "id": "stop_area:OCE:SA:87726000" - }, - "name": "Ambérieu-en-Bugey vers St-Etienne-Châteaucreux (Train TER)", - "links": [], - "physical_modes": [ - { - "id": "physical_mode:LocalTrain", - "name": "Train régional / TER" - } - ], - "is_frequence": "False", - "geojson": { - "type": "MultiLineString", - "coordinates": [] - }, - "direction_type": "backward", - "line": { - "code": "", - "name": "St-Etienne - Lyon - Ambérieu", - "links": [], - "color": "000000", - "geojson": { - "type": "MultiLineString", - "coordinates": [] - }, - "text_color": "FFFFFF", - "physical_modes": [ - { - "id": "physical_mode:LocalTrain", - "name": "Train régional / TER" - } - ], - "codes": [], - "closing_time": "221200", - "opening_time": "053500", - "commercial_mode": { - "id": "commercial_mode:ter", - "name": "TER" - }, - "id": "line:OCE:199" - }, - "id": "route:OCE:199-TrainTER-87743716-87726000" - }, - "links": [ - { - "type": "line", - "id": "line:OCE:199" - }, - { - "type": "vehicle_journey", - "id": "vehicle_journey:OCE:SN886734F19019_dst_1" - }, - { - "type": "route", - "id": "route:OCE:199-TrainTER-87743716-87726000" - }, - { - "type": "commercial_mode", - "id": "commercial_mode:ter" - }, - { - "type": "physical_mode", - "id": "physical_mode:LocalTrain" - }, - { - "type": "network", - "id": "network:sncf" - } - ], - "stop_date_time": { - "links": [], - "arrival_date_time": "20210218T164100", - "additional_informations": [], - "departure_date_time": "20210218T164100", - "base_arrival_date_time": "20210218T164100", - "base_departure_date_time": "20210218T164100", - "data_freshness": "base_schedule" - } - }, - { - "display_informations": { - "direction": "Ambérieu-en-Bugey (Ambérieu-en-Bugey)", - "code": "", - "network": "SNCF", - "links": [], - "color": "000000", - "name": "St-Etienne - Lyon - Ambérieu", - "physical_mode": "Train régional / TER", - "headsign": "886839", - "label": "St-Etienne - Lyon - Ambérieu", - "equipments": [], - "text_color": "FFFFFF", - "trip_short_name": "886839", - "commercial_mode": "TER", - "description": "" - }, - "stop_point": { - "commercial_modes": [ - { - "id": "commercial_mode:ter", - "name": "TER" - } - ], - "name": "Crépieux-la-Pape", - "links": [], - "physical_modes": [ - { - "id": "physical_mode:LocalTrain", - "name": "Train régional / TER" - } - ], - "coord": { - "lat": "45.803921", - "lon": "4.892737" - }, - "label": "Crépieux-la-Pape (Rillieux-la-Pape)", - "equipments": [], - "administrative_regions": [ - { - "insee": "69286", - "name": "Rillieux-la-Pape", - "level": 8, - "coord": { - "lat": "45.823514", - "lon": "4.8994366" - }, - "label": "Rillieux-la-Pape (69140)", - "id": "admin:fr:69286", - "zip_code": "69140" - } - ], - "fare_zone": { - "name": "0" - }, - "id": "stop_point:OCE:SP:TrainTER-87723502", - "stop_area": { - "codes": [ - { - "type": "CR-CI-CH", - "value": "0087-723502-00" - }, - { - "type": "UIC8", - "value": "87723502" - }, - { - "type": "external_code", - "value": "OCE87723502" - } - ], - "name": "Crépieux-la-Pape", - "links": [], - "coord": { - "lat": "45.803921", - "lon": "4.892737" - }, - "label": "Crépieux-la-Pape (Rillieux-la-Pape)", - "administrative_regions": [ - { - "insee": "69286", - "name": "Rillieux-la-Pape", - "level": 8, - "coord": { - "lat": "45.823514", - "lon": "4.8994366" - }, - "label": "Rillieux-la-Pape (69140)", - "id": "admin:fr:69286", - "zip_code": "69140" - } - ], - "timezone": "Europe/Paris", - "id": "stop_area:OCE:SA:87723502" - } - }, - "route": { - "direction": { - "embedded_type": "stop_area", - "stop_area": { - "codes": [ - { - "type": "CR-CI-CH", - "value": "0087-743716-BV" - }, - { - "type": "UIC8", - "value": "87743716" - }, - { - "type": "external_code", - "value": "OCE87743716" - } - ], - "name": "Ambérieu-en-Bugey", - "links": [], - "coord": { - "lat": "45.954008", - "lon": "5.342313" - }, - "label": "Ambérieu-en-Bugey (Ambérieu-en-Bugey)", - "timezone": "Europe/Paris", - "id": "stop_area:OCE:SA:87743716" - }, - "quality": 0, - "name": "Ambérieu-en-Bugey (Ambérieu-en-Bugey)", - "id": "stop_area:OCE:SA:87743716" - }, - "name": "St-Etienne-Châteaucreux vers Ambérieu-en-Bugey (Train TER)", - "links": [], - "physical_modes": [ - { - "id": "physical_mode:LocalTrain", - "name": "Train régional / TER" - } - ], - "is_frequence": "False", - "geojson": { - "type": "MultiLineString", - "coordinates": [] - }, - "direction_type": "forward", - "line": { - "code": "", - "name": "St-Etienne - Lyon - Ambérieu", - "links": [], - "color": "000000", - "geojson": { - "type": "MultiLineString", - "coordinates": [] - }, - "text_color": "FFFFFF", - "physical_modes": [ - { - "id": "physical_mode:LocalTrain", - "name": "Train régional / TER" - } - ], - "codes": [], - "closing_time": "221200", - "opening_time": "053500", - "commercial_mode": { - "id": "commercial_mode:ter", - "name": "TER" - }, - "id": "line:OCE:199" - }, - "id": "route:OCE:199-TrainTER-87726000-87743716" - }, - "links": [ - { - "type": "line", - "id": "line:OCE:199" - }, - { - "type": "vehicle_journey", - "id": "vehicle_journey:OCE:SN886839F10010_dst_1" - }, - { - "type": "route", - "id": "route:OCE:199-TrainTER-87726000-87743716" - }, - { - "type": "commercial_mode", - "id": "commercial_mode:ter" - }, - { - "type": "physical_mode", - "id": "physical_mode:LocalTrain" - }, - { - "type": "network", - "id": "network:sncf" - } - ], - "stop_date_time": { - "links": [], - "arrival_date_time": "20210218T164800", - "additional_informations": [], - "departure_date_time": "20210218T164800", - "base_arrival_date_time": "20210218T164800", - "base_departure_date_time": "20210218T164800", - "data_freshness": "base_schedule" - } - }, - { - "display_informations": { - "direction": "Ambérieu-en-Bugey (Ambérieu-en-Bugey)", - "code": "", - "network": "SNCF", - "links": [], - "color": "000000", - "name": "St-Etienne - Lyon - Ambérieu", - "physical_mode": "Train régional / TER", - "headsign": "886843", - "label": "St-Etienne - Lyon - Ambérieu", - "equipments": [], - "text_color": "FFFFFF", - "trip_short_name": "886843", - "commercial_mode": "TER", - "description": "" - }, - "stop_point": { - "commercial_modes": [ - { - "id": "commercial_mode:ter", - "name": "TER" - } - ], - "name": "Crépieux-la-Pape", - "links": [], - "physical_modes": [ - { - "id": "physical_mode:LocalTrain", - "name": "Train régional / TER" - } - ], - "coord": { - "lat": "45.803921", - "lon": "4.892737" - }, - "label": "Crépieux-la-Pape (Rillieux-la-Pape)", - "equipments": [], - "administrative_regions": [ - { - "insee": "69286", - "name": "Rillieux-la-Pape", - "level": 8, - "coord": { - "lat": "45.823514", - "lon": "4.8994366" - }, - "label": "Rillieux-la-Pape (69140)", - "id": "admin:fr:69286", - "zip_code": "69140" - } - ], - "fare_zone": { - "name": "0" - }, - "id": "stop_point:OCE:SP:TrainTER-87723502", - "stop_area": { - "codes": [ - { - "type": "CR-CI-CH", - "value": "0087-723502-00" - }, - { - "type": "UIC8", - "value": "87723502" - }, - { - "type": "external_code", - "value": "OCE87723502" - } - ], - "name": "Crépieux-la-Pape", - "links": [], - "coord": { - "lat": "45.803921", - "lon": "4.892737" - }, - "label": "Crépieux-la-Pape (Rillieux-la-Pape)", - "administrative_regions": [ - { - "insee": "69286", - "name": "Rillieux-la-Pape", - "level": 8, - "coord": { - "lat": "45.823514", - "lon": "4.8994366" - }, - "label": "Rillieux-la-Pape (69140)", - "id": "admin:fr:69286", - "zip_code": "69140" - } - ], - "timezone": "Europe/Paris", - "id": "stop_area:OCE:SA:87723502" - } - }, - "route": { - "direction": { - "embedded_type": "stop_area", - "stop_area": { - "codes": [ - { - "type": "CR-CI-CH", - "value": "0087-743716-BV" - }, - { - "type": "UIC8", - "value": "87743716" - }, - { - "type": "external_code", - "value": "OCE87743716" - } - ], - "name": "Ambérieu-en-Bugey", - "links": [], - "coord": { - "lat": "45.954008", - "lon": "5.342313" - }, - "label": "Ambérieu-en-Bugey (Ambérieu-en-Bugey)", - "timezone": "Europe/Paris", - "id": "stop_area:OCE:SA:87743716" - }, - "quality": 0, - "name": "Ambérieu-en-Bugey (Ambérieu-en-Bugey)", - "id": "stop_area:OCE:SA:87743716" - }, - "name": "St-Etienne-Châteaucreux vers Ambérieu-en-Bugey (Train TER)", - "links": [], - "physical_modes": [ - { - "id": "physical_mode:LocalTrain", - "name": "Train régional / TER" - } - ], - "is_frequence": "False", - "geojson": { - "type": "MultiLineString", - "coordinates": [] - }, - "direction_type": "forward", - "line": { - "code": "", - "name": "St-Etienne - Lyon - Ambérieu", - "links": [], - "color": "000000", - "geojson": { - "type": "MultiLineString", - "coordinates": [] - }, - "text_color": "FFFFFF", - "physical_modes": [ - { - "id": "physical_mode:LocalTrain", - "name": "Train régional / TER" - } - ], - "codes": [], - "closing_time": "221200", - "opening_time": "053500", - "commercial_mode": { - "id": "commercial_mode:ter", - "name": "TER" - }, - "id": "line:OCE:199" - }, - "id": "route:OCE:199-TrainTER-87726000-87743716" - }, - "links": [ - { - "type": "line", - "id": "line:OCE:199" - }, - { - "type": "vehicle_journey", - "id": "vehicle_journey:OCE:SN886843F24024_dst_1" - }, - { - "type": "route", - "id": "route:OCE:199-TrainTER-87726000-87743716" - }, - { - "type": "commercial_mode", - "id": "commercial_mode:ter" - }, - { - "type": "physical_mode", - "id": "physical_mode:LocalTrain" - }, - { - "type": "network", - "id": "network:sncf" - } - ], - "stop_date_time": { - "links": [], - "arrival_date_time": "20210218T171800", - "additional_informations": [], - "departure_date_time": "20210218T171800", - "base_arrival_date_time": "20210218T171800", - "base_departure_date_time": "20210218T171800", - "data_freshness": "base_schedule" - } - }, - { - "display_informations": { - "direction": "St-Etienne-Châteaucreux (Saint-Étienne)", - "code": "", - "network": "SNCF", - "links": [], - "color": "000000", - "name": "St-Etienne - Lyon - Ambérieu", - "physical_mode": "Train régional / TER", - "headsign": "886738", - "label": "St-Etienne - Lyon - Ambérieu", - "equipments": [], - "text_color": "FFFFFF", - "trip_short_name": "886738", - "commercial_mode": "TER", - "description": "" - }, - "stop_point": { - "commercial_modes": [ - { - "id": "commercial_mode:ter", - "name": "TER" - } - ], - "name": "Crépieux-la-Pape", - "links": [], - "physical_modes": [ - { - "id": "physical_mode:LocalTrain", - "name": "Train régional / TER" - } - ], - "coord": { - "lat": "45.803921", - "lon": "4.892737" - }, - "label": "Crépieux-la-Pape (Rillieux-la-Pape)", - "equipments": [], - "administrative_regions": [ - { - "insee": "69286", - "name": "Rillieux-la-Pape", - "level": 8, - "coord": { - "lat": "45.823514", - "lon": "4.8994366" - }, - "label": "Rillieux-la-Pape (69140)", - "id": "admin:fr:69286", - "zip_code": "69140" - } - ], - "fare_zone": { - "name": "0" - }, - "id": "stop_point:OCE:SP:TrainTER-87723502", - "stop_area": { - "codes": [ - { - "type": "CR-CI-CH", - "value": "0087-723502-00" - }, - { - "type": "UIC8", - "value": "87723502" - }, - { - "type": "external_code", - "value": "OCE87723502" - } - ], - "name": "Crépieux-la-Pape", - "links": [], - "coord": { - "lat": "45.803921", - "lon": "4.892737" - }, - "label": "Crépieux-la-Pape (Rillieux-la-Pape)", - "administrative_regions": [ - { - "insee": "69286", - "name": "Rillieux-la-Pape", - "level": 8, - "coord": { - "lat": "45.823514", - "lon": "4.8994366" - }, - "label": "Rillieux-la-Pape (69140)", - "id": "admin:fr:69286", - "zip_code": "69140" - } - ], - "timezone": "Europe/Paris", - "id": "stop_area:OCE:SA:87723502" - } - }, - "route": { - "direction": { - "embedded_type": "stop_area", - "stop_area": { - "codes": [ - { - "type": "CR-CI-CH", - "value": "0087-726000-BV" - }, - { - "type": "UIC8", - "value": "87726000" - }, - { - "type": "external_code", - "value": "OCE87726000" - } - ], - "name": "St-Etienne-Châteaucreux", - "links": [], - "coord": { - "lat": "45.443382", - "lon": "4.399996" - }, - "label": "St-Etienne-Châteaucreux (Saint-Étienne)", - "timezone": "Europe/Paris", - "id": "stop_area:OCE:SA:87726000" - }, - "quality": 0, - "name": "St-Etienne-Châteaucreux (Saint-Étienne)", - "id": "stop_area:OCE:SA:87726000" - }, - "name": "Ambérieu-en-Bugey vers St-Etienne-Châteaucreux (Train TER)", - "links": [], - "physical_modes": [ - { - "id": "physical_mode:LocalTrain", - "name": "Train régional / TER" - } - ], - "is_frequence": "False", - "geojson": { - "type": "MultiLineString", - "coordinates": [] - }, - "direction_type": "backward", - "line": { - "code": "", - "name": "St-Etienne - Lyon - Ambérieu", - "links": [], - "color": "000000", - "geojson": { - "type": "MultiLineString", - "coordinates": [] - }, - "text_color": "FFFFFF", - "physical_modes": [ - { - "id": "physical_mode:LocalTrain", - "name": "Train régional / TER" - } - ], - "codes": [], - "closing_time": "221200", - "opening_time": "053500", - "commercial_mode": { - "id": "commercial_mode:ter", - "name": "TER" - }, - "id": "line:OCE:199" - }, - "id": "route:OCE:199-TrainTER-87743716-87726000" - }, - "links": [ - { - "type": "line", - "id": "line:OCE:199" - }, - { - "type": "vehicle_journey", - "id": "vehicle_journey:OCE:SN886738F27027_dst_1" - }, - { - "type": "route", - "id": "route:OCE:199-TrainTER-87743716-87726000" - }, - { - "type": "commercial_mode", - "id": "commercial_mode:ter" - }, - { - "type": "physical_mode", - "id": "physical_mode:LocalTrain" - }, - { - "type": "network", - "id": "network:sncf" - } - ], - "stop_date_time": { - "links": [], - "arrival_date_time": "20210218T174100", - "additional_informations": [], - "departure_date_time": "20210218T174100", - "base_arrival_date_time": "20210218T174100", - "base_departure_date_time": "20210218T174100", - "data_freshness": "base_schedule" - } - } - ], - "context": { - "timezone": "Europe/Paris", - "current_datetime": "20210218T125549" - }, - "exceptions": [] -} -- cgit v1.2.3