Created
October 22, 2010 17:03
-
-
Save moshen/640960 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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