adds some color to the mix

This commit is contained in:
Raphael Maenle 2020-03-13 21:46:14 +01:00
parent 0c2dec4441
commit 1bd2dcd460
4 changed files with 107 additions and 21 deletions

Binary file not shown.

1
calendars.json Normal file
View File

@ -0,0 +1 @@
{"calendars": [{"name": "Todoist"}, {"name": "https://intranet.fhwn.ac.at/ics/Default.aspx?FHTimetable.ics&id=YUWSjNJUx5I%3d&datediffmonths=1&replaceSpecialChars=1"}, {"name": "Hightower"}, {"name": "Home \ud83c\udfe0"}, {"name": "D-ARIA"}, {"name": "Office"}, {"name": "http://followshows.com/ical/AS3Bbq0q"}, {"name": "Grey"}, {"name": "Privat"}, {"name": "Work"}, {"name": "Social"}, {"name": "Life"}, {"name": "https://poledancevienna.at/mypdv/ical/XJSY-56GQ-G2VC"}, {"name": "Contacts"}, {"name": "Holidays in Austria"}, {"name": "Week Numbers"}]}

View File

@ -1,6 +1,8 @@
from __future__ import print_function from __future__ import print_function
import datetime import datetime
import dateutil.parser
import pickle import pickle
import json
import os.path import os.path
from googleapiclient.discovery import build from googleapiclient.discovery import build
from google_auth_oauthlib.flow import InstalledAppFlow from google_auth_oauthlib.flow import InstalledAppFlow
@ -9,15 +11,57 @@ from google.auth.transport.requests import Request
# If modifying these scopes, delete the file token.pickle. # If modifying these scopes, delete the file token.pickle.
SCOPES = ['https://www.googleapis.com/auth/calendar.readonly'] SCOPES = ['https://www.googleapis.com/auth/calendar.readonly']
visibleList = ['Hightower', 'Home \ud83c\udfe0', 'Office', 'Life', 'Social', 'Grey']
class Event: class Event:
def __init__(self, name_, color_, start_, end_): def __init__(self, name_, colorId_, start_, end_):
self.name = name_ self.name = name_
self.color = color_ self.colorId = colorId_
self.start = start_ self.start = start_
self.end = end_ self.end = end_
self.colorHex = '#adfff5'
if self.start == None or self.end == None :
self.allDay = True
else:
self.allDay = False
def startDateTime(self):
if self.allDay:
return None
return self.jsonFromDT(self.start)
def stopDateTime(self):
if self.allDay:
return None
return self.jsonFromDT(self.end)
def jsonFromDT(self, string):
sdt = dateutil.parser.parse(string)
data = {
'date': {
'year': sdt.year,
'month': sdt.month,
'day': sdt.day
},
'time': {
'hour': sdt.hour,
'minute': sdt.minute,
'second': sdt.second
}
}
return data
def print(self):
if self.allDay:
print(self.name + "All Day")
else:
print(self.name + ": " + self.start + ", " + self.end)
class Calendar: class Calendar:
def __init__(self, calendarId_, color_): def __init__(self, summary_, calendarId_, color_):
self.summary = summary_
self.calendarId = calendarId_ self.calendarId = calendarId_
self.color = color_ self.color = color_
@ -45,17 +89,36 @@ def calendarCredentials():
return service return service
def getCalendarEvents(service, startDate, endDate): def getCalendarColors(service):
colors = service.colors().get().execute()
return colors
def getCalendars(service):
page_token = None page_token = None
calendars = [] calendars = []
while True: while True:
calendar_list = service.calendarList().list(pageToken=page_token).execute() calendar_list = service.calendarList().list(pageToken=page_token).execute()
for calendar_list_entry in calendar_list['items']: for calendar in calendar_list['items']:
calendars.append(Calendar(calendar_list_entry['id'], calendar_list_entry['colorId'])) calendars.append(Calendar(calendar['summary'], calendar['id'], calendar['colorId']))
page_token = calendar_list.get('nextPageToken') page_token = calendar_list.get('nextPageToken')
if not page_token: if not page_token:
break break
return calendars
def purgeCalendars(calendars):
purged = []
for calendar in calendars:
print(calendar.summary)
if calendar.summary in visibleList:
purged.append(calendar)
return purged
def getCalendarEvents(service, startDate, endDate):
calendars = getCalendars(service)
calendars = purgeCalendars(calendars)
all_events = [] all_events = []
for calendar in calendars: for calendar in calendars:
@ -73,29 +136,51 @@ def getCalendarEvents(service, startDate, endDate):
if color == None: if color == None:
color = calendar.color color = calendar.color
all_events.append(Event(name, color, start, end)) event = Event(name, color, start, end)
all_events.append(event)
return all_events return all_events
def colorizeEvents(allEvents, colors):
for event in allEvents:
event.colorHex = colors['calendar'][event.colorId]['background']
def toJson(events):
data = {}
data['kind'] = 'calendar#events'
data['events'] = []
for event in events:
if event.allDay:
continue
data['events'].append({
'name': event.name,
'isAllDay': event.allDay,
'color': event.colorHex,
'startDateTime': event.startDateTime(),
'stopDateTime': event.stopDateTime()
})
with open('./calendarevents.json', 'w') as outfile:
json.dump(data, outfile)
def main(): def main():
service = calendarCredentials() service = calendarCredentials()
# Call the Calendar API
now = datetime.datetime.now(datetime.timezone.utc).astimezone()
now = now.replace(hour=0, minute=0)
today = now.isoformat() # + '+01:00' # 'Z' indicates UTC time
print("today: ")
print(today)
# one_day = datetime.timedelta(days=1)
tomorrow = (now.replace(hour=23, minute=0, second=1)).isoformat() # + '+01:00'
print("tomorrow: ")
print(tomorrow)
all_events = getCalendarEvents(service, today, tomorrow)
# define today and tomorrow
now = datetime.datetime.now(datetime.timezone.utc).astimezone()
today = now.replace(hour=0, minute=0, second = 0).isoformat()
tomorrow = now.replace(hour=23, minute=59, second=59).isoformat() # + '+01:00'
allEvents = getCalendarEvents(service, today, tomorrow)
colors = getCalendarColors(service)
colorizeEvents(allEvents, colors)
# if not events: # if not events:
# print('No upcoming events found.') # print('No upcoming events found.')
for event in all_events:
print(event.name + ": " + event.start + ", " + event.color) toJson(allEvents)
if __name__ == '__main__': if __name__ == '__main__':

Binary file not shown.