cleanup and bug fixes
This commit is contained in:
parent
516ad5f467
commit
7347357aab
24
game.go
24
game.go
|
@ -8,13 +8,25 @@ type Game struct {
|
||||||
AwayScore uint
|
AwayScore uint
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *Game) Update(feed *statsapi.Feed) {
|
func (g *Game) Update(feed *statsapi.Feed) error {
|
||||||
homeScore, _ := (*feed)["liveData"].(map[string]any)["linescore"].(map[string]any)["teams"].(map[string]any)["home"].(map[string]any)["runs"].(float64)
|
homeScore := feed.LiveData.Linescore.Teams.Home.Runs
|
||||||
awayScore, _ := (*feed)["liveData"].(map[string]any)["linescore"].(map[string]any)["teams"].(map[string]any)["away"].(map[string]any)["runs"].(float64)
|
awayScore := feed.LiveData.Linescore.Teams.Away.Runs
|
||||||
// FIXME: currentPlay/result doesn't always have description
|
// FIXME: currentPlay/result doesn't always have description
|
||||||
desc, _ := (*feed)["liveData"].(map[string]any)["plays"].(map[string]any)["currentPlay"].(map[string]any)["result"].(map[string]any)["description"].(string)
|
desc := feed.LiveData.Plays.CurrentPlay.Result.Description
|
||||||
|
|
||||||
|
score, err := homeScore.Int64()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
g.HomeScore = uint(score)
|
||||||
|
|
||||||
|
score, err = awayScore.Int64()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
g.AwayScore = uint(score)
|
||||||
|
|
||||||
g.HomeScore = uint(homeScore)
|
|
||||||
g.AwayScore = uint(awayScore)
|
|
||||||
g.CurrPlayDesc = desc
|
g.CurrPlayDesc = desc
|
||||||
|
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,7 +8,37 @@ type FeedParams struct {
|
||||||
GamePk string
|
GamePk string
|
||||||
}
|
}
|
||||||
|
|
||||||
type Feed map[string]any
|
type Feed struct {
|
||||||
|
MetaData metadata
|
||||||
|
LiveData livedata
|
||||||
|
}
|
||||||
|
|
||||||
|
type metadata struct {
|
||||||
|
TimeStamp string
|
||||||
|
}
|
||||||
|
|
||||||
|
type livedata struct {
|
||||||
|
Plays plays
|
||||||
|
Linescore linescore
|
||||||
|
}
|
||||||
|
|
||||||
|
type linescore struct {
|
||||||
|
Teams teams
|
||||||
|
}
|
||||||
|
|
||||||
|
type teams struct {
|
||||||
|
Home team
|
||||||
|
Away team
|
||||||
|
}
|
||||||
|
|
||||||
|
type team struct {
|
||||||
|
Runs json.Number
|
||||||
|
}
|
||||||
|
|
||||||
|
type plays struct {
|
||||||
|
AllPlays []Play
|
||||||
|
CurrentPlay Play
|
||||||
|
}
|
||||||
|
|
||||||
type Play struct {
|
type Play struct {
|
||||||
Result result
|
Result result
|
||||||
|
|
46
main.go
46
main.go
|
@ -2,6 +2,7 @@ package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"errors"
|
||||||
"flag"
|
"flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
|
@ -41,6 +42,9 @@ func getGamePk() string {
|
||||||
|
|
||||||
var s statsapi.Schedule
|
var s statsapi.Schedule
|
||||||
err = json.Unmarshal(sched, &s)
|
err = json.Unmarshal(sched, &s)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
gamePk := s.Dates[0].Games[0].GamePk.String()
|
gamePk := s.Dates[0].Games[0].GamePk.String()
|
||||||
return gamePk
|
return gamePk
|
||||||
|
@ -54,10 +58,14 @@ func extractPatch(diffPatch []byte) (jsonpatch.Patch, error) {
|
||||||
return p, err
|
return p, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if len(d) == 0 {
|
||||||
|
return p, errors.New("empty diffPatch")
|
||||||
|
}
|
||||||
|
|
||||||
diff := d[0].(map[string]any)["Diff"]
|
diff := d[0].(map[string]any)["Diff"]
|
||||||
patch, err := json.Marshal(diff)
|
patch, err := json.Marshal(diff)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
return p, err
|
||||||
}
|
}
|
||||||
|
|
||||||
p, err = jsonpatch.DecodePatch(patch)
|
p, err = jsonpatch.DecodePatch(patch)
|
||||||
|
@ -76,21 +84,21 @@ func main() {
|
||||||
ch := make(chan error)
|
ch := make(chan error)
|
||||||
go ws.KeepAlive(10*time.Second, ch)
|
go ws.KeepAlive(10*time.Second, ch)
|
||||||
|
|
||||||
feed, err := statsapi.RequestFeed(gamePk)
|
feedResp, err := statsapi.RequestFeed(gamePk)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
var f statsapi.Feed
|
var feed statsapi.Feed
|
||||||
err = json.Unmarshal(feed, &f)
|
err = json.Unmarshal(feedResp, &feed)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
var game Game
|
var game Game
|
||||||
game.Update(&f)
|
game.Update(&feed)
|
||||||
|
|
||||||
ts := f["metaData"].(map[string]any)["timeStamp"].(string)
|
ts := feed.MetaData.TimeStamp
|
||||||
|
|
||||||
for {
|
for {
|
||||||
var p statsapi.Push
|
var p statsapi.Push
|
||||||
|
@ -99,32 +107,28 @@ func main() {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
diffPatch, err := statsapi.RequestDiffPatch(gamePk, ts, p.UpdateId)
|
diffPatchResp, err := statsapi.RequestDiffPatch(gamePk, ts, p.UpdateId)
|
||||||
|
patch, err := extractPatch(diffPatchResp)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
feed, err = statsapi.RequestFeed(gamePk)
|
feedResp, err = statsapi.RequestFeed(gamePk)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
p, err := extractPatch(diffPatch)
|
feedResp, err = patch.Apply(feedResp)
|
||||||
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 {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ts = f["metaData"].(map[string]any)["timeStamp"].(string)
|
err = json.Unmarshal(feedResp, &feed)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
game.Update(&f)
|
ts = feed.MetaData.TimeStamp
|
||||||
|
|
||||||
|
game.Update(&feed)
|
||||||
fmt.Println(game)
|
fmt.Println(game)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue