|
|
from dateutil import rrulefrom gcalendar import dateTimeimport datetimeimport pickleimport jsonimport reLOCATION = "5500 St Louis Ave, Chicago, IL 60625"event = { 'summary': 'Google I/O 2015', 'location': '800 Howard St., San Francisco, CA 94103', 'description': 'A chance to hear more about Google\'s developer products.', 'start': { 'dateTime': '2015-05-28T09:00:00-07:00', 'timeZone': 'America/Los_Angeles', }, 'end': { 'dateTime': '2015-05-28T17:00:00-07:00', 'timeZone': 'America/Los_Angeles', }, 'recurrence': [ 'RRULE:FREQ=DAILY;COUNT=2' ], 'attendees': [ {'email': 'lpage@example.com'}, {'email': 'sbrin@example.com'}, ], 'reminders': { 'useDefault': False, 'overrides': [ {'method': 'email', 'minutes': 24 * 60}, {'method': 'popup', 'minutes': 10}, ], },}
def rrule_former(class_obj): days = class_obj.days start =datetime.datetime.combine(class_obj.date_range[0],class_obj.time_range[0]).astimezone() end =datetime.datetime.combine(class_obj.date_range[1],class_obj.time_range[1]).astimezone()
days = [ (day -1) % 7 for day in days] ret = rrule.rrule(freq=rrule.WEEKLY,dtstart=start,wkst=rrule.SU,until=end,byweekday=days) ret_str = str(ret).split('\n')[-1] ret_str=re.sub(r'(UNTIL=[^;]+)',r'\1Z',ret_str) return '{}'.format(ret_str)
def create_body(class_obj,is_lab = False): if not is_lab: lab_body = None if class_obj.lab: lab_body = create_body(class_obj.lab,True)
if class_obj.time_range: body = { # "kind": "calendar#event", } body['recurrence'] = [rrule_former(class_obj)] body['start'] = dateTime(datetime.datetime.combine(class_obj.date_range[0],class_obj.time_range[0])) body['end'] = dateTime(datetime.datetime.combine(class_obj.date_range[0],class_obj.time_range[1])) body['summary'] = class_obj.title body['description'] = 'location: {}'.format(class_obj.location) body['location'] = LOCATION body['reminders'] = {'useDefault':True} if is_lab: return body else: return body,lab_body
def json_dump(obj): with open('classes.json','w') as file: json.dump(obj,file)
def create_event(class_list): for class_obj in class_list: out = create_body(class_obj) if out: body,lab_body = out yield body if lab_body: yield lab_bodyif __name__ == "__main__": from scraper import get_classes with open('schedule.html') as file: classes = get_classes(file.read()) l = list(create_event(classes)) json_dump(l)
|