Как и многие пользователи Google Календаря озабочен отсутствием в нем напоминаний о днях рождений моих контактов. Пару лет назад нашел решение, которое заключалось в подключении Google Calendar API, создании скрипта (есть готовое решение), что создавало календарь Birthday Notifications, который, в свою очередь и делал те самые напоминания. Проблема в том, что со временем это решение перестало работать, а также создало сотни календарей "Temp calendar". Решение проблемs я так и не нашел, поэтому стал искать другой способ.
Идею мне дал сайт https://www.khuris.com/, где предлагается загрузить файл экспорта контактов из Google Контактов, а на выходе получить файл импорта в Google Календарь.
Попробовал я воспользоваться этим сервисом, но во-первых, надо загружать свои контакты, во-вторых конечный результат мне не очень понравился в эстетическом виде (заголовок мероприятия, ограниченное количество событий до 5 и прочее). Поэтому решил сделать немного по-своему. Итак, начнем.
Порядок действий:
- Экспорт контактов.
- Обработка и подготовка данных.
- Импорт файла *.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:
Отправить комментарий