1 importdatetime,os2
3 classEvent:4 """
5 事件对象6 """
7 def __init__(self,kwargs):8 self.event_data =kwargs9
10 def __turn_to_string__(self):11 self.event_text = "BEGIN:VEVENT\n"
12 for item,data inself.event_data.items():13 item = str(item).replace("_","-")14 if item not in ["ORGANIZER","DTSTART","DTEND"]:15 self.event_text += "%s:%s\n"%(item,data)16 else:17 self.event_text += "%s;%s\n"%(item,data)18 self.event_text += "END:VEVENT\n"
19 returnself.event_text20
21 classCalendar:22 """
23 日历对象24 """
25 def __init__(self,calendar_name="My Calendar"):26 self.__events__ ={}27 self.__event_id__ =028 self.calendar_name =calendar_name29
30 def add_event(self,**kwargs):31 event =Event(kwargs)32 event_id = self.__event_id__
33 self.__events__[self.__event_id__] =event34 self.__event_id__ += 1
35 returnevent_id36
37 def modify_event(self,event_id,**kwargs):38 for item,data inkwargs.items():39 self.__events__[event_id].event_data[item] =data40
41 defremove_event(self,event_id):42 self.__events__.pop(event_id)43
44 defget_ics_text(self):45 self.__calendar_text__ = """BEGIN:VCALENDAR\nPRODID:-//ZHONG_BAI_REN//APPGENIX-SOFTWARE//\nVERSION:2.0\nCALSCALE:GREGORIAN\nMETHOD:PUBLISH\nX-WR-CALNAME:%s\nX-WR-TIMEZONE:null\n"""%self.calendar_name46 for key,value in self.__events__.items():47 self.__calendar_text__ += value.__turn_to_string__()48 self.__calendar_text__ += "END:VCALENDAR"
49 return self.__calendar_text__
50
51 defsave_as_ics_file(self):52 ics_text =self.get_ics_text()53 open("%s.ics"%self.calendar_name,"w",encoding="utf8").write(ics_text)#使用utf8编码生成ics文件,否则日历软件打开是乱码54
55 defopen_ics_file(self):56 os.system("%s.ics"%self.calendar_name)57
58 defadd_event(cal, SUMMARY, DTSTART, DTEND, DESCRIPTION, LOCATION):59 """
60 向Calendar日历对象添加事件的方法61 :param cal: calender日历实例62 :param SUMMARY: 事件名63 :param DTSTART: 事件开始时间64 :param DTEND: 时间结束时间65 :param DESCRIPTION: 备注66 :param LOCATION: 时间地点67 :return:68 """
69 time_format = "TZID=Asia/Shanghai:{date.year}{date.month:0>2d}{date.day:0>2d}T{date.hour:0>2d}{date.minute:0>2d}00"
70 dt_start = time_format.format(date=DTSTART)71 dt_end = time_format.format(date=DTEND)72 create_time = datetime.datetime.today().strftime("%Y%m%dT%H%M%SZ")73 cal.add_event(74 SUMMARY=SUMMARY,75 ORGANIZER="CN=My Calendar:mailto:nobody@gmail.com",76 DTSTART=dt_start,77 DTEND=dt_end,78 DTSTAMP=create_time,79 UID="{}-11@appgenix-software.com".format(create_time),80 SEQUENCE="0",81 CREATED=create_time,82 DESCRIPTION=DESCRIPTION,83 LAST_MODIFIED=create_time,84 LOCATION=LOCATION,85 STATUS="CONFIRMED",86 TRANSP="OPAQUE"
87 )88
89 if __name__ == '__main__':90 calendar = Calendar(calendar_name="test")91 add_event(calendar,92 SUMMARY="测试",93 DTSTART=datetime.datetime(year=2019,month=2,day=19,hour=21,minute=21,second=00),94 DTEND=datetime.datetime(year=2019,month=2,day=19,hour=21,minute=30,second=00),95 DESCRIPTION="测试事件",96 LOCATION="我也不知道在哪儿")97 print(calendar.get_ics_text())98 calendar.save_as_ics_file()