diff --git a/api/schedules.go b/api/schedules.go index af7e960..28ba970 100644 --- a/api/schedules.go +++ b/api/schedules.go @@ -3,6 +3,8 @@ package api import ( "encoding/json" "fmt" + "io" + "log" "net/http" "net/url" "sort" @@ -33,8 +35,9 @@ type IDFMRealTimeData struct { type IDFMRealTime struct { NextDepartures struct { - StatusCode int `json:"statusCode"` - Data []IDFMRealTimeData `json:"data"` + StatusCode int `json:"statusCode"` + ErrorMessage string `json:"errorMessage"` + Data []IDFMRealTimeData `json:"data"` } `json:"nextDepartures"` CrowdsourcingReports struct { congestions []struct { @@ -114,6 +117,8 @@ func getRealTime(code, station string) (*IDFMRealTime, error) { defer res.Body.Close() if res.StatusCode >= 400 { + v, _ := io.ReadAll(res.Body) + log.Println("Schedule not found: ", string(v)) return nil, fmt.Errorf("Schedule not found") } @@ -124,13 +129,18 @@ func getRealTime(code, station string) (*IDFMRealTime, error) { return nil, err } + if schedules.NextDepartures.StatusCode >= 400 { + log.Println("Schedule not found: ", schedules) + return nil, fmt.Errorf("Schedule not found: %s", schedules.NextDepartures.ErrorMessage) + } + return &schedules, nil } func declareSchedulesRoutes(router *gin.RouterGroup) { router.GET("/schedules/:type/:code/:station/:way", func(c *gin.Context) { t := convertLineType(string(c.Param("type"))) - code := string(c.Param("code")) + code := convertCode(t, string(c.Param("code"))) station := string(c.Param("station")) way := string(c.Param("way")) @@ -154,6 +164,7 @@ func declareSchedulesRoutes(router *gin.RouterGroup) { } } + log.Println("search", code, station) schedules, err := getRealTime(code, station) if err != nil { c.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{"errmsg": err.Error()})