如何在Google Calendar API中检查事件是否完成

时间:2019-07-03 08:20:00

标签: python google-calendar-api

我要在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。

1 个答案:

答案 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/