Custom Member Parsing
This commit is contained in:
		
							
								
								
									
										36
									
								
								aoc.go
									
									
									
									
									
								
							
							
						
						
									
										36
									
								
								aoc.go
									
									
									
									
									
								
							@@ -7,7 +7,6 @@ import (
 | 
				
			|||||||
	"io/ioutil"
 | 
						"io/ioutil"
 | 
				
			||||||
	"net/http"
 | 
						"net/http"
 | 
				
			||||||
	"strconv"
 | 
						"strconv"
 | 
				
			||||||
	"strings"
 | 
					 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -46,7 +45,7 @@ func (a *AoC) GetLeaderboard(year int) (*Leaderboard, error) {
 | 
				
			|||||||
		return nil, errors.New("Invalid Year")
 | 
							return nil, errors.New("Invalid Year")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if board, ok := a.boards[year]; ok {
 | 
						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
 | 
								return board, nil
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -83,7 +82,7 @@ func (a *AoC) fetchLeaderboard(year int) (*Leaderboard, error) {
 | 
				
			|||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	strBody := string(body)
 | 
						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)
 | 
						err = json.Unmarshal([]byte(strBody), &leaderboard)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		fmt.Println("Error parsing board")
 | 
							fmt.Println("Error parsing board")
 | 
				
			||||||
@@ -143,3 +142,34 @@ func (a ByStarsThenScore) Less(i, j int) bool {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	return a[i].Stars < a[j].Stars
 | 
						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
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user