penguin/golifehk

@golifehk bot in Telegram

datasources/kmb/schedules.go

raw ยท 1241 bytes

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
}