gcsa — Pythonic оболочка для API Календаря Google

#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 атрибут