UncleFather » 05 фев 2017 17:28, Вс
Задача:
Как известно, Google календарь собирает информацию о памятных событиях, днях рождения, годовщинах и пр. Однако, создав для этих событий отдельный календарь «Дни рождения», Google не только никак не уведомляет о событиях в нем, но и не предоставляет возможности эти оповещения настраивать. Поэтому можно легко пропустить какое либо событие, - ведь не каждый же заглядывает в календарь ежедневно.
Решение 1:
Можно настроить автоматический скрипт, созданный Nikhil K.. Описание скрипта на английском языке читаем в статье Google Calendar Birthday Notifications for Android Contacts
Хороший перевод на русский язык сделан Константином Докучаевым в статье Как добавить напоминания о днях рождениях в Google Календарь.
Поэтому, здесь приведу только ключевые моменты:
-
Переходим на страничку проекта Birthday Notifications сервиса разработчиков Google.
-
Выделяем весь текст скрипта и копируем его в буфер обмена (Ctrl+C)
Код: Выделить всё
function addBdayNotifications() {
var bdayCal, bdayNotifyCal;
var calendars = CalendarApp.getAllCalendars();
for (var i = 0; i < calendars.length; i++) {
if (calendars[i].getName() == "Birthday Notifications") bdayNotifyCal = calendars[i];
if (calendars[i].getName() == "Birthdays") bdayCal = calendars[i];
if (calendars[i].getName() == "Дни рождения") bdayCal = calendars[i];
}
if (bdayCal == undefined) return;
if (bdayNotifyCal == undefined) {
bdayNotifyCal = CalendarApp.createCalendar("Birthday Notifications");
bdayNotifyCal.setHidden(true);
}
var currentYear = new Date().getFullYear();
var fromDate = new Date(currentYear, 0, 1);
var toDate = new Date(currentYear, 12, 31);
var bdayEvents = bdayCal.getEvents(fromDate, toDate);
var notifyEvents = bdayNotifyCal.getEvents(fromDate, toDate);
// Maintain a list of event titles
var notifyEventsTitle = [];
for (i = 0; i < notifyEvents.length; i++) {
notifyEventsTitle.push(notifyEvents[i].getTitle())
if (i % 25 == 0) Utilities.sleep(1000);
}
var items = 0;
bdayEvents.forEach(function(evt) {
var status = createEvent(bdayNotifyCal, notifyEventsTitle,
evt.getTitle(), evt.getStartTime());
if (status) items++;
if (items % 5 == 0) Utilities.sleep(1000);
})
Logger.log("%s events added to the calendar", items);
}
function createEvent(cal, eventList, title, time) {
for (var i = eventList.length - 1; i >= 0; i--) {
if (eventList[i] == title) return false;
}
Utilities.sleep(1000);
cal.createAllDayEventSeries(title, time,
CalendarApp.newRecurrence().addYearlyRule(), {})
.setGuestsCanInviteOthers(false)
.setGuestsCanModify(false)
.setGuestsCanSeeGuests(false)
.addPopupReminder(14 * 60 - 15);
//.addEmailReminder(2 * 60);
return true;
}
function createTrigger() {
ScriptApp.newTrigger("addBdayNotifications")
.timeBased()
.everyDays(1)
.create();
}
-
Создаем у себя новый проект: «Файл» -> «Создать» -> «Проект»:
-
Вставляем содержимое буфера обмена (Ctrl+V) и изменяем в восьмой строке скрипта «Birthdays» на «Contacts»
Примечание: В исходном скрипте для каждого дня рождения добавляются оповещения, приходящие на электронную почту за день до события в 22 часа. Поскольку, мне это не удобно, то я поменял оповещения на всплывающие за день до события в 10:15, для чего в коде заменил 55-ю строку
на
-
В меню «Ресурсы» выбираем раздел «Дополнительные функции Google...», если проект еще не сохранен, то сохраняем его, выбрав произвольное имя:
-
В открывшемся окне «Дополнительные функции Google...» включаем «Calendar API» и нажимаем на ссылку консоли разработчика:
-
В окне консоли разработчика в строке поиска вводим «calendar», выбираем «Google Calendar API» и на открывшейся странице нажимаем «Включить»:
- Image--2--1.png (9.49 КБ) 5436 просмотров
-
Закрываем страницу «Диспетчера API», жмем«OK» на странице создания скрипта.
-
В меню «Выполнить» включаем и разрешите доступ для «addBdayNotifications»:
-
После завершения выполнения скрипта, переходим в Google Календарь и в блоке «Мои календари» открываем общие настройки всех календарей:
-
Включаем календарь «Birthday Notifications»:
-
Настраиваем напоминания для этого календаря так, как нам нужно
Скрипт будет в автоматическом режиме обновлять данные о днях рождения.
Особенности скрипта, которые нужно иметь ввиду:
-
Для немедленного обновления событий календаря, скрипт можно запускать вручную
-
Автоматическое обновление календаря происходит один раз в сутки
-
Если контакту добавляется новое событие, то оно появляется в календаре
-
Если имя контакта изменено, то в календаре создается дубликат события
-
Если контакт удален, то соответствующее событие календаря не удаляется
-
Если у контакта изменена дата события, то в календаре событие не изменяется
Решение 2:
Устанавливаем любое дополнительное приложение из сервиса «Google Play», умеющее напоминать о днях рождения.
[b][size=150]Задача:[/size][/b]
Как известно, Google календарь собирает информацию о памятных событиях, днях рождения, годовщинах и пр. Однако, создав для этих событий отдельный календарь «[b][i]Дни рождения[/i][/b]», Google не только никак не уведомляет о событиях в нем, но и не предоставляет возможности эти оповещения настраивать. Поэтому можно легко пропустить какое либо событие, - ведь не каждый же заглядывает в календарь ежедневно.
[hr][/hr]
[b][size=150]Решение 1:[/size][/b]
Можно настроить автоматический скрипт, созданный [url=http://shortcircuits.io/about]Nikhil K.[/url]. Описание скрипта на английском языке читаем в статье [url=http://shortcircuits.io/google-calendar-birthday-notifications.html]Google Calendar Birthday Notifications for Android Contacts[/url]
Хороший перевод на русский язык сделан Константином Докучаевым в статье [url=http://blog.themarfa.name/kak-dobavit-napominaniia-o-dniakh-rozhdieniiakh-v-google-kaliendar/#axzz4XKEECzqf]Как добавить напоминания о днях рождениях в Google Календарь[/url].
Поэтому, здесь приведу только ключевые моменты:
[list=1][*] Переходим на страничку проекта [url=https://script.google.com/d/1C5KepbK1yLgFelrcd7S_AdVJguS6rrrP3QZr4bLDaz6FBEvf-x-lbN67/edit?usp=sharing]Birthday Notifications[/url] сервиса разработчиков Google.
[*] Выделяем весь текст скрипта и копируем его в буфер обмена (Ctrl+C)[spoiler][code]function addBdayNotifications() {
var bdayCal, bdayNotifyCal;
var calendars = CalendarApp.getAllCalendars();
for (var i = 0; i < calendars.length; i++) {
if (calendars[i].getName() == "Birthday Notifications") bdayNotifyCal = calendars[i];
if (calendars[i].getName() == "Birthdays") bdayCal = calendars[i];
if (calendars[i].getName() == "Дни рождения") bdayCal = calendars[i];
}
if (bdayCal == undefined) return;
if (bdayNotifyCal == undefined) {
bdayNotifyCal = CalendarApp.createCalendar("Birthday Notifications");
bdayNotifyCal.setHidden(true);
}
var currentYear = new Date().getFullYear();
var fromDate = new Date(currentYear, 0, 1);
var toDate = new Date(currentYear, 12, 31);
var bdayEvents = bdayCal.getEvents(fromDate, toDate);
var notifyEvents = bdayNotifyCal.getEvents(fromDate, toDate);
// Maintain a list of event titles
var notifyEventsTitle = [];
for (i = 0; i < notifyEvents.length; i++) {
notifyEventsTitle.push(notifyEvents[i].getTitle())
if (i % 25 == 0) Utilities.sleep(1000);
}
var items = 0;
bdayEvents.forEach(function(evt) {
var status = createEvent(bdayNotifyCal, notifyEventsTitle,
evt.getTitle(), evt.getStartTime());
if (status) items++;
if (items % 5 == 0) Utilities.sleep(1000);
})
Logger.log("%s events added to the calendar", items);
}
function createEvent(cal, eventList, title, time) {
for (var i = eventList.length - 1; i >= 0; i--) {
if (eventList[i] == title) return false;
}
Utilities.sleep(1000);
cal.createAllDayEventSeries(title, time,
CalendarApp.newRecurrence().addYearlyRule(), {})
.setGuestsCanInviteOthers(false)
.setGuestsCanModify(false)
.setGuestsCanSeeGuests(false)
.addPopupReminder(14 * 60 - 15);
//.addEmailReminder(2 * 60);
return true;
}
function createTrigger() {
ScriptApp.newTrigger("addBdayNotifications")
.timeBased()
.everyDays(1)
.create();
}
[/code][/spoiler]
[*] Создаем у себя новый проект: «[b][i]Файл[/i][/b]» -> «[b][i]Создать[/i][/b]» -> «[b][i]Проект[/i][/b]»:[attachment=6]Image-1.png[/attachment]
[*] Вставляем содержимое буфера обмена (Ctrl+V) и [color=#BF0000][size=130]изменяем в восьмой строке скрипта «[i]Birthdays[/i]» на «[i]Contacts[/i]»[/size][/color]
[color=#40FF00][b][size=130]Примечание:[/size][/b] В исходном скрипте для каждого дня рождения добавляются оповещения, [b][i]приходящие на электронную почту за день до события в 22 часа[/i][/b]. Поскольку, мне это не удобно, то я поменял оповещения на [b][i]всплывающие за день до события в 10:15[/i][/b], для чего в коде заменил 55-ю строку[/color] [code].addEmailReminder(2 * 60);[/code] на [code].addPopupReminder(14 * 60 - 15);[/code]
[*] В меню «[b][i]Ресурсы[/i][/b]» выбираем раздел «[b][i]Дополнительные функции Google...[/i][/b]», если проект еще не сохранен, то сохраняем его, выбрав произвольное имя:[attachment=3]05.jpg[/attachment]
[*] В открывшемся окне «[b][i]Дополнительные функции Google...[/i][/b]» включаем «[b][i]Calendar API[/i][/b]» и нажимаем на ссылку консоли разработчика:[attachment=4]Image--3--1.png[/attachment]
[*] В окне консоли разработчика в строке поиска вводим «[i]calendar[/i]», выбираем «[i]Google Calendar API[/i]» и на открывшейся странице нажимаем «[i]Включить[/i]»:[attachment=5]Image--2--1.png[/attachment]
[*] Закрываем страницу «[i]Диспетчера API[/i]», жмем«[b][i]OK[/i][/b]» на странице создания скрипта.
[*] В меню «[b][i]Выполнить[/i][/b]» включаем и разрешите доступ для «[i]addBdayNotifications[/i]»:[attachment=1]Image--4-.png[/attachment]
[*] После завершения выполнения скрипта, переходим в Google Календарь и в блоке «[i]Мои календари[/i]» открываем общие настройки всех календарей:[attachment=2]Image--5-.png[/attachment]
[*] Включаем календарь «[i]Birthday Notifications[/i]»:[attachment=0]Image--6-.png[/attachment]
[*] Настраиваем напоминания для этого календаря так, как нам нужно[/list]
Скрипт будет в автоматическом режиме обновлять данные о днях рождения.
[b][size=130][color=#BF8000]Особенности скрипта, которые нужно иметь ввиду:[/color][/size][/b]
[list=1][*] Для немедленного обновления событий календаря, скрипт можно запускать вручную
[*] [color=#00BF00]Автоматическое обновление календаря происходит один раз в сутки[/color]
[*] [color=#00BF00]Если контакту добавляется новое событие, то оно появляется в календаре[/color]
[*] [color=#FF0000]Если имя контакта изменено, то в календаре создается дубликат события[/color]
[*] [color=#FF0000]Если контакт удален, то соответствующее событие календаря не удаляется[/color]
[*] [color=#FF0000]Если у контакта изменена дата события, то в календаре событие не изменяется[/color][/list]
[hr][/hr]
[b][size=150]Решение 2:[/size][/b]
Устанавливаем любое [url=https://play.google.com/store/search?q=birthday%20reminder&c=apps]дополнительное приложение из сервиса «Google Play»[/url], умеющее напоминать о днях рождения.