from __future__ import print_function import datetime import os.path import argparse import time 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()