Added kmb schedules
This commit is contained in:
62
datasources/kmb/schedules.go
Normal file
62
datasources/kmb/schedules.go
Normal file
@@ -0,0 +1,62 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user