Страницы

суббота, 29 июня 2013 г.

В моей смерти прошу винить...

Не пугайтесь, I'm still alive, уходить пока не собираюсь (завтра улицу не в том месте перейду - и ... :)). В статье речь пойдет о завещании, или страховке. Если Вы когда-нибудь почувствуете, что над Вашей головой занесен меч, и у Вас есть что сказать после смерти (или ареста, например) , с помощью сервисов Google можно соорудить следующую страховку: если в течение недели мы не заходим по известной только нам ссылке, то мы предоставляем доступ к нашему завещанию определенному заранее кругу лиц.


Для создания завещания нам понадобится аккаунт Google и браузер.

Открываем браузер, идем на Google Drive, создаем документ. Назовем его "Завещание".

Создаем скрипт, пишем код.
function doGet(e) {
  if (!e.parameters.pw) return;
  if (e.parameters.pw != '12345') return HtmlService.createHtmlOutput('<b>Неверный пароль!</b>');
  ScriptProperties.setProperty('lastAccessed', new Date());
  return HtmlService.createHtmlOutput('<b>Я все еще жив!</b>');    
}

Сохраняем версию скрипта и разворачиваем веб-приложение.
Авторизуем скрипт для работы со свойствами скрипта.

Не смотря на то, что в нашем случае скорость ни к чему, хочу обратить внимание любителей Google Apps Script как долго HtmlService справляется с такой простой операцией.

Продолжаем разговор. Заходим в контакты, создаем группу контактов, которым будем предоставлять доступ к нашему завещанию. Я назвал ее Testament.
Для теста добавим в эту группу какой-нибудь контакт.

В нашем скрипте пишем код функции, которая будет выполняться каждые 12 часов, сравнивать дату, сохраненную в свойстве скрипта с текущей датой, и в случае наличия разницы более 7 дней предоставлять доступ к завещанию пользователям группы контактов "Testament".
Для теста закомментируем условие разницы в 7 дней и выполним функцию.
function compareDate() {
  var docId = 'id_документа'; // id документа
  var groupName = 'Testament'; // название группы контактов
  var lastAccessed = new Date(ScriptProperties.getProperty('lastAccessed')).getDate();  
  var dateDiff = new Date().getDate() - lastAccessed;
  //if (Math.abs(dateDiff) > 7) {
    var contacts = ContactsApp.getContactGroup(groupName).getContacts();   
    var doc = DocumentApp.openById(docId);
    for (var i=0; i<contacts.length; i++) {
      var emailField = contacts[i].getEmails();
      for (var j=0; j<emailField.length; j++) {        
        doc.addViewer(emailField[j].getAddress());
      }      
    }
  //}
}

Авторизуем скрипт еще раз.


В завершение создадим триггер (Ресурсы - Триггеры текущего проекта) для запуска функции compareDate() каждые 12 часов.

Не забываем раскомментировать строку, содержащую условие разницы в 7 дней. Сохраняем скрипт. Наше завещание готово.
function doGet(e) {
  if (!e.parameters.pw) return;
  if (e.parameters.pw != '12345') return HtmlService.createHtmlOutput('<b>Неверный пароль!</b>');
  ScriptProperties.setProperty('lastAccessed', new Date());
  return HtmlService.createHtmlOutput('<b>Я все еще жив!</b>');    
}

function compareDate() {
  var docId = 'id_документа'; // id документа
  var groupName = 'Testament'; // название группы контактов
  var lastAccessed = new Date(ScriptProperties.getProperty('lastAccessed')).getDate();  
  var dateDiff = new Date().getDate() - lastAccessed;
  if (Math.abs(dateDiff) > 7) {
    var contacts = ContactsApp.getContactGroup(groupName).getContacts();   
    var doc = DocumentApp.openById(docId);
    for (var i=0; i<contacts.length; i++) {
      var emailField = contacts[i].getEmails();
      for (var j=0; j<emailField.length; j++) {        
        doc.addViewer(emailField[j].getAddress());
      }      
    }
  }
}

Осталось создать ярлык на рабочем столе для того, чтобы не забывать хотя бы раз в неделю заходить по ссылке.
Открываем блокнот, пишем код скрипта создания ярлыка.
Set objShell = WScript.CreateObject("WScript.Shell")
Set objShortCut = objShell.CreateShortcut(objShell.SpecialFolders("Desktop") & "\Testament.url")
objShortCut.TargetPath = "https://script.google.com/macros/s/id_скрипта/exec?pw=12345"
objShortCut.Save()

Сохраняем файл с расширением VBS, выполняем скрипт... вопрос решен.