From 5919bca2cabe9056bda7bb991464801a6167a9c3 Mon Sep 17 00:00:00 2001 From: Bradley Bickford Date: Sun, 19 Nov 2023 11:11:47 -0500 Subject: [PATCH] Adding a script to test retrieval of calendar events --- .gitignore | 1 + complex_gcalendar_test.py | 2 +- get_calendar_events.py | 89 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 91 insertions(+), 1 deletion(-) create mode 100644 get_calendar_events.py diff --git a/.gitignore b/.gitignore index 83f6e39..cb561b5 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ credentials.json +token.json \ No newline at end of file diff --git a/complex_gcalendar_test.py b/complex_gcalendar_test.py index 2c4886c..5769d69 100644 --- a/complex_gcalendar_test.py +++ b/complex_gcalendar_test.py @@ -10,7 +10,7 @@ from googleapiclient.discovery import build from googleapiclient.errors import HttpError from pprint import pprint -SCOPES = ['https://www.googleapis.comd/auth/calendar.readonly'] +SCOPES = ['https://www.googleapis.com/auth/calendar.readonly'] def authorize(): creds = None diff --git a/get_calendar_events.py b/get_calendar_events.py new file mode 100644 index 0000000..440e793 --- /dev/null +++ b/get_calendar_events.py @@ -0,0 +1,89 @@ +from __future__ import print_function + +import datetime +import os.path +import argparse + +from google.auth.transport.requests import Request +from google.oauth2.credentials import Credentials +from google_auth_oauthlib.flow import InstalledAppFlow +from googleapiclient.discovery import build +from googleapiclient.errors import HttpError +from pprint import pprint + +SCOPES = ['https://www.googleapis.com/auth/calendar.readonly'] + +def authorize(): + creds = None + + if os.path.exists('token.json'): + creds = Credentials.from_authorized_user_file('token.json', SCOPES) + + if not creds or not creds.valid: + if creds and creds.expired and creds.refresh_token: + creds.refresh(Request()) + else: + flow = InstalledAppFlow.from_client_secrets_file('credentials.json', SCOPES) + creds = flow.run_local_server(port=7384) + + with open('token.json', 'w') as token: + token.write(creds.to_json()) + + return creds + +def construct_calendar_service(creds): + return build('calendar', 'v3', credentials=creds) + +def list_all_calendars(calendar_service): + page_token = None + list_of_entries = [] + + while True: + calendar_list = calendar_service.calendarList().list(pageToken=page_token).execute() + + list_of_entries.extend(calendar_list['items']) + + page_token = calendar_list.get('nextPageToken') + + if not page_token: + break + + return list_of_entries + +def get_calendar_events(calendar_service, calendar_id, num_events): + now = datetime.datetime.utcnow().isoformat() + "Z" + + events_result = calendar_service.events().list( + calendarId=calendar_id, + timeMin=now, + maxResults=num_events, + singleEvents=True, + orderBy='startTime' + ).execute() + + events = events_result.get('items', []) + + return events + +def main(): + argument_parser = argparse.ArgumentParser() + argument_parser.add_argument('calendarname', help="The calendar name you want to see events from") + argument_parser.add_argument('numberofevents', help="The number of events to return") + parsed_args = argument_parser.parse_args() + + creds = authorize() + + service = construct_calendar_service(creds) + + all_calendars = list_all_calendars(service) + + for element in all_calendars: + if element["summary"] == parsed_args.calendarname: + events = get_calendar_events(service, element["id"], parsed_args.numberofevents) + + pprint(events) + + break + +if __name__ == '__main__': + main() \ No newline at end of file