adds some color to the mix
This commit is contained in:
		
							
								
								
									
										
											BIN
										
									
								
								__pycache__/quickstart.cpython-36.pyc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								__pycache__/quickstart.cpython-36.pyc
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										1
									
								
								calendars.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								calendars.json
									
									
									
									
									
										Normal 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"}]} | ||||||
							
								
								
									
										127
									
								
								quickstart.py
									
									
									
									
									
								
							
							
						
						
									
										127
									
								
								quickstart.py
									
									
									
									
									
								
							| @@ -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__': | ||||||
|   | |||||||
							
								
								
									
										
											BIN
										
									
								
								token.pickle
									
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								token.pickle
									
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							
		Reference in New Issue
	
	Block a user