#python #google-api #google-calendar-api
#python #google-api #google-календарь-api
Вопрос:
это мой первый пост, и я очень новичок в python, поэтому заранее прошу прощения, если мои вопросы / правила этикета недостаточно отточены. Это может быть очень тривиальный вопрос.
Вот в чем дело: я пытаюсь разработать приложение, которое будет периодически проверять календарь через API календаря Google на наличие новых событий, а затем создавать QR-код, включающий идентификатор календаря и идентификатор события.
Поскольку я новичок в python, я искал что-то, что могло бы сделать вещи более плавными, и нашел gcsa: https://github.com/kuzmoyev/google-calendar-simple-api , что очень приятно и удобно.
Проблема, с которой я сталкиваюсь, заключается в том, что при использовании gcsa стандартный способ перечисления событий в календаре возвращает только время и имя события:
from gcsa.google_calendar import GoogleCalendar
calendar = GoogleCalendar('primary')
for event in calendar:
print(event)
дает мне 2021-02-16 10:30:00-03:00 - TEST
И, как новичок, которым я являюсь, я ни за что на свете не смогу найти способ вернуть другие данные из ресурса событий, такие как «id» (который мне нужен) и «статус» (который я буду использовать в качестве флага для новых / старых событий).
Из того, что я понимаю, необходимо будет немного подправить код, возможно, в google_calendar.py , может быть, в event_serialyzer.py . Вероятно, некоторые очень незначительные глупые вещи, которые я должен был уже заметить.
Я даже не могу точно определить, где выполняется GoogleCalendar() и откуда он получает отображаемые данные, но я предполагаю, что, возможно, строка 321 или 376 в google_calendar.py ? Бьет меня.
Прошло два дня с этой проблемой, и не повезло, кто-нибудь, пожалуйста, имеет представление об этом?
Я знаю, что есть способы запросить объект события непосредственно в python, как показано в https://developers.google.com/calendar/v3/reference/events/list#python , и это будет мой следующий вариант.
Если окажется, что это слишком неудобно или не стоит хлопот, я просто обойдусь без gcsa и сделаю запрос обычным способом.
Большое вам всем спасибо!
Комментарии:
1. Привет. Я разработчик библиотеки. Как вы думаете, я мог бы как-то прояснить это в документах?
Ответ №1:
Ваше предположение, что gcsa
возвращает только время события и имя, неверно. Проверка пользовательского объекта с помощью print
не очень продуктивно. Все, что вы увидите, это строковое представление объекта (в соответствии с его __str__
методом).
Вы должны проверять объекты либо с помощью реального отладчика, либо, по крайней мере, распечатывая доступные атрибуты с помощью vars(obj)
или dir(obj)
, или, конечно, просматривая фактический класс.
В этом случае, если вы посмотрите на фактический класс, вы увидите, что он содержит намного больше, чем только начальную дату и имя. Он также имеет (среди прочих атрибутов) event_id
.
Комментарии:
1. Большое вам спасибо за разъяснения. Я все еще не совсем понимаю, как и почему, но
print(event.id)
сделал трюк с отображением идентификатора события. Я предполагаю, что он вызываетdef id(self): return self.event_id
строку 179 из event.py ? На самом деле я хотел получить полный спектр данных от объекта event, и этоprint(dir(event))
сработало как шарм. Теперь я должен еще немного поломать голову, пытаясь вставить эти идентификаторы в список, используя цикл for, и это кажется немного сложнее, чем в JS, хахаха, Большое вам спасибо!2. @gbertonzzin Да,
e.id
иe.event_id
эквивалентны (в данном случае), посколькуe.id
вызывает свойство, которое возвращаетevent_id
атрибут