package main import ( "encoding/json" "log" "net/http" "net/url" "os" ) type RMVResponse struct { Trip []Trip `json:"Trip"` } type Trip struct { LegList LegList `json:"LegList"` } type LegList struct { Leg []Leg `json:"Leg"` } type Leg struct { Type string `json:"type"` Name string `json:"name"` Origin Stop `json:"Origin"` Destination Stop `json:"Destination"` } type Stop struct { Name string `json:"name"` Time string `json:"time"` RtTime string `json:"rtTime"` } type Verbindung struct { Linie string Abfahrt string Ankunft string Von string Nach string } func rmv_request() { u, _ := url.Parse("https://www.rmv.de/hapi/trip") q := u.Query() q.Set("originId", "3018009") q.Set("destId", "3029164") q.Set("format", "json") q.Set("accessId", os.Getenv("RMV_API_KEY")) u.RawQuery = q.Encode() resp, err := http.Get(u.String()) if err != nil { panic(err) } defer resp.Body.Close() var respData RMVResponse dec := json.NewDecoder(resp.Body) if err := dec.Decode(&respData); err != nil { log.Fatal(err) } var verbindungen [][]Verbindung for _, trip := range respData.Trip { var tripInfo []Verbindung for _, leg := range trip.LegList.Leg { if leg.Type == "WALK" { continue } abfahrt := leg.Origin.RtTime if abfahrt == "" { abfahrt = leg.Origin.Time } ankunft := leg.Destination.RtTime if ankunft == "" { ankunft = leg.Destination.Time } tripInfo = append(tripInfo, Verbindung{ Linie: leg.Name, Abfahrt: abfahrt, Ankunft: ankunft, Von: leg.Origin.Name, Nach: leg.Destination.Name, }) } if len(tripInfo) > 0 { verbindungen = append(verbindungen, tripInfo) } } writeVerbindungToSQL(verbindungen) log.Println("RMV data updated") if err := writeVerbindungToSQL(verbindungen); err != nil { log.Printf("failed to persist RMV data: %v", err) } }