From af7437c23800e43943ef1d57dc430b322b4264c5 Mon Sep 17 00:00:00 2001 From: Brian Buller Date: Thu, 2 Dec 2021 11:44:57 -0600 Subject: [PATCH] Custom Member Parsing --- aoc.go | 36 +++++++++++++++++++++++++++++++++--- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/aoc.go b/aoc.go index 1739447..8c12629 100644 --- a/aoc.go +++ b/aoc.go @@ -7,7 +7,6 @@ import ( "io/ioutil" "net/http" "strconv" - "strings" "time" ) @@ -46,7 +45,7 @@ func (a *AoC) GetLeaderboard(year int) (*Leaderboard, error) { return nil, errors.New("Invalid Year") } if board, ok := a.boards[year]; ok { - if time.Since(board.LastFetch) < (time.Minute * 10) { + if time.Since(board.LastFetch) < (time.Minute * 15) { return board, nil } } @@ -83,7 +82,7 @@ func (a *AoC) fetchLeaderboard(year int) (*Leaderboard, error) { return nil, err } strBody := string(body) - strBody = strings.ReplaceAll(strBody, "\"last_star_ts\":\"0\"", "\"last_star_ts\":0") + //strBody = strings.ReplaceAll(strBody, "\"last_star_ts\":\"0\"", "\"last_star_ts\":0") err = json.Unmarshal([]byte(strBody), &leaderboard) if err != nil { fmt.Println("Error parsing board") @@ -143,3 +142,34 @@ func (a ByStarsThenScore) Less(i, j int) bool { } return a[i].Stars < a[j].Stars } + +func (m *Member) UnmarshalJSON(data []byte) error { + + var v map[string]interface{} + var err error + + if err = json.Unmarshal(data, &v); err != nil { + return err + } + m.ID = v["id"].(string) + m.Name = v["name"].(string) + m.Stars = int(v["stars"].(float64)) + + switch v["last_star_ts"].(type) { + case float64: + m.RawStarTs = fmt.Sprintf("%d", int(v["last_star_ts"].(float64))) + case int: + m.RawStarTs = strconv.Itoa(v["last_star_ts"].(int)) + case string: + m.RawStarTs = v["last_star_ts"].(string) + default: + m.RawStarTs = "0" + } + starTs, err := strconv.ParseInt(m.RawStarTs, 10, 64) + if err != nil { + starTs = 0 + } + m.LastStarTs = time.Unix(starTs, 0) + + return nil +}