Python 3.x python中重复发生事件的解析
我对python和icalendar非常陌生,但我正试图从苹果的Icloud网站上获取icalendar,然后能够访问日历信息,以便在应用程序上显示它。我可以从日历中获取任何不再发生的事件,但它只获取那些事件,并且出于某种原因跳过了再次发生的事件(这基本上是我现在安排的唯一类型的事件),这是我目前拥有的代码,关于如何获取再次发生的事件有什么想法吗Python 3.x python中重复发生事件的解析,python-3.x,icalendar,Python 3.x,Icalendar,我对python和icalendar非常陌生,但我正试图从苹果的Icloud网站上获取icalendar,然后能够访问日历信息,以便在应用程序上显示它。我可以从日历中获取任何不再发生的事件,但它只获取那些事件,并且出于某种原因跳过了再次发生的事件(这基本上是我现在安排的唯一类型的事件),这是我目前拥有的代码,关于如何获取再次发生的事件有什么想法吗 from icalendar import Calendar, Event import urllib.request def getCalenda
from icalendar import Calendar, Event
import urllib.request
def getCalendar():
urlHome = urllib.request.urlopen('https://p10-calendarws.icloud.com/ca/subscribe/1/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX').read()
return urlHome
def displayCalendar(calendar):
showCalHome = Calendar.from_ical(calHome)
for event in showCalHome.walk('VEVENT'):
date = event.get('dtstart').dt
summary = event.get('summary')
print(summary,date)
calendar = getCalendar()
displayCalendar(calendar)
关于我能做些什么,不仅能得到单个事件的列表,还能得到重复事件的列表,有什么想法或想法吗?通过分析ICS文件本身,将大量值转换为字符串,然后将字符串与我要查找的内容进行比较,找到了答案,如下所示:
from icalendar import Calendar, Event
import urllib.request
def getCalendar():
urlHome = urllib.request.urlopen('https://p10-calendarws.icloud.com/ca/subscribe/1/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX').read()
return urlHome
def displayCalendar(calendar):
showCalHome = Calendar.from_ical(calHome)
for event in showCalHome.walk('VEVENT'):
date = event.get('dtstart').dt
summary = event.get('summary')
print(summary,date)
calendar = getCalendar()
displayCalendar(calendar)
import json
import requests
from icalendar import Calendar, Event
import urllib.request
from datetime import *
import datetime
from dateutil.rrule import *
def getCalendar():
urlWork = urllib.request.urlopen('https://p10-calendarws.icloud.com/ca/subscribe/1/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX').read()
urlHome = urllib.request.urlopen('https://p10-calendarws.icloud.com/ca/subscribe/1/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX').read()
calendars = [urlHome, urlWork]
return calendars
def getTodaysEvents(calendars):
calHome = calendars[0]
calWork = calendars[1]
allEvents = []
singleEvents = {}
homeEvents = {}
workEvents = {}
today = str(date.today())
year = today[0:4]
month = today[5:7]
day = today[8:10]
currentDay = year + month + day
showCalHome = Calendar.from_ical(calHome)
for component in showCalHome.walk():
if component.name == "VEVENT":
rule = component.get('rrule')
eventDay = str(component.get('dtstart').dt)
if rule is not None:
rrule = dict(rule)
if 'UNTIL' in rrule.keys():
eventEnd = str(rrule['UNTIL'][0])
eventEndYear = eventEnd[0:4]
eventEndMonth = eventEnd[5:7]
eventEndDay = eventEnd[8:10]
endEvent = eventEndYear + eventEndMonth + eventEndDay
if int(endEvent) >= int(currentDay):
print(component.get('summary'))
homeEvents['CALENDAR'] = "HOME"
homeEvents['SUMMARY'] = (component.get('summary'))
homeEvents['LOCATION'] = (component.get('location'))
homeEvents['START'] = (component.get('dtstart').dt)
homeEvents['END'] = (component.get('dtend').dt)
allEvents.append(homeEvents)
# else: (NEED TO IMPLEMENT WEEKLY EVENTS THAT DON'T END and Events that aren't Reoccuring)
# print(component.get('summary'))
# if component.get('location') != 'None':
# print(component.get('location'))
# print(component.get('dtstart').dt)
# print(component.get('dtend').dt)
else:
if str(date.today()) == eventDay[0:10]:
print(component.get('summary'))
singleEvents['CALENDAR'] = "HOME"
singleEvents['SUMMARY'] = (component.get('summary'))
singleEvents['LOCATION'] = (component.get('location'))
singleEvents['START'] = (component.get('dtstart').dt)
singleEvents['END'] = (component.get('dtend').dt)
allEvents.append(singleEvents)
print(allEvents)
showCalWork = Calendar.from_ical(calWork)
for component in showCalWork.walk():
if component.name == "VEVENT":
rule = component.get('rrule')
if rule is not None:
rrule = dict(rule)
today = str(date.today())
year = today[0:4]
month = today[5:7]
day = today[8:10]
currentDay = year + month + day
if 'UNTIL' in rrule.keys():
eventEnd = str(rrule['UNTIL'][0])
eventEndYear = eventEnd[0:4]
eventEndMonth = eventEnd[5:7]
eventEndDay = eventEnd[8:10]
endEvent = eventEndYear + eventEndMonth + eventEndDay
if int(endEvent) >= int(currentDay):
workEvents['CALENDAR'] = "WORK"
workEvents['SUMMARY'] = (component.get('summary'))
workEvents['LOCATION'] = (component.get('location'))
workEvents['START'] = (component.get('dtstart').dt)
workEvents['END'] = (component.get('dtend').dt)
allEvents.append(workEvents)
# else:
# print(component.get('summary'))
# if component.get('location') != 'None':
# print(component.get('location'))
# print(component.get('dtstart').dt)
# print(component.get('dtend').dt)
return allEvents
def displayEvents(events):
print(events)
print()
print("TODAY:")
for event in range(len(events)):
start = str(events[event]['START'])[11:16]
end = str(events[event]["END"])[11:16]
if int(start[0:2]) < 12:
sT = "AM"
else:
pmtime = int(start[0:2]) - 12
start[0:2].replace(start[0:2], str(pmtime))
sT = "PM"
if int(end[0:2]) < 12:
eT = "AM"
else:
pmtime = int(end[0:2]) - 12
end = str(pmtime) + end[2:5]
eT = "PM"
print(events[event]['SUMMARY'] + " - " + events[event]["CALENDAR"])
if str(events[event]['LOCATION']) != "None":
print(events[event]['LOCATION'])
if start[0] == "0" and end[0] == "0":
print(start[1:5] + sT + " - " + end[1:5] + eT)
elif start[0] == "0":
print(start[1:5] + sT + " - " + end + eT)
elif end[0] == "0":
print(start + sT + " - " + end[1:5] + eT)
else:
print(start + sT + " - " + end + eT)
calendars = getCalendar()
events = getTodaysEvents(calendars)
displayEvents(events)
events = recurring_ical_events.of(calendar).between(start_date, end_date)
for event in events:
# ...
导入json
导入请求
从icalendar导入日历,事件
导入urllib.request
从日期时间导入*
导入日期时间
从dateutil.rrule导入*
def getCalendar():
urlWork=urllib.request.urlopen('https://p10-calendarws.icloud.com/ca/subscribe/1/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX)。读()
urlHome=urllib.request.urlopen('https://p10-calendarws.icloud.com/ca/subscribe/1/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX)。读()
日历=[urlHome,urlWork]
返回日历
def getTodaysEvents(日历):
calHome=日历[0]
calWork=日历[1]
allEvents=[]
singleEvents={}
homeEvents={}
workEvents={}
today=str(date.today())
年=今天[0:4]
月=今天[5:7]
day=今天[8:10]
当前日期=年+月+日
showCalHome=日历。从日历(calHome)
对于showCalHome.walk()中的组件:
如果component.name==“VEVENT”:
rule=component.get('rrule')
eventDay=str(component.get('dtstart').dt)
如果规则不是无:
规则
如果rrule.keys()中的“直到”:
eventEnd=str(rrule['UNTIL'][0])
eventEndYear=eventEnd[0:4]
eventEndMonth=eventEnd[5:7]
eventEndDay=eventEnd[8:10]
endEvent=eventEndYear+eventEndMonth+eventEndDay
如果int(endEvent)>=int(currentDay):
打印(component.get('summary'))
homeEvents['CALENDAR']=“主页”
homeEvents['SUMMARY']=(component.get('SUMMARY'))
homeEvents['LOCATION']=(component.get('LOCATION'))
homeEvents['START']=(component.get('dtstart').dt)
homeEvents['END']=(component.get('dtend').dt)
allEvents.append(homeEvents)
#其他:(需要实施每周不结束的事件和不会再次发生的事件)
#打印(component.get('summary'))
#if component.get('location')!='“没有”:
#打印(component.get('location'))
#打印(component.get('dtstart').dt)
#打印(component.get('dtend').dt)
其他:
如果str(date.today())==eventDay[0:10]:
打印(component.get('summary'))
singleEvents['CALENDAR']=“主页”
singleEvents['SUMMARY']=(component.get('SUMMARY'))
singleEvents['LOCATION']=(component.get('LOCATION'))
singleEvents['START']=(component.get('dtstart').dt)
singleEvents['END']=(component.get('dtend').dt)
allEvents.append(singleEvents)
打印(所有事件)
showCalWork=日历。从日历(calWork)
对于showCalWork.walk()中的组件:
如果component.name==“VEVENT”:
rule=component.get('rrule')
如果规则不是无:
规则
today=str(date.today())
年=今天[0:4]
月=今天[5:7]
day=今天[8:10]
当前日期=年+月+日
如果rrule.keys()中的“直到”:
eventEnd=str(rrule['UNTIL'][0])
eventEndYear=eventEnd[0:4]
eventEndMonth=eventEnd[5:7]
eventEndDay=eventEnd[8:10]
endEvent=eventEndYear+eventEndMonth+eventEndDay
如果int(endEvent)>=int(currentDay):
workEvents['CALENDAR']=“工作”
workEvents['SUMMARY']=(component.get('SUMMARY'))
workEvents['LOCATION']=(component.get('LOCATION'))
workEvents['START']=(component.get('dtstart').dt)
workEvents['END']=(component.get('dtend').dt)
allEvents.append(工作事件)
#其他:
#打印(component.get('summary'))
#if component.get('location')!='“没有”:
#打印(component.get('location'))
#打印(component.get('dtstart').dt)
#打印(component.get('dtend').dt)
回程通道
def displayEvents(事件):
打印(事件)
打印()
打印(“今天:”)
对于范围内的事件(len(events)):
start=str(事件[事件]['start'])[11:16]
end=str(事件[事件][“结束])[11:16]
如果int(开始[0:2])<12:
sT=“AM”
其他:
pmtime=int(开始[0:2])-12
开始[0:2]。替换(开始[0:2],str(pmtime))
sT=“PM”
如果int(结束[0:2])<12:
eT=“AM”
其他:
pmtime=int(结束[0:2])-12
end=str(pmtime)+end[2:5]
eT=“PM”
打印(事件[事件]['SUMMARY']+“-”+事件[事件][“日历”])
如果str(事件[事件]['