我要在google callendar中设置目标,我想用google-callendar-api检查目标是否完成。
因此,请遵循Google API快速入门说明here。返回的事件属性似乎都没有指向它们是否已完成的事实。
凭据后我的代码如下:
service = build('calendar', 'v3', credentials=creds)
events_result = service.events().list(calendarId='primary', timeMin=now,
maxResults=10, singleEvents=True,
orderBy='startTime').execute()
events = events_result.get('items', [])
结果是一个包含带有以下键的字典的列表:
{'kind',
'etag',
'id',
'status',
'htmlLink',
'created',
'updated',
'summary',
'description',
'creator,
'organizer',
'start': {'dateTime','timeZone'},
'end': {'dateTime','timeZone'},
'iCalUID',
'sequence',
'attendees': [{'email','self','responseStatus'}],
'privateCopy': True,
'reminders': {'useDefault'}}
似乎没有一个键可以回答事件是否完成的问题。同一目标的已完成/未完成eTag具有不同的eTag,但是不同目标也具有不同的eTag。
答案 0 :(得分:0)
正如您所说,没有属性指示事件是否完成。一种检查方法是获取“ end”属性,并在其中获取datetime属性,然后将该值与当前时间进行比较:
还应注意,如果脚本运行的时区与事件时区不同,则会有差异。为避免这种情况,您可以使用事件产生的字符串结束日期中给出的日期和偏移量(采用ISO 8601标准格式[1],即:“ 2015-05-29T02:00:00 + 02: 00”)以获取UTC时间并将其与当前UTC时间进行比较。了解如何在Python [2]中使用日期和时区。
以下是您调整并成功测试的代码:
import datetime
service = build('calendar', 'v3', credentials=creds)
events_result = service.events().list(calendarId='primary',
maxResults=10, singleEvents=True,
orderBy='startTime').execute()
events = events_result.get('items', [])
for event in events:
eventEndStr = event['end']['dateTime']
#Date section of the string
dateStr = eventEndStr[:19]
#Offset section of the string
offsetStr = eventEndStr[19:]
offsetHours = int(offsetStr[1:3])
offsetMinutes = int(offsetStr[4:])
offsetSign = offsetStr[:1]
#Current date in UTC
currentTime = datetime.datetime.utcnow()
#Get end date in local time and offset
endDate = datetime.datetime.strptime(dateStr, '%Y-%m-%dT%H:%M:%S')
offset = datetime.timedelta(hours=offsetHours, minutes=offsetMinutes)
#Condition to obtain the end date in UTC
if offsetSign == "+":
endDate = endDate - offset
else:
endDate = endDate + offset
#Condition to check if the event is over
if (currentTime > endDate):
print('This event is over')
else:
print('This event is not over')
[1] https://www.ietf.org/rfc/rfc3339.txt
[2] https://stackabuse.com/converting-strings-to-datetime-in-python/