Advertisement
Guest User

Carleton Course Import

a guest
Sep 15th, 2014
292
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.18 KB | None | 0 0
  1. from urllib import urlencode
  2. from urllib2 import urlopen, Request
  3. import json
  4. import gdata.calendar.client
  5. import gdata.calendar.data
  6. import atom.data
  7. import datetime
  8. import getpass
  9.  
  10. print "Enter carleton user name: ",
  11. username = raw_input()
  12. print "Enter carleton password: ",
  13. password = getpass.getpass()
  14. print "Enter gmail user name: ",
  15. gmailuser = raw_input()
  16. print "Enter gmail password: ",
  17. gmailpass = getpass.getpass()
  18. term = "201430"
  19. calname = "Class Schedule 2"
  20.  
  21. login = urlencode( [("userid", username), ("userpwd", password)] )
  22. cookie = urlopen("https://mobileapps.carleton.ca:8443/iPhone/login.jsp").headers.getheader("Set-Cookie")
  23. sess = cookie[cookie.index("=")+1:cookie.index(";")]
  24. headers = {"Cookie":"JSESSIONID=" + sess}
  25. r = urlopen(Request("https://mobileapps.carleton.ca:8443/iPhone/login.jsp", headers=headers), login)
  26. s = r.read()
  27. #print s
  28. key = s[s.index('value="', s.index('id="key"'))+len('value="'):s.index(">", s.index('id="key"'))-1]
  29. r2 = urlopen(Request("https://mobileapps.carleton.ca:8443/iPhone/protected/getClassesTerm?userid=" + username + "&key=" + key + "&term=" + term, headers=headers), login)
  30. terms = json.loads(r2.read())
  31. courses = terms["terms"][0]["courses"]
  32.  
  33. cal_cli = gdata.calendar.client.CalendarClient()
  34. cal_cli.ClientLogin(gmailuser, gmailpass, cal_cli.source)
  35. feed = cal_cli.GetOwnCalendarsFeed()
  36. calend = None
  37. for cal in feed.entry:
  38.         if cal.title.text == calname:
  39.                print "Found calendar..."
  40.                calend = cal
  41.                break
  42. if calend == None:
  43.         print "Invalid calendar"
  44.         exit()
  45.        
  46. print "Updating Google Calendar..."
  47. for course in courses:
  48.         #print course
  49.         print "Adding calendar item:"
  50.         print "Title: " + course["courseTitle"]
  51.         print "Description: " + course["courseDescription"]
  52.         print "Days: " + course["dayOfWeek"]
  53.         print "Starts: " + course["startDate"]
  54.         print "Ends: " + course["endDate"]
  55.         if course["startTime"] == "TBD":
  56.             print "Time is TBD, not adding to calendar."
  57.             continue
  58.  
  59.         startTime = datetime.datetime.strptime(course["startTime"], "%I:%M %p")
  60.         endTime = datetime.datetime.strptime(course["endTime"], "%I:%M %p")
  61.         startDate = datetime.datetime.strptime(course["startDate"], "%Y-%m-%d %H:%M:%S.%f")
  62.         finalDate = datetime.datetime.strptime(course["endDate"], "%Y-%m-%d %H:%M:%S.%f")
  63.         finalDate += datetime.timedelta(days=1)
  64.         cur = startDate.weekday()
  65.         target = []
  66.         day = -1
  67.         recurranceDays = ""
  68.         for d in course["dayOfWeek"]:
  69.                 if d == 'M':
  70.                         day = 0
  71.                         recurranceDays += "MO,"
  72.                 if d == 'T':
  73.                         day = 1
  74.                         recurranceDays += "TU,"
  75.                 if d == 'W':
  76.                         day = 2
  77.                         recurranceDays += "WE,"
  78.                 if d == 'R':
  79.                         day = 3
  80.                         recurranceDays += "TH,"
  81.                 if d == 'F':
  82.                         day = 4
  83.                         recurranceDays += "FR,"
  84.                 target.append((7 - cur + day) % 7)
  85.                
  86.  
  87.         if recurranceDays != "":
  88.                 recurranceDays = recurranceDays[:-1]
  89.                
  90.         tdiff = datetime.timedelta(days=min(target))
  91.         startDate = datetime.datetime.combine(startDate.date(), startTime.timetz()) + tdiff
  92.         endDate = datetime.datetime.combine(startDate.date(), endTime.timetz())
  93.         print "First occurance: " + startDate.isoformat().replace("-", "").replace(":", "")
  94.         print "Until: " + endDate.isoformat().replace("-", "").replace(":", "")
  95.        
  96.         print "Time: " + course["startTime"] + " until " + course["endTime"]
  97.         print "Location ID: " + course["locationId"]
  98.         print "Location: " + course["location"]
  99.         evt = gdata.calendar.data.CalendarEventEntry()
  100.         evt.title = atom.data.Title(text=(course["courseTitle"] + course["courseSection"]))
  101.         evt.content = atom.data.Content(text=course["courseDescription"])
  102.         evt.where.append(gdata.calendar.data.CalendarWhere(value=course["location"]))
  103.         interval = "1"
  104.         if course["courseSection"][-1] == "O" or course["courseSection"][-1] == "E":
  105.             interval = "2"
  106.  
  107.         recur = ('DTSTART;TZID=America/Toronto:%s\r\n' +
  108.                                                'DTEND;TZID=America/Toronto:%s\r\n' +
  109.                                                'RRULE:FREQ=WEEKLY;INTERVAL=%s;BYDAY=%s;UNTIL=%s\r\n') % (
  110.                                                 startDate.isoformat().replace("-", "").replace(":", ""),
  111.                                                 endDate.isoformat().replace("-", "").replace(":", ""),
  112.                                                 interval,
  113.                                                 recurranceDays,
  114.                                                 finalDate.date().isoformat().replace("-", ""))
  115.         print "Recurrance data: " + recur
  116.         evt.recurrence = gdata.data.Recurrence(text=recur)
  117.  
  118.         cal_cli.InsertEvent(evt, calend.FindAlternateLink())
  119. print "Done!"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement