Skip to content

Instantly share code, notes, and snippets.

@moshen
Created October 22, 2010 17:03
Show Gist options
  • Save moshen/640960 to your computer and use it in GitHub Desktop.
Save moshen/640960 to your computer and use it in GitHub Desktop.
#!/usr/bin/python
# This monstrosity was created to sync events from my Work calendar to my main calendar using the google data apis
try:
from xml.etree import ElementTree
except ImportError:
from elementtree import ElementTree
import gdata.calendar.service
import gdata.service
import atom.service
import gdata.calendar
import atom
import getopt
import sys
import string
import time
import re
from datetime import date , timedelta
defaultCalendar = 'default'
workCalendar = 'alongstringhere@group.calendar.google.com'
cal_client = gdata.calendar.service.CalendarService()
cal_client.email = "youremail@gmail.com"
cal_client.password = "pass" # Probably a bad idea
cal_client.source = 'Google-Calendar_Python-1.0'
cal_client.ProgrammaticLogin()
def DateRangeQuery(calendar_service, calendar, start_date, end_date):
query = gdata.calendar.service.CalendarEventQuery(calendar , 'private', 'full')
query.start_min = start_date
query.start_max = end_date
feed = calendar_service.CalendarQuery(query)
return feed
def InsertSingleWorkEvents(calendar_service, workEvent):
for a_when in workEvent.when:
event = gdata.calendar.CalendarEventEntry()
event.title = atom.Title(text="[Work] %s" % workEvent.title.text) #atom.Title(text=title)
event.content = workEvent.content #atom.Content(text=content)
start_time = a_when.start_time
end_time = a_when.end_time
event.when.append(gdata.calendar.When(start_time=start_time, end_time=end_time))
new_event = calendar_service.InsertEvent(event, '/calendar/feeds/default/private/full')
startDate = (date.today() - timedelta(days=7)).isoformat()
endDate = (date.today() + timedelta(days=14)).isoformat()
defaultCalFeed = DateRangeQuery(cal_client, defaultCalendar , startDate, endDate)
# Remove old work events from the default calendar
for i, an_event in enumerate(defaultCalFeed.entry):
if re.match('^\[Work\]\s{1}', an_event.title.text):
print 'Removing event: %s' % (an_event.title.text,)
cal_client.DeleteEvent(an_event.GetEditLink().href)
workCalFeed = DateRangeQuery(cal_client, workCalendar , startDate, endDate)
# Add work events from my Work calendar (but preface the titles with [Work] so they can be identified)
for i, an_event in enumerate(workCalFeed.entry):
print 'Adding Events: %s' % (an_event.title.text,)
InsertSingleWorkEvents(cal_client, an_event)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment