From 3a30d02edf1f92efe63481093f06659868d5b724 Mon Sep 17 00:00:00 2001 From: James French Date: Mon, 4 Mar 2013 19:49:42 +0800 Subject: [PATCH 1/1] Add timezone support to the CGI script - new tz parameter, set it to a valid database entry (eg Australia/Melbourne) to assume the calendar is in that timezone if not specified. - Facebook seem to have gotten better with this, but why trust them. --- fbcal.py | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/fbcal.py b/fbcal.py index 6e6c9f7..d18a515 100755 --- a/fbcal.py +++ b/fbcal.py @@ -25,7 +25,7 @@ import cgi import vobject import icalparse import re -#import cgitb; cgitb.enable() +import cgitb; cgitb.enable() def exitQuiet(exitstate=0): print('Content-Type: text/html\n') @@ -46,13 +46,28 @@ if __name__ == '__main__': key = form['key'].value re.search('[&?]+', key) and exitQuiet() len(key) == 16 or exitQuiet() - + + # Historically facebook has been notoriously bad at setting timzeones + # in their stuff so this should be a user setting. If it is set in + # their calendar it'll be used otherwise if the user feeds crap or + # nothing just assume they want Australia/Perth + tz = "" + if "tz" in form: + from pytz import timezone + try: + timezone(form['tz'].value) + tz = form['tz'].value + except: pass + + ruleConfig = {} + ruleConfig["defaultTZ"] = tz or "Australia/Perth" + # Okay, we're happy that the input is sane, lets serve up some data url = 'http://www.facebook.com/ical/u.php?uid=%d&key=%s'%(uid,key) (content, encoding) = icalparse.getHTTPContent(url) cal = vobject.readOne(unicode(content, encoding)) - cal = icalparse.applyRules(cal, icalparse.generateRules(), False) + cal = icalparse.applyRules(cal, icalparse.generateRules(ruleConfig), False) - print('Content-Type: text/calendar; charset=%s\n'%encoding) + print('Content-Type: text/html; charset=%s\n'%encoding) icalparse.writeOutput(cal) -- 2.20.1