API календаря Google не может получить идентификатор цвета

1

В основном я написал код, который должен отображать имя события и шестнадцатеричный цветовой код, но по какой-то причине он не работает и отображает ошибку под названием Keyerror: colorId.

Я просмотрел https://developers.google.com/calendar/v3/reference/colors/get и не мог понять, как решить эту проблему.

from __future__ import print_function
from apiclient.discovery import build
from httplib2 import Http
from oauth2client import file, client, tools
import datetime

SCOPES = 'https://www.googleapis.com/auth/calendar'
store = file.Storage('credentials.json')
creds = store.get()
if not creds or creds.invalid:
flow = client.flow_from_clientsecrets('client_secret.json', SCOPES)
creds = tools.run_flow(flow, store)
service = build('calendar', 'v3', http=creds.authorize(Http()))

now = datetime.datetime.utcnow().isoformat() + 'Z'
print('Getting the upcoming 10 events and color')
events_result = service.events().list(calendarId='primary', timeMin=now,
                                      maxResults=10, singleEvents=True,
                                      orderBy='startTime').execute()
colors = service.colors().get().execute()

events = events_result.get('items', [])

if not events:
    print('No upcoming events found.')
for event in events:
    start = event['start'].get('dateTime', event['start'].get('date'))
    varv = colors['calendar'][event['colorId']]['background']
    print(start, varv)
Теги:
google-api
google-calendar-api

1 ответ

0
Лучший ответ

Как насчет этой модификации?

Модификации:

  • Чтобы получить цвета событий, используйте event в полях.
  • Есть также события без colorId.

Измененный скрипт:

Чтобы отразить вышеуказанные моменты, пожалуйста, измените следующее.

От:
colors = service.colors().get().execute()

events = events_result.get('items', [])

if not events:
    print('No upcoming events found.')
for event in events:
    start = event['start'].get('dateTime', event['start'].get('date'))
    varv = colors['calendar'][event['colorId']]['background']
    print(start, varv)
Кому:
colors = service.colors().get(fields='event').execute()  # Modified

events = events_result.get('items', [])

if not events:
    print('No upcoming events found.')
for event in events:
    if 'colorId' in event:  # Added
        start = event['start'].get('dateTime', event['start'].get('date'))
        varv = colors['event'][event['colorId']]['background']  # Modified
        print(start, varv)

Ссылка:

Извините, если это не то, чего вы хотите.

  • 1
    Это отчасти работает, но есть одна проблема, связанная с этим, когда цвет не определен, а это синий цвет по умолчанию. Возвращает Keyerror: colorId. Поэтому я в основном добавил эту вещь, что если есть ошибка colorId, это означает, что событие синее.
  • 0
    @Martoolius Спасибо за дополнительную информацию. Я не мог заметить об этом. Я мог бы учиться на вашем вопросе. Огромное спасибо.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню