Как создать гугл календарь и получить к нему доступ

Как создать гугл календарь и получить к нему доступ

Сегодня мой рассказ будет Как достать данные из Гугл календаря.
Если вы уже пользуетесь Гугл Календарём, то примите мои поздравления. Это на самом деле очень удобная штука в плане составления своего расписания и получения уведомлений о ближайших и будущих событиях и мероприятиях.
А ещё, как оказалось это очень безопасное приложение. И с налёта, мне не удалось победить это приложение, поэтому я и разбил его на 2 урока.

В первой части, мы научимся создавать свои напоминалки в календаре и напишем скрипт, который будет выводить  все данные в простом текстовом виде, наподобие RSS ленты, только без ссылок на полную версию.
В конце этого видео я расскажу с чем я столкнулся при считывании информации и дальнейшем управлении   устройствами.

У меня уже было подобное видео, но там я использовал целую систему Умный дом, построенную на основе сервера OPENHAB.
Оказалось, что не всем нужны такие сложности, поэтому сделаем попроще.
Это второе видео из серии Полезные Гугл приложения. Первое было про отправку температуры в Гугл таблицу и построение графика по этим данным. Посмотреть можно здесь.
Теперь точно хватит. Переходим непосредственно к теме видео.

Посмотрим как заполняя календарь мы получаем данные на другой странице. Что-то из того что вы увидите, я объясню позже в видео, а что-то прямо здесь.
Перед нами открыт календарь с текущей неделей. Давайте наполним его разными событиями.
Сегодня вторник. Посмотрим, что если событие было в понедельник. Создадим мероприятие с 7 утра до 17 часов вечера, и назовём его Первое. И на другом экране это событие не появилось, так как прошлые события уже не будут отображаться на странице вывода.
Теперь создадим новое событие. Уже на сегодня, но по времени раньше чем текущее. Сейчас 15 часов, а мы создадим с 7 до 10 часов. И назовём Второе.
Видим, что хоть и время прошло, но на экран оно всё равно выводится. Про то, что значат все эти значения я расскажу дальше в видео.
Новое событие будет тоже сегодня, но начнётся раньше, а закончится позже текущего времени. Назовём Третье. Оно также выводится на экран, но ничем от прошедшего не отличается. Только временем и названием.
Четвёртое событие будет очень большим и случится оно завтра. Здесь мы укажем, что надо оповестить про него заранее, чтобы можно было подготовится. Установим время на 20 минут.
На экране вывода, всё выглядит точно также как и предыдущие, но появилось ещё цифра 20.
 Ну и последний пример событий который мы сегодня рассмотрим – это событие на целый день. Например вы хотите устроить себе выходной. Для этого щёлкаем на созданном событие и выбираем Целый день.
 Сохраняем и смотрим что получилось.
Видим, что все события что были раньше стоят со значение FALSE, а это имеет значение TRUE. Что это и почему так, я расскажу дальше в видео.

А теперь подумаем, что из этого можно сделать.
Мы имеем дату и время начала, из этого можно сделать, например включение любого электроприбора. Любую напоминалку, например включение плеера, который озвучит о наступающем событии. Можно и напомнить заранее, например за 20 минут до начала совещания. И МНОГОЕ ДРУГОЕ.
Но это будет уже в следующем видео, так что не забудьте подписаться, так вы не пропустите это и много другого интересного. А теперь давайте всё по порядку.

Для начала откроем календарь.
Если у вас его ещё нет, то вам надо нажать вот на эти 9 точек, прокрутить вниз и найти там ссылку на Календарь.
Нажимаем и попадаем в программу Календарь.
Как его настраивать я рассказывать не буду, это отдельная тема.
Давайте для примера создадим несколько событий, чтобы нам было с чем работать.
Создать новое событие- мероприятие просто. Нажимаем в нужном месте и тянем вниз на сколько часов оно продлится. Обзываем его и у нас готово первое уведомление.
Сделаем ещё несколько и переходим к написанию кода. Это конечно громко сказано, мы всего лишь вставим небольшой блок. Все коды и скетчи как всегда лежат в архиве на моём сайте. Ссылка в описании.
Переходим на страницу редактора скриптов. Там уже лежит один скрипт из прошлого урока.
Создаём новый проект. У вас открывается окно редактора с шаблоном пустой функции.
Открываем текстовой файл из архива и вставляем код в редактор.
Давайте рассмотрим код.
В первой строке надо указать свою почту, которая привязана к Календарю. Это почта аккаунта в Гугл в которой и был создан Календарь.
Дальше идёт обработчик ошибок. Если произойдёт ошибка, то вам об этом напишут.
Здесь мы пишем, что день у нас начинается в 0 часов. А то вдруг Гугл об этом не знает.
Так как всё всегда делается в миллисекундах, то мы создаём переменную, которой присваиваем количество миллисекунд равное значению в сутках.
А дальше обычный цикл с выводом всех события календаря за 7 дней.
Вы можете выбрать другой интервал.
Теперь присвоим название проекту. Я назову его Календарь. Сохраняем проект и проверяем сохранился ли он на странице Мои проекты. Это необязательно, но лучше перестраховаться.
Снова открываем проект и теперь надо его Опубликовать. Для этого нажимаем Опубликовать и Развернуть как web приложение.
Более подробно я рассказывал в предыдущем видео. Если что непонятно то пересмотрите его.
Здесь у вас обязательно должно быть установлено в версии проекта значение НОВОЕ.
Напишем небольшое пояснение к проекту.
Здесь даём доступ к вашему календарю. Варианты Только мне, мне или у кого есть аккаунт в Гугле, и последний абсолютно всем. Вот его я и выберу.
Нажимаем deploy. Теперь вам на почту придёт запрос на разрешение использования вашего календаря сторонней программой и доступ другим пользователям. Со всем соглашаемся и идём дальше. Повторюсь – это я рассказывал в предыдущем видео.
Здесь показан URL адрес по которому доступны все события вашего календаря за последние 7 дней.
Копируем адрес и вставляем в строку браузера.
И вот мы получили данные из Гугл Календаря.
Рассмотрим их подробнее.
За последние 7 дней у нас назначено 4 мероприятия. Вот календарь, а вот эти 4 события.
День недели, месяц. Число и время начала события.
Следующим идёт поле отвечающее за длительность события. Это булева переменная, поэтому она имеет два значения ПРАВДА или ЛОЖЬ.
Если событие указано на весь день, то оно вернёт значение TRUE тоесть правда, в противном случае вернёт ложь.
Следующее значение – это время за которое надо уведомить пользователя В одном из событий я указал значение 15 минут.
И наконец, Название самого события.
С календарём вроде разобрались.

А теперь рассказываю с чем я столкнулся и пока победить не смог. Но это только пока.
Для обеспечения безопасности Гугл календарь не разрешает прямого доступа к своим скриптам,
И при обращении по адресу script.google.com с указанным ID календаря, он перенаправляет на случайно сгенерированную страницу, уже по адресу script.googleusercontent.com При каждом обращении страница имеет другой адрес.

Существует библиотека HTTPSRedirect и она должна как раз обрабатывать эти перенаправления.
То есть следовать за этими редиректами, но у меня пока не получилось её использовать. Вроде уже всё заработало, но всегда появляется новая проблемка. Так, что оставил это на следующий раз.
Если интересно, то оставляйте комментарии- это значительно ускорит процесс написания кода.