вторник, 2 сентября 2014 г.

Первый Google Apps Script

Уже достаточно продолжительное время сервисы Google являются одним из моих основных рабочих инструментов, поэтому неудивительно, что возникло желание разобраться, как можно ещё "дотюнить" их под свои нужды. Не то, чтобы у меня была какая-то критическая необходимость в определённых, ещё не реализованных, функциях, но добавить немного автоматизации для нескольких рутинных операций совсем не помешало бы.

Для написания своих скриптов к Google Apps существует специальный клон JS - Google Apps Script. Его использование не требует установки дополнительного ПО. Писать код, отлаживать и запускать можно прямо в браузере.

Для создания скрипта нужно открыть в браузере Google Disk, нажать кнопку "CREATE" и выбрать в выпадающем списке пункт "Script". Если такого пункта нет, то нужно подключить приложение Google Apps Script к диску. Делается это с помощью диалога управления приложениями, запускающегося из меню настроек диска. В процессе создания нового скрипта будет предложено выбрать один из готовых шаблонов для популярных приложений. Можно поэкспериментировать с шаблонами, а можно выбрать "Blank Project". Особого смысла в использовании шаблонов я не увидел.

В качестве "пробы пера" напишем скрипт, который будет запускаться раз в час, проверять папку "tmp" на гугл-диске и, если в папке содержатся файлы zip-архивов, будет распаковывать их в эту же папку.

Назовём проект "autounzip". Так же назовём и функцию, которая будет содержать весь код, реализующий задуманное.

function autounzip() {
  
  // Проверяем все папки 'tmp' на гугул-диске
  var folders = DriveApp.getFoldersByName('tmp');
  while (folders.hasNext()) {
    var folder = folders.next();

    // Ищем все сохранённые zip-архивы
    var contents = folder.searchFiles('mimeType="application/zip"');
    while (contents.hasNext()) {
      var fileContents = contents.next();
      var unzipblobs = Utilities.unzip(fileContents.getBlob());
      for (var i = 0; i < unzipblobs.length; i++) {        
        folder.createFile(unzipblobs[i]);
      }
    }
  }    
}

После запуска скрипта появится сообщение "Authorization required". Нажимаем кнопку "Continue". В открывшемся окне нажимаем "Accept". Этими действиями говорим гуглу, что мы не против, если наш скрипт получит доступ к данным диска. После разрешения доступа скрипт появится в списке подключенных к диску приложений.

Теперь нужно добиться, чтобы написанный скрипт запускался каждый час. В меню документа выбираем пункт "Resources\Current project's triggers". Добавляем новый триггер с параметрами Run - autounzip, Events - Time-driven, Hour timer, Every hour. Сохраняем триггер. Всё. Осталось дождаться автоматического запуска этого скрипта и проверить результат его работы.

Официальный скринкаст от Google с созданием простенького скрипта можно посмотреть на ютубе.