From 3c5e31b25a53268b413bc1e511b7486a2a1c80b9 Mon Sep 17 00:00:00 2001 From: Julien Dessaux Date: Wed, 8 Sep 2021 15:23:50 +0200 Subject: Renamed TrainStop to simply Stop --- pkg/navitia_api_client/stops.go | 70 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 pkg/navitia_api_client/stops.go (limited to 'pkg/navitia_api_client/stops.go') diff --git a/pkg/navitia_api_client/stops.go b/pkg/navitia_api_client/stops.go new file mode 100644 index 0000000..f0cbcf8 --- /dev/null +++ b/pkg/navitia_api_client/stops.go @@ -0,0 +1,70 @@ +package navitia_api_client + +import ( + "encoding/json" + "fmt" + "net/http" + + "git.adyxax.org/adyxax/trains/pkg/model" +) + +type StopsResponse struct { + Pagination struct { + StartPage int `json:"start_page"` + ItemsOnPage int `json:"items_on_page"` + ItemsPerPage int `json:"items_per_page"` + TotalResult int `json:"total_result"` + } `json:"pagination"` + StopAreas []struct { + Name string `json:"name"` + ID string `json:"id"` + Codes []interface{} `json:"codes"` + Links []interface{} `json:"links"` + Coord interface{} `json:"coord"` + Label string `json:"label"` + Timezone interface{} `json:"timezone"` + AdministrativeRegion interface{} `json:"administrative_regions"` + } `json:"stop_areas"` + Links []interface{} `json:"links"` + Disruptions []interface{} `json:"disruptions"` + FeedPublishers []interface{} `json:"feed_publishers"` + Context interface{} `json:"context"` +} + +func (c *NavitiaClient) GetStops() (trainStops []model.Stop, err error) { + return getStopsPage(c, 0) +} + +func getStopsPage(c *NavitiaClient, i int) (trainStops []model.Stop, err error) { + request := fmt.Sprintf("%s/coverage/sncf/stop_areas?count=1000&start_page=%d", c.baseURL, i) + req, err := http.NewRequest("GET", request, nil) + if err != nil { + return nil, newHttpClientError("http.NewRequest error", err) + } + resp, err := c.httpClient.Do(req) + if err != nil { + return nil, newHttpClientError("httpClient.Do error", err) + } + defer resp.Body.Close() + if resp.StatusCode == http.StatusOK { + var data StopsResponse + if err = json.NewDecoder(resp.Body).Decode(&data); err != nil { + return nil, newJsonDecodeError("GetStops ", err) + } + for i := 0; i < len(data.StopAreas); i++ { + if data.StopAreas[i].Label != "" { + trainStops = append(trainStops, model.Stop{data.StopAreas[i].ID, data.StopAreas[i].Label}) + } + } + if data.Pagination.ItemsOnPage+data.Pagination.ItemsPerPage*data.Pagination.StartPage < data.Pagination.TotalResult { + tss, err := getStopsPage(c, i+1) + if err != nil { + return nil, err + } + trainStops = append(trainStops, tss...) + } + } else { + err = newApiError(resp.StatusCode, "GetStops") + } + return +} -- cgit v1.2.3