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