Python is great at processing structured data. There are all sorts of libraries that you can use to parse JSON, CSV, XML, etc. There are libraries to parse calendar (.ics) files as well.
A few days ago, I needed to pull a CSV report of all of my calendar events from the day before. This task might need to be done more than once. My scripting radar immediately picked up a ping and I saw a perfect target for a Python script.
Sure, I could copy and paste the list from the Agenda view in Google Calendar itself. That could be ok if I only needed to do this once. However, I might do this again and a script gives me way more flexibility and frees me up to do other things.
What is the Task?
Task: Pull a complete list of all calendar events from Google Calendar and save it in a CSV file. The output CVS file must have the following columns.
title | start_date | end_date | duration |
---|---|---|---|
Lunch | 2017-09-21 09:00:00-06:00 | 2017-09-21 09:55:00-06:00 | 55 |
Solution to pulling Google Calendar Events to CSV
Pre-requisites
- Python 2.7, preferably Python 3.4 or higher see my take on Python versions
- a good text editor or Python IDE [1]
- A Google account
- Operating systems:
- Linux
- Mac OS X
- Windows
- Python 2.7, or 3.4 or higher
Summary
I searched around for a while for a good Python Google Calendar module. I did find several that showed some potential but most seemed a bit dated. I ended up on Google's own developer page [2]. On this page I found a Python example doing much of the process I was looking for. I thought to myself:
"Self, there is no reason to recreate something good. Let's take what is good here and modify it to fit our needs."
-- Me
So that's what I did.
I modified the code I found on that page to export a CSV[3] file with the values I need. You may also noticed that I adjusted it to nicely pull in more than the 10 events the sample script did. You'll see this later.
I am mostly satisfied with the end result. It does what it needs to much faster and arguably better than I could manually--and that's the point.
Much of the instruction on this page comes straight from the Google article.
Ready, Go!
Step 1 - Setup Environment
The first thing to do is install the Google Calendar Python client library.
Before doing that, however, you need to setup a virtual environment. I always recommend using a virtualenvironment when installing Python libraries, especially when you're not sure what it does :) .
If you haven't setup a virtual environment to work on, please do so now. Visit virtualenvironment if you aren't sure how to do this. Go ahead and do this now.
I'll wait...
Make sure you are in your virtualenvironment before doing the next steps.
In a terminal window, enter the following command:
$ pip install --upgrade google-api-python-client dateutil
You should not be prompted for your password to install the package. If you are, then you either didn't setup the virtual environment or you are not working in it. Go back to that page and make sure it is setup correctly.
Step 2 - Turn on the Google Calendar API
Follow the "Turn on the Google Calendar API" steps at https://developers.google.com/google-apps/calendar/quickstart/python.
Step 4 - Create the Python file pull_from_gcal.py
Create the Python file to run this script. You may want to create a new project if you are using PyCharm.
Step 5 - Save the code
Here you can copy/paste the finished code if you want to jump straight to running it. However, you may benefit from a line-by-line (mostly) walk-through to make sure you know what it is doing.
Step 6 - Run the script
Run the by right-clicking on the file in PyCharm and select Run 'pull_from_gcal.py'
.
If all goes well, the script will open a browser window where you will be prompted to approve the application. Go ahead and do this. The script will gather the necessary credentials and save them to a local file for future use.
You browser should show a screen like the following if it worked.
And the CSV with yesterday's events will be created as well.
Wrap-up, Conclusion, Follow-up
Well, there you go. You now have a script that will save you time if you ever need to do this. Thank you for taking the time to read through and possibly testing this script.
Here are some potential enhancements to the script you may want to consider making.
- Pull events from all of your calendars
- Add field with list of attendees
- Add field indicating if the event is a recurring event
- Add field indicating if you created the event or if you were invited
I am working on an ebook with lots of scripting recipes. I plan to include this one with some of these changes. Stay tuned to learn more. I encourage you to subscribe using the form below.
-
I Love Pycharm for learning Python. You may see me using vim a lot because I have so much muscle memory with it. PyCharm is so much better for testing and editing code with greate syntax highlighting and code hints. ↩︎
-
https://developers.google.com/google-apps/calendar/quickstart/python ↩︎
-
find more articles on manipulating CSV files at ↩︎
Top comments (5)
This is neat !! How do I take this script/app to cloud(Heroku) and pull data from the calendar and save it in CSV file whenever I add a new event in google calendar ?
That, my friend, would be an interesting project. I may consider writing an article around it someday. It would too long to describe the whole thing in this comment but these steps might get you started.
Awesome this answer was expected !! However, That is my first step to build personal assistant chatbot, As a beginner python/flask developer, I love to hear from you more on this.
Flask would be a great platform for a basic web app illustrating how to do this. I may put a small project together to illustrate how to do this Calendar polling in a webapp and post an article on it.
Awesome eagerly waiting for that.