cleanup and bug fixes

This commit is contained in:
filifa 2024-07-13 16:37:04 -05:00
parent 516ad5f467
commit 7347357aab
3 changed files with 74 additions and 28 deletions

26
game.go
View File

@ -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
g.HomeScore = uint(homeScore) score, err := homeScore.Int64()
g.AwayScore = uint(awayScore) if err != nil {
g.CurrPlayDesc = desc return err
}
g.HomeScore = uint(score)
score, err = awayScore.Int64()
if err != nil {
return err
}
g.AwayScore = uint(score)
g.CurrPlayDesc = desc
return nil
} }

View File

@ -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
View File

@ -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)
} }
} }