incorporate jsonpatch package
This commit is contained in:
parent
5b3d257df4
commit
a7a53614cc
6
go.mod
6
go.mod
|
@ -2,4 +2,8 @@ module scm.dairydemon.net/filifa/mlblive
|
|||
|
||||
go 1.19
|
||||
|
||||
require github.com/gorilla/websocket v1.5.3 // indirect
|
||||
require (
|
||||
github.com/evanphx/json-patch/v5 v5.9.0 // indirect
|
||||
github.com/gorilla/websocket v1.5.3 // indirect
|
||||
github.com/pkg/errors v0.9.1 // indirect
|
||||
)
|
||||
|
|
4
go.sum
4
go.sum
|
@ -1,2 +1,6 @@
|
|||
github.com/evanphx/json-patch/v5 v5.9.0 h1:kcBlZQbplgElYIlo/n1hJbls2z/1awpXxpRi0/FOJfg=
|
||||
github.com/evanphx/json-patch/v5 v5.9.0/go.mod h1:VNkHZ/282BpEyt/tObQO8s5CMPmYYq14uClGH4abBuQ=
|
||||
github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg=
|
||||
github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
|
||||
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
|
||||
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||
|
|
|
@ -1,22 +1,22 @@
|
|||
package statsapi
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"io"
|
||||
"net/http"
|
||||
"net/url"
|
||||
)
|
||||
|
||||
var DefaultClient = NewClient(http.DefaultClient)
|
||||
|
||||
func Schedule(sportId, teamId string) (ScheduleResponse, error) {
|
||||
func Schedule(sportId, teamId string) ([]byte, error) {
|
||||
return DefaultClient.Schedule(sportId, teamId)
|
||||
}
|
||||
|
||||
func Feed(gamePk string) (FeedResponse, error) {
|
||||
func Feed(gamePk string) ([]byte, error) {
|
||||
return DefaultClient.Feed(gamePk)
|
||||
}
|
||||
|
||||
func DiffPatch(gamePk, startTimecode, pushUpdateId string) (DiffPatchResponse, error) {
|
||||
func DiffPatch(gamePk, startTimecode, pushUpdateId string) ([]byte, error) {
|
||||
return DefaultClient.DiffPatch(gamePk, startTimecode, pushUpdateId)
|
||||
}
|
||||
|
||||
|
@ -35,7 +35,7 @@ func NewClient(c *http.Client) *Client {
|
|||
}
|
||||
}
|
||||
|
||||
func (c *Client) Schedule(sportId, teamId string) (ScheduleResponse, error) {
|
||||
func (c *Client) Schedule(sportId, teamId string) ([]byte, error) {
|
||||
endpoint := url.URL{Path: "api/v1/schedule"}
|
||||
query := endpoint.Query()
|
||||
query.Add("sportId", sportId)
|
||||
|
@ -44,21 +44,17 @@ func (c *Client) Schedule(sportId, teamId string) (ScheduleResponse, error) {
|
|||
|
||||
url := c.baseURL.ResolveReference(&endpoint)
|
||||
|
||||
var schedule ScheduleResponse
|
||||
err := c.get(url.String(), &schedule)
|
||||
return schedule, err
|
||||
return c.get(url.String())
|
||||
}
|
||||
|
||||
func (c *Client) Feed(gamePk string) (FeedResponse, error) {
|
||||
func (c *Client) Feed(gamePk string) ([]byte, error) {
|
||||
endpoint := url.URL{Path: "api/v1.1/game/" + gamePk + "/feed/live"}
|
||||
url := c.baseURL.ResolveReference(&endpoint)
|
||||
|
||||
var feed FeedResponse
|
||||
err := c.get(url.String(), &feed)
|
||||
return feed, err
|
||||
return c.get(url.String())
|
||||
}
|
||||
|
||||
func (c *Client) DiffPatch(gamePk, startTimecode, pushUpdateId string) (DiffPatchResponse, error) {
|
||||
func (c *Client) DiffPatch(gamePk, startTimecode, pushUpdateId string) ([]byte, error) {
|
||||
endpoint := url.URL{Path: "api/v1.1/game/" + gamePk + "/feed/live/diffPatch"}
|
||||
query := endpoint.Query()
|
||||
query.Add("language", "en")
|
||||
|
@ -68,23 +64,21 @@ func (c *Client) DiffPatch(gamePk, startTimecode, pushUpdateId string) (DiffPatc
|
|||
|
||||
url := c.baseURL.ResolveReference(&endpoint)
|
||||
|
||||
var diffPatch DiffPatchResponse
|
||||
err := c.get(url.String(), &diffPatch)
|
||||
return diffPatch, err
|
||||
return c.get(url.String())
|
||||
}
|
||||
|
||||
func (c *Client) get(url string, v any) error {
|
||||
func (c *Client) get(url string) ([]byte, error) {
|
||||
req, err := http.NewRequest("GET", url, nil)
|
||||
if err != nil {
|
||||
return err
|
||||
return nil, err
|
||||
}
|
||||
|
||||
resp, err := c.httpClient.Do(req)
|
||||
if err != nil {
|
||||
return err
|
||||
return nil, err
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
err = json.NewDecoder(resp.Body).Decode(v)
|
||||
return err
|
||||
body, err := io.ReadAll(resp.Body)
|
||||
return body, err
|
||||
}
|
||||
|
|
50
main.go
50
main.go
|
@ -9,6 +9,7 @@ import (
|
|||
"strconv"
|
||||
"time"
|
||||
|
||||
"github.com/evanphx/json-patch/v5"
|
||||
"scm.dairydemon.net/filifa/mlblive/internal/statsapi"
|
||||
)
|
||||
|
||||
|
@ -38,7 +39,10 @@ func getGamePk() string {
|
|||
log.Fatal(err)
|
||||
}
|
||||
|
||||
gamePk := sched.Dates[0].Games[0].GamePk.String()
|
||||
var s statsapi.ScheduleResponse
|
||||
err = json.Unmarshal(sched, &s)
|
||||
|
||||
gamePk := s.Dates[0].Games[0].GamePk.String()
|
||||
return gamePk
|
||||
}
|
||||
|
||||
|
@ -59,10 +63,16 @@ func main() {
|
|||
log.Fatal(err)
|
||||
}
|
||||
|
||||
var game Game
|
||||
game.Update(&feed)
|
||||
var f statsapi.FeedResponse
|
||||
err = json.Unmarshal(feed, &f)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
ts := feed["metaData"].(map[string]any)["timeStamp"].(string)
|
||||
var game Game
|
||||
game.Update(&f)
|
||||
|
||||
ts := f["metaData"].(map[string]any)["timeStamp"].(string)
|
||||
|
||||
for {
|
||||
var p statsapi.Push
|
||||
|
@ -71,26 +81,44 @@ func main() {
|
|||
log.Fatal(err)
|
||||
}
|
||||
|
||||
patches, err := statsapi.DiffPatch(gamePk, ts, p.UpdateId)
|
||||
diffPatch, err := statsapi.DiffPatch(gamePk, ts, p.UpdateId)
|
||||
if err != nil {
|
||||
feed, err = statsapi.Feed(gamePk)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
} else {
|
||||
for _, patch := range patches {
|
||||
for _, instr := range patch.Diff {
|
||||
err = feed.Patch(&instr)
|
||||
var d []any
|
||||
err = json.Unmarshal(diffPatch, &d)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
diff := d[0].(map[string]any)["Diff"]
|
||||
patch, err := json.Marshal(diff)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
p, err := jsonpatch.DecodePatch(patch)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
patchedFeed, err := p.Apply(feed)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
err = json.Unmarshal(patchedFeed, &f)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
ts = feed["metaData"].(map[string]any)["timeStamp"].(string)
|
||||
ts = f["metaData"].(map[string]any)["timeStamp"].(string)
|
||||
|
||||
game.Update(&feed)
|
||||
game.Update(&f)
|
||||
fmt.Println(game)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue