#!/usr/bin/env python # parsecal """This script parses an *.ics file from google calendar and returns the date and textwrapped 'DESCRIPTION' from each event whose 'SUMMARY' contains the string passed in as sys.argv[2] """ from icalendar import Calendar, Event #from datetime import datetime import sys, textwrap, time, calendar if len(sys.argv) < 3: print """ usage: parsecal file.ics 'summary' 'summary' may be any substring of an events SUMMARY field. All DECRIPTION fields of events containing that substring will be printed, prefaced by date, and starting with the latest. """ sys.exit(1) ical = sys.argv[1] client = sys.argv[2] cal = Calendar.from_string(open(ical,'rb').read()) events = {} for event in cal.walk(): if event.name == 'VEVENT' and \ event.has_key('SUMMARY') and client in event['SUMMARY'] and \ event.has_key('DESCRIPTION') and len(event['DESCRIPTION']) > 0: dt = event.decoded('dtstart') # google 'broke' DTSTART to accomodate Outlook: we need local time dt = time.localtime(calendar.timegm(dt.utctimetuple())) print time.mktime(dt) events[dt] = event.decoded('description') # google uses last modified not dtstart date to order, so we need to sort for key in sorted(events.iterkeys()): print time.asctime(key) for i in textwrap.wrap(events[key], 80): print i print ''