-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.go
More file actions
108 lines (86 loc) · 2.67 KB
/
main.go
File metadata and controls
108 lines (86 loc) · 2.67 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
package main
import "context"
import "flag"
import "fmt"
import "log"
import "net/url"
import "time"
import "google.golang.org/api/sheets/v4"
import "google.golang.org/api/option"
func main() {
currentTime := time.Now()
username := flag.String("username", "", "Peloton email or username")
password := flag.String("password", "", "Peloton password")
currentDay := flag.String(
"date",
currentTime.Format("1/02/2006"),
"Optional. Load this date from spreadsheet instead of using today",
)
flag.Parse()
if *username == "" || *password == "" {
log.Println("A username and password input is required")
log.Fatalf("Use format 'hcotf-cli -username YOURUSERNAME -password YOURPASSWORD'")
}
_, err := time.Parse("1/02/2006", *currentDay)
if err != nil {
log.Fatalf("Unable to parse entered date. Use format mm/dd/yyyy. Entered: %s", *currentDay)
}
fmt.Printf("Today is: %s\n", *currentDay)
ps := NewPelotonSession(*username, *password)
pt := NewPelotonStack(ps.Session)
//ps.GetClass(m["classId"][0])
//pt.GetStack()
apiKey, err := Asset("data/config/api.key")
if err != nil {
log.Fatalf("Unable to get api key", err)
}
sheetId, err := Asset("data/config/sheet.id")
if err != nil {
log.Fatalf("Unable to get Google Sheet ID", err)
}
ctx := context.Background()
srv, err := sheets.NewService(ctx, option.WithAPIKey(string(apiKey)))
if err != nil {
log.Fatalf("Unable to retrieve Sheets client: %v", err)
}
spreadsheetId := string(sheetId)
readRange := "MONTHLY_LIST_VIEW!C8:I200"
resp, err := srv.Spreadsheets.Values.Get(spreadsheetId, readRange).Do()
if err != nil {
log.Fatalf("Unable to retrieve data from sheet: %v", err)
}
if len(resp.Values) == 0 {
log.Fatal("No data found.")
}
fmt.Println()
fmt.Println("Today's classes:")
curClassNames := []string{}
curClassIds := []string{}
for _, row := range resp.Values {
if row[0] == *currentDay && len(row) >= 7 {
m, err := url.ParseQuery(row[6].(string))
if err != nil {
log.Printf("Unable to parse row from today: %s - %s", row[6].(string), err)
} else {
fmt.Printf("\t %s %s\n", row[1], m["classId"][0])
curClassNames = append(curClassNames, row[1].(string))
curClassIds = append(curClassIds, m["classId"][0])
}
}
}
if len(curClassNames) == 0 {
log.Print("Unable to find any classes for today. Exiting without making any changes")
return
}
fmt.Println()
log.Println("Clear current stack")
pt.ClearStack()
for i := range curClassNames {
log.Printf("Add %s to stack\n", curClassNames[i])
pClass, err := ps.GetClass(curClassIds[i])
if err != nil {
log.Fatalf("Unable to find class: %s", curClassIds[i])
}
pt.AddClassToStack(pClass.JoinTokens.OnDemand)
}
}