package kmb import ( "encoding/json" "fmt" "io" "path/filepath" "time" "github.com/tgckpg/golifehk/utils" ) type Schedule struct { ETA time.Time `json:"eta,string"` Index int `json:"eta_seq"` DateCreated time.Time `json:"data_timestamp,string"` Remarks_en string `json:"rmk_en"` Remarks_sc string `json:"rmk_sc"` Remarks_tc string `json:"rmk_tc"` } type Schedules struct { Type string `json:"type"` Version string `json:"version"` DateCreated time.Time `json:"generated_timestamp,string"` Schedules []*Schedule `json:"data"` } func getSchedule(r *RouteStop) (*[]*Schedule, error) { CACHE_PATH := filepath.Join( utils.WORKDIR, "kmb-"+r.BusStop.BusStopId+"-"+r.RouteId+"-"+r.ServiceType+".json", ) QUERY_FUNC := func() (io.ReadCloser, error) { return utils.HttpGet(fmt.Sprintf( "https://data.etabus.gov.hk/v1/transport/kmb/eta/%s/%s/%s", r.BusStop.BusStopId, r.RouteId, r.ServiceType, )) } buff, err := utils.CacheStream(CACHE_PATH, QUERY_FUNC, 60) if err != nil { return nil, err } schedules := Schedules{} err = json.Unmarshal(buff.Bytes(), &schedules) if err != nil { return nil, err } return &schedules.Schedules, nil }