add leaderboard
This commit is contained in:
parent
d94be4df73
commit
dc696067b5
|
@ -3,6 +3,7 @@ package main
|
||||||
import (
|
import (
|
||||||
"flag"
|
"flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"log"
|
||||||
"os"
|
"os"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
|
||||||
|
@ -33,7 +34,10 @@ func main() {
|
||||||
sess = *sessId
|
sess = *sessId
|
||||||
}
|
}
|
||||||
|
|
||||||
body := getaoc.GetInput(sess, *year, day)
|
body, err := getaoc.GetInput(sess, *year, day)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
if *file == "-" {
|
if *file == "-" {
|
||||||
fmt.Println(body)
|
fmt.Println(body)
|
||||||
|
|
|
@ -0,0 +1,41 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"flag"
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
|
"os"
|
||||||
|
|
||||||
|
"code.chrissexton.org/cws/getaoc"
|
||||||
|
)
|
||||||
|
|
||||||
|
var year = flag.Int("year", 2019, "event year")
|
||||||
|
var sessId = flag.String("session", "", "session id")
|
||||||
|
var boardId = flag.Int("id", 0, "board id")
|
||||||
|
|
||||||
|
const base = "https://adventofcode.com"
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
flag.Parse()
|
||||||
|
if *boardId == 0 {
|
||||||
|
fmt.Fprintln(os.Stderr, "Error: Must provide a leaderboard id.")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
sess, ok := os.LookupEnv("AOC_SESSION")
|
||||||
|
if !ok && *sessId == "" {
|
||||||
|
fmt.Fprintln(os.Stderr, "Error: Must provide a session id.")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if *sessId != "" {
|
||||||
|
sess = *sessId
|
||||||
|
}
|
||||||
|
|
||||||
|
body, err := getaoc.GetLeaderboard(sess, *year, *boardId)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Println(body)
|
||||||
|
}
|
56
getaoc.go
56
getaoc.go
|
@ -1,20 +1,20 @@
|
||||||
package getaoc
|
package getaoc
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"log"
|
|
||||||
"net/http"
|
"net/http"
|
||||||
)
|
)
|
||||||
|
|
||||||
const base = "https://adventofcode.com"
|
const base = "https://adventofcode.com"
|
||||||
|
|
||||||
func GetInput(session string, year, day int) string {
|
func GetInput(session string, year, day int) (string, error) {
|
||||||
url := fmt.Sprintf("%s/%d/day/%d/input", base, year, day)
|
url := fmt.Sprintf("%s/%d/day/%d/input", base, year, day)
|
||||||
|
|
||||||
r, err := http.NewRequest(http.MethodGet, url, nil)
|
r, err := http.NewRequest(http.MethodGet, url, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
return "", err
|
||||||
}
|
}
|
||||||
r.AddCookie(&http.Cookie{
|
r.AddCookie(&http.Cookie{
|
||||||
Name: "session",
|
Name: "session",
|
||||||
|
@ -28,9 +28,55 @@ func GetInput(session string, year, day int) string {
|
||||||
c := http.Client{}
|
c := http.Client{}
|
||||||
resp, err := c.Do(r)
|
resp, err := c.Do(r)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
return "", err
|
||||||
}
|
}
|
||||||
defer resp.Body.Close()
|
defer resp.Body.Close()
|
||||||
body, _ := ioutil.ReadAll(resp.Body)
|
body, _ := ioutil.ReadAll(resp.Body)
|
||||||
return string(body)
|
return string(body), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetLeaderboard(session string, year, id int) (LeaderBoard, error) {
|
||||||
|
url := fmt.Sprintf("%s/%d/leaderboard/private/view/%d.json", base, year, id)
|
||||||
|
board := LeaderBoard{}
|
||||||
|
|
||||||
|
r, err := http.NewRequest(http.MethodGet, url, nil)
|
||||||
|
if err != nil {
|
||||||
|
return board, err
|
||||||
|
}
|
||||||
|
r.AddCookie(&http.Cookie{
|
||||||
|
Name: "session",
|
||||||
|
Value: session,
|
||||||
|
Path: "",
|
||||||
|
Domain: ".adventofcode.com",
|
||||||
|
Secure: false,
|
||||||
|
HttpOnly: false,
|
||||||
|
SameSite: 0,
|
||||||
|
})
|
||||||
|
c := http.Client{}
|
||||||
|
resp, err := c.Do(r)
|
||||||
|
if err != nil {
|
||||||
|
return board, err
|
||||||
|
}
|
||||||
|
defer resp.Body.Close()
|
||||||
|
dec := json.NewDecoder(resp.Body)
|
||||||
|
err = dec.Decode(&board)
|
||||||
|
if err != nil {
|
||||||
|
return board, err
|
||||||
|
}
|
||||||
|
return board, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type Member struct {
|
||||||
|
ID string `json:"id"`
|
||||||
|
Stars int `json:"stars"`
|
||||||
|
GlobalScore int `json:"global_score"`
|
||||||
|
Name string `json:"name"`
|
||||||
|
LastStarTs int `json:"last_star_ts"`
|
||||||
|
LocalScore int `json:"local_score"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type LeaderBoard struct {
|
||||||
|
Event string `json:"event"`
|
||||||
|
OwnerID string `json:"owner_id"`
|
||||||
|
Members map[string]Member `json:"members"`
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue