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
|
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 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg=
|
||||||
github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
|
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
|
package statsapi
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"io"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
)
|
)
|
||||||
|
|
||||||
var DefaultClient = NewClient(http.DefaultClient)
|
var DefaultClient = NewClient(http.DefaultClient)
|
||||||
|
|
||||||
func Schedule(sportId, teamId string) (ScheduleResponse, error) {
|
func Schedule(sportId, teamId string) ([]byte, error) {
|
||||||
return DefaultClient.Schedule(sportId, teamId)
|
return DefaultClient.Schedule(sportId, teamId)
|
||||||
}
|
}
|
||||||
|
|
||||||
func Feed(gamePk string) (FeedResponse, error) {
|
func Feed(gamePk string) ([]byte, error) {
|
||||||
return DefaultClient.Feed(gamePk)
|
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)
|
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"}
|
endpoint := url.URL{Path: "api/v1/schedule"}
|
||||||
query := endpoint.Query()
|
query := endpoint.Query()
|
||||||
query.Add("sportId", sportId)
|
query.Add("sportId", sportId)
|
||||||
|
@ -44,21 +44,17 @@ func (c *Client) Schedule(sportId, teamId string) (ScheduleResponse, error) {
|
||||||
|
|
||||||
url := c.baseURL.ResolveReference(&endpoint)
|
url := c.baseURL.ResolveReference(&endpoint)
|
||||||
|
|
||||||
var schedule ScheduleResponse
|
return c.get(url.String())
|
||||||
err := c.get(url.String(), &schedule)
|
|
||||||
return schedule, err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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"}
|
endpoint := url.URL{Path: "api/v1.1/game/" + gamePk + "/feed/live"}
|
||||||
url := c.baseURL.ResolveReference(&endpoint)
|
url := c.baseURL.ResolveReference(&endpoint)
|
||||||
|
|
||||||
var feed FeedResponse
|
return c.get(url.String())
|
||||||
err := c.get(url.String(), &feed)
|
|
||||||
return feed, err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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"}
|
endpoint := url.URL{Path: "api/v1.1/game/" + gamePk + "/feed/live/diffPatch"}
|
||||||
query := endpoint.Query()
|
query := endpoint.Query()
|
||||||
query.Add("language", "en")
|
query.Add("language", "en")
|
||||||
|
@ -68,23 +64,21 @@ func (c *Client) DiffPatch(gamePk, startTimecode, pushUpdateId string) (DiffPatc
|
||||||
|
|
||||||
url := c.baseURL.ResolveReference(&endpoint)
|
url := c.baseURL.ResolveReference(&endpoint)
|
||||||
|
|
||||||
var diffPatch DiffPatchResponse
|
return c.get(url.String())
|
||||||
err := c.get(url.String(), &diffPatch)
|
|
||||||
return diffPatch, err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Client) get(url string, v any) error {
|
func (c *Client) get(url string) ([]byte, error) {
|
||||||
req, err := http.NewRequest("GET", url, nil)
|
req, err := http.NewRequest("GET", url, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
resp, err := c.httpClient.Do(req)
|
resp, err := c.httpClient.Do(req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return nil, err
|
||||||
}
|
}
|
||||||
defer resp.Body.Close()
|
defer resp.Body.Close()
|
||||||
|
|
||||||
err = json.NewDecoder(resp.Body).Decode(v)
|
body, err := io.ReadAll(resp.Body)
|
||||||
return err
|
return body, err
|
||||||
}
|
}
|
||||||
|
|
56
main.go
56
main.go
|
@ -9,6 +9,7 @@ import (
|
||||||
"strconv"
|
"strconv"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/evanphx/json-patch/v5"
|
||||||
"scm.dairydemon.net/filifa/mlblive/internal/statsapi"
|
"scm.dairydemon.net/filifa/mlblive/internal/statsapi"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -38,7 +39,10 @@ func getGamePk() string {
|
||||||
log.Fatal(err)
|
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
|
return gamePk
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -59,10 +63,16 @@ func main() {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
var game Game
|
var f statsapi.FeedResponse
|
||||||
game.Update(&feed)
|
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 {
|
for {
|
||||||
var p statsapi.Push
|
var p statsapi.Push
|
||||||
|
@ -71,26 +81,44 @@ func main() {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
patches, err := statsapi.DiffPatch(gamePk, ts, p.UpdateId)
|
diffPatch, err := statsapi.DiffPatch(gamePk, ts, p.UpdateId)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
feed, err = statsapi.Feed(gamePk)
|
feed, err = statsapi.Feed(gamePk)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for _, patch := range patches {
|
var d []any
|
||||||
for _, instr := range patch.Diff {
|
err = json.Unmarshal(diffPatch, &d)
|
||||||
err = feed.Patch(&instr)
|
if err != nil {
|
||||||
if err != nil {
|
log.Fatal(err)
|
||||||
log.Println(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)
|
fmt.Println(game)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue