Skip to content

Instantly share code, notes, and snippets.

@johananl
Last active November 17, 2021 12:03
Show Gist options
  • Save johananl/00fd55495062048661a12b399074aefc to your computer and use it in GitHub Desktop.
Save johananl/00fd55495062048661a12b399074aefc to your computer and use it in GitHub Desktop.
Manipulating Google Calendar events using Python

Manipulating Google Calendar events from Python

Prerequisites

https://developers.google.com/calendar/api/quickstart/python#prerequisites

virtualenv venv
source venv/bin/activate
pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib
git clone https://gist.github.com/johananl/00fd55495062048661a12b399074aefc gist
cd gist

Listing events

python list-events.py 'Stupid meeting'

Output:

Stupid meeting qjc9gk50jv2sp8hd2tvt9c6i6g_R20211112T150000

Deleting events

python delete-event.py 'qjc9gk50jv2sp8hd2tvt9c6i6g_R20211112T150000'
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',
'https://www.googleapis.com/auth/calendar.events',
]
def main():
"""Calls the Google Calendar API and deletes the event identified by the
provided event ID.
"""
if len(sys.argv) != 2:
print(f'Usage: {sys.argv[0]} <event_id>')
sys.exit(1)
event_id = 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)
res = service.events().delete(calendarId='primary', eventId=event_id).execute()
print(res)
if __name__ == '__main__':
main()
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()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment