package kmb import ( "encoding/json" "fmt" "io" "net/http" "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 ) { resp, err := http.Get( fmt.Sprintf( "https://data.etabus.gov.hk/v1/transport/kmb/eta/%s/%s/%s", r.BusStop.BusStopId, r.RouteId, r.ServiceType, ) ) if err != nil { return nil, err } return resp.Body, nil } 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 }