Перейти к основному содержанию

Google Calendar — ускоряем календарь из Exchange

Google

Не так давно я писал статью о том, как добавить календарь Exchange в календарь Google.

Google Calendar — добавляем календарь из Exchange

Если вкратце, то там задача разбивается на два этапа:

  1. Открыть общий доступ к календарю Outlook в формате iCalendar (ICS).
  2. Добавить календарь в формате iCalendar (ICS) в Google.

И всё работает, но есть одно большое НО. События обновляются раз в сутки, поэтому использовать такой календарь для "горячих" встреч не получится. Можно что-нибудь пропустить. Новое событие в календаре Exchange может появиться только через 24 часа.

Это печально, и даже понятно. Google переманивает корпоративных пользователей в Google Workspace, где календарь синхронизируется чаще. Но удовольствие платное.

Как сделать так, чтобы было бесплатно и быстро? - спросите вы меня. Легко! - отвечу я. Будем программировать в Google Apps Script. Ну как, программировать. Всё уже запрограммировано за нас, воспользуемся GAS-ICS-Sync:

https://github.com/derekantrican/GAS-ICS-Sync

GAS-ICS-Sync можно расшифровать так: Google Applications Script for Internet Calendaring and Scheduling Syncronisation. Что в переводе на кириллический означает: Не Дам Денег Гуглу За Синхронизацию Календаря или попросту НеДаДеГуЗаСиК.

Из этого чудо-проекта мы скачиваем 5 файлов:

  • Code.gs
  • Helpers.gs
  • ical.js.gs
  • tzid.gs
  • appsscript.json

Переходим к скриптам Google:

https://script.google.com/

Можно также в Google Диске Создать → Ещё → Google Apps Script.

google

Указываем название проекта, например, GAS-ICS-Sync.

Добавляем файлы в новый проект. Файлы Code.gs, Helpers.gs, ical.js.gs, tzid.gs добавляем через + Скрипт в редакторе. После чего указываем название файла и копируем соответствующее содержимое в поле справа для каждого файла.

google

Переходим в настройки проекта и включаем галку "Показывать файл манифеста appsscript.json в редакторе".

google

Возвращаемся в редактор, там добавился файл appsscript.json, вставляем в него содержимое из скачанного файла.

Добавляем сервисы через Сервисы +.

google

Добавляем Google Calendar API. Идентификатор не меняем!

google

Добавляем Tasks API. Идентификатор не меняем!

google

Переходим в редакторе на файл Code.gs, редактируем раздел настроек.

/*
*=========================================
*               SETTINGS
*=========================================
*/

var sourceCalendars = [                // The ics/ical urls that you want to get events from along with their target calendars (list a new row for each mapping of ICS url to Google Calendar)
                                       // For instance: ["https://www.calendarlabs.com/ical-calendar/ics/76/US_Holidays.ics", "US Holidays"]
//  ["icsUrl1", "targetCalendar1"],
//  ["icsUrl2", "targetCalendar2"],
  ["https://ссылка_на_мой_календарь.ics", "Evo календарь"]
  
];

var howFrequent = 10;                  // What interval (minutes) to run this script on to check for new events
var onlyFutureEvents = false;          // If you turn this to "true", past events will not be synced (this will also removed past events from the target calendar if removeEventsFromCalendar is true)
var addEventsToCalendar = true;        // If you turn this to "false", you can check the log (View > Logs) to make sure your events are being read correctly before turning this on
var modifyExistingEvents = true;       // If you turn this to "false", any event in the feed that was modified after being added to the calendar will not update
var removeEventsFromCalendar = true;   // If you turn this to "true", any event created by the script that is not found in the feed will be removed.
var addAlerts = true;                  // Whether to add the ics/ical alerts as notifications on the Google Calendar events, this will override the standard reminders specified by the target calendar.
var addOrganizerToTitle = false;       // Whether to prefix the event name with the event organiser for further clarity
var descriptionAsTitles = false;       // Whether to use the ics/ical descriptions as titles (true) or to use the normal titles as titles (false)
var addCalToTitle = false;             // Whether to add the source calendar to title
var addAttendees = false;              // Whether to add the attendee list. If true, duplicate events will be automatically added to the attendees' calendar.
var defaultAllDayReminder = -1;        // Default reminder for all day events in minutes before the day of the event (-1 = no reminder, the value has to be between 0 and 40320)
                                       // See https://github.com/derekantrican/GAS-ICS-Sync/issues/75 for why this is neccessary.
var overrideVisibility = "";           // Changes the visibility of the event ("default", "public", "private", "confidential"). Anything else will revert to the class value of the ICAL event.
var addTasks = false;

var emailSummary = false;              // Will email you when an event is added/modified/removed to your calendar
var email = "";                        // OPTIONAL: If "emailSummary" is set to true or you want to receive update notifications, you will need to provide your email address

Указываем здесь ссылки на свои календари и их названия. Указываем настройки синхронизации, у меня настроено на один раз в 10 минут.

Выбираем install и нажимаем Выполнить.

google

Попросят авторизоваться. Инструкцию по шагам авторизации можно посмотреть здесь:

https://youtu.be/_5k10maGtek?t=1m22s

Теперь каждые 10 минут будет запускаться скрипт синхронизации календарей. Если нужно только один раз синхронизировать календари, то вместо install можно выполнить startSync. Uninstal, соответственно, остановит синхронизацию и удалит импортированные календари.

google

Новые календари появятся в разделе "Мои календари". У меня скрипт уже работает год без нареканий.

Ссылки

https://github.com/derekantrican/GAS-ICS-Sync/wiki/Setting-up-the-script-manually

https://github.com/derekantrican/GAS-ICS-Sync

Теги

 

Похожие материалы

Google Calendar — добавляем календарь из Exchange

Сегодня добавим календарь Exchange в календарь Google. К примеру, мы можем подключить рабочий календарь из Exchange к личному календарю Google, чтобы на смартфоне отслеживать события и встречи.

Drupal — размещение блока в произвольном месте статьи

Многие владельцы сайтов сталкиваются с необходимостью размещения дополнительных блоков в своих статьях. Это может быть рекламный блок или какое-то объявление. Или просто какое-то декоративное праздничное оформление сайта.

Теги