|
from __future__ import print_function |
|
import datetime |
|
import os.path |
|
import sys |
|
from googleapiclient.discovery import build |
|
from google_auth_oauthlib.flow import InstalledAppFlow |
|
from google.auth.transport.requests import Request |
|
from google.oauth2.credentials import Credentials |
|
|
|
# If modifying these scopes, delete the file token.json. |
|
SCOPES = [ |
|
'https://www.googleapis.com/auth/calendar.readonly', |
|
] |
|
|
|
|
|
def main(): |
|
"""Calls the Google Calendar API and prints the descriptions and IDs of |
|
all events whose descriptions match the provided string. |
|
""" |
|
|
|
if len(sys.argv) != 2: |
|
print(f'Usage: {sys.argv[0]} <expression>') |
|
sys.exit(1) |
|
expr = sys.argv[1] |
|
|
|
creds = None |
|
# The file token.json stores the user's access and refresh tokens, and is |
|
# created automatically when the authorization flow completes for the first |
|
# time. |
|
if os.path.exists('token.json'): |
|
creds = Credentials.from_authorized_user_file('token.json', SCOPES) |
|
# If there are no (valid) credentials available, let the user log in. |
|
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=0) |
|
# Save the credentials for the next run. |
|
with open('token.json', 'w') as token: |
|
token.write(creds.to_json()) |
|
|
|
service = build('calendar', 'v3', credentials=creds) |
|
|
|
page_token = None |
|
while True: |
|
events = service.events().list(calendarId='primary', pageToken=page_token).execute() |
|
for event in events['items']: |
|
if 'summary' in event and expr in event['summary']: |
|
print(event['summary'], event['id']) |
|
page_token = events.get('nextPageToken') |
|
if not page_token: |
|
break |
|
|
|
|
|
if __name__ == '__main__': |
|
main() |