Уведомления о Днях рождений в Google Календаре (Birthday Notifications by import)

Как и многие пользователи Google Календаря озабочен отсутствием в нем напоминаний о днях рождений моих контактов. Пару лет назад нашел решение, которое заключалось в подключении Google Calendar API, создании скрипта (есть готовое решение), что создавало календарь Birthday Notifications, который, в свою очередь и делал те самые напоминания. Проблема в том, что со временем это решение перестало работать, а также создало сотни календарей "Temp calendar". Решение проблемs я так и не нашел, поэтому стал искать другой способ.

Идею мне дал сайт https://www.khuris.com/, где предлагается загрузить файл экспорта контактов из Google Контактов, а на выходе получить файл импорта в Google Календарь.


Попробовал я воспользоваться этим сервисом, но во-первых, надо загружать свои контакты, во-вторых конечный результат мне не очень понравился в эстетическом виде (заголовок мероприятия, ограниченное количество событий до 5 и прочее). Поэтому решил сделать немного по-своему. Итак, начнем.

Порядок действий:

  1. Экспорт контактов.
  2. Обработка и подготовка данных.
  3. Импорт файла *.ics в Google Календарь.

Экспорт контактов

Здесь все просто. На сайте https://contacts.google.com/ экспортируем в Google CSV:


Обработка и подготовка данных

Теперь надо немного поработать с этим файлом. Я его открываю в Google Таблицах, выбираю только те контакты, у которых есть дата рождения

=QUERY(contacts_data!A1:DM2409; "select * where O is not null"; 1)

Теперь немного о файле импорта в Google Календарь. Начало текста:

BEGIN:VCALENDAR
PRODID:-//Google Inc//Google Calendar 70.9054//EN
VERSION:2.0
CALSCALE:GREGORIAN
METHOD:PUBLISH
X-WR-CALNAME:Birthday by importr test
X-WR-TIMEZONE:Europe/Kiev

И заканчивается строкой

END:VCALENDAR

Между этими строками расположена часть, содержащая данные каждого мероприятия, т.е. сколько контактов, столько и таких однотипных блоков, отличающихся некоторыми строками. Например, чтобы мероприятие выглядело так


его блок должен быть таким


Как видно, блок начинается строкой

BEGIN:VEVENT

и заканчивается

END:VEVENT

Текст, который отображен в описании мероприятия, это DESCRIPTION, где номер телефона и адрес электронной почты берутся из таблицы экспорта контактов, и SUMMARY (собственно, название мероприятия), где имя контакта и год его рождения также берутся из указанной выше таблицы.

Более подробно о структуре файла *.ics можно почитать в справке Google.

Импорт файла *.ics в Google Календарь

Полученный многострочный текст сохраняем с расширением *.ics и импортируем в календарь. Кстати, календарь для таких мероприятий создан заранее с настройками уведомлений. Я его назвал Birthday Notifications (import). Таким образом, все мероприятия, импортированные в него, уже будут иметь заданные настройки уведомлений.



Теперь о том, как это работает у меня:

  • экспортирую контакты;
  • вставляю на лист contacts_data;
  • на листе contacts_birth_only формулой остаются только те, у которых заполнены даты рождений;
  • на листе vevent формулами создаются блоки BEGIN:VEVENT - END:VEVENT для всех контактов;
  • на листе VCALENDAR-join все предыдущие блоки мероприятий формулами соединяются с блоками BEGIN:VCALENDAR и END:VCALENDAR;
  • на листе VCALENDAR-query формулой удаляются пустые строки. Все, что содержится на этом листе, и есть содержимое файла импорта в календарь.

То есть моя задача ― дать данные контактов, а в итоге получить файл импорта. Если появятся новые контакты или у существующих добавится/изменится дата рождения, я экспортирую контакты, получу файл импорта и обновлю все мероприятия для моего календаря Birthday Notifications (import).

Достоинства этого способа:

  • возможность оформления содержимого мероприятий и уведомлений на свой вкус;
  • гарантированная стабильность работы и качество результата;
  • картинки тортов Google добавил сам на основании названия мероприятия.

Недостаток: обновления необходимо проводить вручную. Но минимальное участие пользователя, а также гарантированный и настраиваемый результат, считаю, перекрывают указанный недостаток.

С радостью поделюсь со всеми этим решением и буду рад ответить на все вопросы, заданные в комментариях ниже.



Поделиться:

Понравилась эта публикация? Не пропустите следующие публикации и начните следить за этим блогом.

0 comments:

Отправить комментарий