58 lines
1.2 KiB
Go
58 lines
1.2 KiB
Go
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
|
|
}
|