Календарь событий Google Продолжительность Python - PullRequest
0 голосов
/ 31 января 2020

Я пытаюсь получить продолжительность каждого события из API календаря Google.

Вот код, который я пытался распечатать на длительности первых 20 событий в людях календарь:

page_token = None
while True:
    calendar_list = service.calendarList().list(pageToken=page_token).execute()
    for calendar_list_entry in calendar_list['items']:

        print(calendar_list_entry['summary'])

        events_result = service.events().list(calendarId=calendar_list_entry['id'], timeMin=now,
                                              maxResults=20, singleEvents=True,
                                              orderBy='startTime').execute()
        events = events_result.get('items', [])

        if not events:
            print('\tNo upcoming events found.')
        for event in events:
            start = event['start'].get('dateTime', event['start'].get('date'))
            end = event['end'].get('dateTime', event['end'].get('date'))
            print(end - start)

    page_token = calendar_list.get('nextPageToken')
    if not page_token:
        break

Мне было интересно, есть ли простой способ получить эту информацию из API календаря Google.

1 Ответ

0 голосов
/ 31 января 2020

Я разработал это с небольшим исследованием даты и времени (я никогда особо не работал с ним) и понял, что время начала и окончания googles находится в iso стандартной форме.

Я исправил это, импортировав пакет dateutil.parser и использовал функцию isoparse для преобразования стандартных строк iso в datetime.

page_token = None
    while True:
        calendar_list = service.calendarList().list(pageToken=page_token).execute()
        for calendar_list_entry in calendar_list['items']:

            print(calendar_list_entry['summary'])

            events_result = service.events().list(calendarId=calendar_list_entry['id'], timeMin=now,
                                                  maxResults=20, singleEvents=True,
                                                  orderBy='startTime').execute()
            events = events_result.get('items', [])

            if not events:
                print('\tNo upcoming events found.')

            for event in events:
                start = event['start'].get('dateTime', event['start'].get('date'))
                end = event['end'].get('dateTime', event['end'].get('date'))

                new_start = dateutil.parser.isoparse(start) # changing the start time to datetime format
                new_end = dateutil.parser.isoparse(end) # changing the end time to datetime format
                print(new_end - new_start)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...