How to get started with Google Calendar API using Python with Examples
Tags: googlecalendar, python
Published: 2019-07-24 14:15:20

Google Calendar offers one of the most convenient and popular ways to manage schedule,
events, meetings, or even plan out your holiday events. A few things you think will
be straightforward end up being complicated for customised need. The Google Calendar
API lets you automate your calendar, for those custom needs.


## 1. How to Create a project in Google Developer Console?

To kick things off lets head [Google Developers Console]
(https://console.developers.google.com/) and create a new project.
We name the project as Automating Calendar, further to it, get the credentials. 

## 2. Set up the Google API Service 


    import pickle
    import os.path
    from googleapiclient.discovery import build
    from google_auth_oauthlib.flow import InstalledAppFlow
    from google.auth.transport.requests import Request

    # If modifying these scopes, delete the file token.pickle.
    SCOPES = ['https://www.googleapis.com/auth/calendar']

    CREDENTIALS_FILE = 'credentials.json'

    def get_calendar_service():
        creds = None
        # The file token.pickle 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.pickle'):
            with open('token.pickle', 'rb') as token:
                creds = pickle.load(token)
        # 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_FILE, SCOPES)
                creds = flow.run_local_server(port=0)
            # Save the credentials for the next run
            with open('token.pickle', 'wb') as token:
                pickle.dump(creds, token)

        service = build('calendar', 'v3', credentials=creds)
        return service


## 2. How to Fetch list of all Calendars from a User Account using Calendar API

Let us create a file with name `list_calendars.py` in the same directory as that of `cal_setup.py` with the snippet below:


    from cal_setup import get_calendar_service

    def main():
       service = get_calendar_service()
       # Call the Calendar API
       print('Getting list of calendars')
      calendars_result = service.calendarList().list().execute()

       calendars = calendars_result.get('items', [])

       if not calendars:
           print('No calendars found.')
       for calendar in calendars:
           summary = calendar['summary']
           id = calendar['id']
           primary = "Primary" if calendar.get('primary') else ""
           print("%s\t%s\t%s" % (summary, id, primary))

    if __name__ == '__main__':
       main()



The above code is calling the Calendar API with the credentials that have already been setup, it will fetch all the calendars.

When the above code is run for the first time, a google auth link will be opened in default browser seeking permission to access the calendar, after the consent is provided a token is saved which can be used for making requests in future to the Google Calendar API.

Once the code has run, in the terminal you will see on the console the names of all the calendars that you have created.

If you want to do more things, we have created an in-depth article with screenshots - [how to automate google calendar with python](https://karenapp.io/articles/2019/07/how-to-automate-google-calendar-with-python-using-the-calendar-api/)

The entire source code can be found [here on our github](https://github.com/karenapp/google-calendar-python-api).