[Remind-Fans] Sync Remind and Google Calendar
Ed Blackman
ed at edgewood.to
Thu Sep 24 09:28:28 EDT 2009
On Thu, Sep 24, 2009 at 12:29:38AM -0700, Oliver Zheng wrote:
>I have a server. But this is still a one way sync, isn't it? How can I
>add an event on my Android phone (which adds it to Google Calendar)
>and have it show up in Remind?
I use the attached script to download several Google calendar ics files
and convert them into reminder files, that I then INCLUDE into my
~/.reminders. The script is called from cron hourly.
It's a Python script, and requires wget in the PATH, and ical2rem in the
PATH or $HOME/bin.
Most of my calendars are private, so I've removed them from the list,
but I did leave the public US Holidays calendar, so the script should
work out of the box. Just drop your ICS URLs in the urls list.
The script also does some processing of the incoming ICS file during the
download, so that various things that I don't want in the reminder file
don't show up. There are two: I strip "[wordsinbrackets] " prefixes
from the ICS SUMMARY line (the name of the appointment), since I get
some appointments from mailing lists that include the mailing list name,
but I don't want that in my Remind calendar. I also truncate the
LOCATION at the first newline, since that's sufficient to remind me
without including a lot of detail that I don't want.
If you can write Python, you may be able to modify it more to your
taste.
Hope this helps!
Ed
-------------- next part --------------
#!/usr/bin/python
import os
import re
import sys
from subprocess import *
urls = [
'http://www.google.com/calendar/ical/usa__en%40holiday.calendar.google.com/public/basic.ics',
]
home = os.environ['HOME']
calFile = home + '/.remind/calendar'
tmpFile = calFile + '.tmp'
bakFile = calFile + '.bak'
icsFile = calFile + '.ics'
out = open(tmpFile, 'w')
ics = open(icsFile, 'w')
# get all URLs to stdout
p_wget = Popen('wget -q -O -'.split(' ') + urls, stdout=PIPE)
# pipe to ical2rem
p_ical2rem = Popen(['ical2rem'], stdin=PIPE, stdout=out,
env={'TZ' : 'US/Eastern', 'PATH' : home + '/bin'})
inputRemains = True
icsline = ''
# make automated changes to calendars while downloading them
while inputRemains:
line = p_wget.stdout.readline()
if ics:
ics.write(line)
if line == '' and p_wget.poll() != None:
inputRemains = False
line = ''
# remove "[mailinglist] " sections from summary lines
m = re.match(r'^(SUMMARY:)\[[\w-]*\] (.*$)', line)
if m:
line = m.group(1) + m.group(2) + "\n"
# remove '\\n' and trailing string from LOCATION fields
if re.match(r'^\s', line):
icsline = icsline + line
continue
else:
if icsline:
m = re.match(r'(.*LOCATION:[^\\]*)\\n.*', icsline)
if m:
icsline = m.group(1) + "\n"
p_ical2rem.stdin.write(icsline)
icsline = line
p_ical2rem.stdin.close()
p_ical2rem.wait()
if(os.path.exists(tmpFile) and os.stat(tmpFile).st_size > 0):
if(os.path.exists(calFile)):
os.rename(calFile, bakFile)
os.rename(tmpFile, calFile)
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
URL: <http://lists.roaringpenguin.com/pipermail/remind-fans/attachments/20090924/1078b211/attachment.pgp>
More information about the Remind-fans
mailing list