From e1c1c3c6afabdc0a8620778f27dde8e75a067764 Mon Sep 17 00:00:00 2001 From: Janne Mareike Koschinski <janne@kuschku.de> Date: Fri, 26 Apr 2019 20:34:57 +0200 Subject: [PATCH] Refactored api client --- go.mod | 2 +- go.sum | 3 ++- main.go | 68 ++++++++++++++++++++++++++++++++++++++------------------- 3 files changed, 48 insertions(+), 25 deletions(-) diff --git a/go.mod b/go.mod index fad95e9..27937bd 100644 --- a/go.mod +++ b/go.mod @@ -2,4 +2,4 @@ module git.kuschku.de/justjanne/bahn-proxy go 1.12 -require git.kuschku.de/justjanne/bahn-api v0.0.0-20190426164822-2005e844c1c3 +require git.kuschku.de/justjanne/bahn-api v0.0.0-20190426183324-6148fdeae5b2 diff --git a/go.sum b/go.sum index b70bfc5..2852086 100644 --- a/go.sum +++ b/go.sum @@ -1,3 +1,4 @@ -git.kuschku.de/justjanne/bahn-api v0.0.0-20190426164822-2005e844c1c3/go.mod h1:rpAScvoRtRrl72NB07uxpiWBo3V/wJxr+bFkSItGil4= +git.kuschku.de/justjanne/bahn-api v0.0.0-20190426183324-6148fdeae5b2 h1:7ZO091t3gVKMuVUovC/Fdt952UpLI44OCd7A0XArRMw= +git.kuschku.de/justjanne/bahn-api v0.0.0-20190426183324-6148fdeae5b2/go.mod h1:rpAScvoRtRrl72NB07uxpiWBo3V/wJxr+bFkSItGil4= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/main.go b/main.go index 426605a..7de1981 100644 --- a/main.go +++ b/main.go @@ -2,12 +2,12 @@ package main import ( "encoding/json" - "fmt" "git.kuschku.de/justjanne/bahn-api" "log" "net/http" "path" "sort" + "strconv" "strings" "time" ) @@ -29,8 +29,12 @@ func returnJson(w http.ResponseWriter, data interface{}) error { func main() { autocompleteStations := loadAutocompleteStations() - var netClient = &http.Client{ - Timeout: time.Second * 10, + apiClient := bahn.ApiClient{ + IrisBaseUrl: "http://iris.noncd.db.de/iris-tts", + CoachSequenceBaseUrl: "https://www.apps-bahn.de/wr/wagenreihung/1.0/", + HttpClient: &http.Client{ + Timeout: time.Second * 10, + }, } MaxResults := 20 @@ -87,25 +91,21 @@ func main() { http.HandleFunc("/station/", func(w http.ResponseWriter, r *http.Request) { var err error - _, evaId := path.Split(r.URL.Path) - evaId = strings.TrimSpace(evaId) + _, rawEvaId := path.Split(r.URL.Path) + rawEvaId = strings.TrimSpace(rawEvaId) - url := fmt.Sprintf("http://iris.noncd.db.de/iris-tts/timetable/station/%s", evaId) - - var response *http.Response - if response, err = netClient.Get(url); err != nil { + var evaId int64 + if evaId, err = strconv.ParseInt(rawEvaId, 10, 64); err != nil { log.Fatal(err) return } var stations []bahn.Station - if stations, err = bahn.StationsFromReader(response.Body); err != nil { - log.Fatal(err) - } - if err = response.Body.Close(); err != nil { + if stations, err = apiClient.Station(evaId); err != nil { log.Fatal(err) return } + if err = returnJson(w, stations); err != nil { log.Fatal(err) return @@ -114,32 +114,54 @@ func main() { http.HandleFunc("/timetable/", func(w http.ResponseWriter, r *http.Request) { var err error - _, evaId := path.Split(r.URL.Path) - evaId = strings.TrimSpace(evaId) + _, rawEvaId := path.Split(r.URL.Path) + rawEvaId = strings.TrimSpace(rawEvaId) + + var evaId int64 + if evaId, err = strconv.ParseInt(rawEvaId, 10, 64); err != nil { + log.Fatal(err) + return + } var date time.Time if date, err = time.Parse(time.RFC3339, strings.TrimSpace(r.FormValue("time"))); err != nil { date = time.Now() } - BahnFormat := "060102/15" - - url := fmt.Sprintf("http://iris.noncd.db.de/iris-tts/timetable/plan/%s/%s", evaId, date.Format(BahnFormat)) + var timetable bahn.Timetable + if timetable, err = apiClient.Timetable(evaId, date); err != nil { + log.Fatal(err) + return + } - var response *http.Response - if response, err = netClient.Get(url); err != nil { + if err = returnJson(w, timetable); err != nil { log.Fatal(err) return } + }) + http.HandleFunc("/realtime/", func(w http.ResponseWriter, r *http.Request) { + var err error - var timetable bahn.Timetable - if timetable, err = bahn.TimetableFromReader(response.Body); err != nil { + _, rawEvaId := path.Split(r.URL.Path) + rawEvaId = strings.TrimSpace(rawEvaId) + + var evaId int64 + if evaId, err = strconv.ParseInt(rawEvaId, 10, 64); err != nil { log.Fatal(err) + return } - if err = response.Body.Close(); err != nil { + + var date time.Time + if date, err = time.Parse(time.RFC3339, strings.TrimSpace(r.FormValue("time"))); err != nil { + date = time.Now() + } + + var timetable bahn.Timetable + if timetable, err = apiClient.RealtimeAll(evaId, date); err != nil { log.Fatal(err) return } + if err = returnJson(w, timetable); err != nil { log.Fatal(err) return -- GitLab