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

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

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