Backup my google calendars via shell and python scripts and scheduling them via cron

Internet
Author

Vinh Nguyen

Published

June 24, 2009

So recently my calendar got messed up a little (dupes) due my mobile phone (HTC Touch Pro running Windows Mobile 6.1) resetting [syncing again messed it up]. I realize (now???) I need to keep backups of my calendars and contacts.

I took the following script online (which requires python and the gdata module):

#! /usr/bin/python

## This script backs up my google contacts
## http://www.joet3ch.com/2008/09/25/backup-google-contacts/

import gdata.contacts.service
gd_client = gdata.contacts.service.ContactsService()
gd_client.ClientLogin('uname@domain.com', 'password')
query = gdata.contacts.service.ContactsQuery()
query.max_results = 2000 # change for max contacts returned
feed = gd_client.GetContactsFeed(query.ToUri())
print feed

and adapted the following script to backup my calendars and contacts:

#! /bin/bash

## This script backs up my calendars -- will use with Cron to backup daily.
## following is adapted from http://permanentinkdesign.com/articles/backing-up-a-google-calendar/
INCREMENT=`date +%Y%m%d%H%M`
DIR="$HOME/Documents/Backup_Google"
USERNAME="uname@domain.com"
PASSWORD="mypassword"
## Vinh's calendar
curl -s url-to-private-ics -o "$DIR/Vinh_$INCREMENT.ics"
## TNTTSP's calendar'
curl -s url-to-private-ics -o "$DIR/TNTTSP_$INCREMENT.ics"
## Birthdays
curl -s url-to-private-ics -o "$DIR/Birthdays_$INCREMENT.ics"

## Now backup Google Contacts
## http://www.joet3ch.com/2008/09/25/backup-google-contacts/
$HOME/Documents/bin/Backup_Google_Contacts.py > ${DIR}/VinhContacts_$INCREMENT.xml

## Now backup Google Reader subscriptions
## http://www.clausconrad.com/blog/backup-google-reader-subscription-list-to-opml-automatically
$HOME/Documents/bin/gr-opml-backup.py $USERNAME $PASSWORD > Vinh_GoogleReaderSubs_$INCREMENT.opml

find $DIR -mtime +14 -exec rm -f {} \;

Every time the script runs, it backs up my 3 calendars and contacts. The very last line says delete if files are 14 days or older.

Now, to set up my crontab to run this everyday at 10pm, I type "crontab -e" in the shell. I put

00 22 * * * $HOME/Documents/bin/Backup_Google.sh

when vi (or your default visual editor) opens up.

More info about cron on the Mac is here.

Sometimes, you might not want to schedule a recurring script. To run a script once, we can rely on the at ("at") command. More information here and here. However, the at command didn't work on my Macbook when I tried it a while back.

UPDATE: The script above (Backup_Google.sh) is updated to include the google reader subscription, thanks to this site.