Повідомлення про Дні народження у Google Календарі (Birthday Notifications by import)

Як і багато користувачів Google Календаря стурбований відсутністю в ньому нагадувань про дні народження моїх контактів. Кілька років тому знайшов рішення, яке полягало в підключенні Google Calendar API, створенні скрипту (є готове рішення), що створювало календар Birthday Notifications, який, у свою чергу, робив ті самі нагадування. Проблема в тому, що згодом це рішення перестало працювати, а також створило сотні календарів Temp Calendar. Вирішення проблем я так і не знайшов, тому почав шукати інший спосіб.

Ідею мені дав сайт 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 (власне, назва заходу), де ім'я контакту та рік його народження також беруться із зазначеної вище таблиці.

Примітка. UID — це ідентифікатор контакту (він дорівнює імені контакту), тобто якщо в контакта змінилися якісь дані (телефон, пошта, дата народження), при наступному імпорті подія для цього контакту оновиться відповідно до нових даних (телефона, пошти, дати народження). Але якщо змінити ім’я контакту, відповідно зміниться UID — тоді буде створено нову подію. Треба подумати, як призначати/генерувати ідентифікатори з можливістю повного оновлення при зміні імені, телефону, пошти, дати народження. Поки що після зміни імен деяких контактів я видалив весь календар «Birthday Notifications by import», створив новий такий самий і в нього імпортував оновлені події.

Докладніше про структуру файлу *.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:

Дописати коментар