package main import ( "flag" "io/ioutil" "log" "time" "golang.org/x/oauth2/google" "google.golang.org/api/calendar/v3" ) var calName = flag.String("calendar", "", "name of calendar") var days = flag.Int("days", 0, "number of days in the future") func main() { flag.Parse() b, err := ioutil.ReadFile("credentials.json") if err != nil { log.Fatal(err) } // If modifying these scopes, delete your previously saved token.json. config, err := google.ConfigFromJSON(b, calendar.CalendarScope) if err != nil { log.Fatal(err) } client, err := getClient(config) if err != nil { log.Fatal(err) } srv, err := calendar.New(client) if err != nil { log.Fatal(err) } calendars, err := srv.CalendarList.List().Do() if err != nil { log.Fatal(err) } var myCal *calendar.CalendarListEntry for _, item := range calendars.Items { if item.Summary == *calName { myCal = item break } } if myCal == nil { log.Fatalf("calendar '%s' not found", *calName) } loc, err := time.LoadLocation("US/Pacific") if err != nil { log.Fatal(err) } now := time.Now().In(loc) for i := 0; i < *days; i++ { date := now.Add(time.Duration(i * 24) * time.Hour) for _, class := range classes { if !class.happensOnDay(date) { continue } ev := class.buildEvent(date) _, err := srv.Events.Insert(myCal.Id, ev).Do() if err != nil { log.Fatal(err) } } } /* ev := &calendar.Event{ Summary: "Test event", Start: &calendar.EventDateTime{ DateTime: "2020-09-09T16:00:00", TimeZone: "US/Pacific", }, End: &calendar.EventDateTime{ DateTime: "2020-09-09T17:00:00", TimeZone: "US/Pacific", }, Attendees: []*calendar.EventAttendee{ &calendar.EventAttendee{ Email: "oliver.park@heliosns.org", }, }, } res, err := srv.Events.Insert(myCal.Id, ev).Do() if err != nil { log.Fatal(err) } log.Printf("%#v", res) */ /* t := time.Now().Format(time.RFC3339) events, err := srv.Events.List(myCal.Id).ShowDeleted(false). SingleEvents(true).TimeMin(t).MaxResults(250).OrderBy("startTime").Do() if err != nil { log.Fatal(err) } for _, item := range events.Items { date := item.Start.DateTime if date == "" { date = item.Start.Date } log.Printf("%v (%v)", item.Summary, date) } */ }