Чем полезен Google Apps Script. Настрой рассылку, сверстай журнал и не только
В закладки

Google Apps Script — диалект JavaScript для создания автоматизирующих скриптов и расширений для сервисов Google. Появился он в 2009 году и с тех пор стремительно развивается и набирает популярность. Ведь этот язык — уникальное средство автоматизации, которое доступно для использования и может быть полезно практически каждому человеку.
Для меня Google Apps Script — быстрые деньги, секретный трюк таймменджмента и одно из немногих развлечений, ради которых я готова бесплатно сидеть за компом.
В англоязычном интернет пространстве он довольно популярен: 12266 вопросов на StackOverlow. Но в России абсолютное большинство людей не знает о существовании GAS, либо их знания крайне поверхностны. На Хабре всего лишь 13 очень узкоспециальных публикаций с тегом Google Apps Script, а на русскоязычном StackOverflow только 23 вопроса по этой теме.
Я считаю, что это неправильно и ситуацию надо исправлять. Каждый человек должен иметь общее представление о возможностях Google Apps Script и быть морально готовым его использовать. Очень многим людям Google Apps Script может быть полезен. Если не в данный момент, то в обозримом будущем.
Эта статья расскажет вам о том, на что способен Google Apps Script. Надеюсь, что после ее прочтения вы осознаете магическую мощь этого языка и, если не начнете пользоваться им (большинству он нужен n-раз в год, не более), то хотя бы при случае порекомендуете своим знакомым.
С какими сервисами работает Google Apps Script?

На данный момент у языка есть классы и методы для работы со следующими сервисами (для каждого в скобках даны несколько из возможных примеров использования):
- Таблицы (обработка и экспорт данных в таблицах, создание пользовательских функций);
- Документы (создание документов, заполнение их информацией, изменение внешнего вида);
- Формы (генерация форм на основе электронных таблиц);
- Сайты (резервное копирование сайтов, создание новых страниц, сбор информации о комментариях и их редактирование);
- Диск (получение списка файлов на диске и информации о них, создание новых файлов, переименование файлов и распределение по папкам, загрузка на диск новых файлов из интернета);
- Gmail (автоответы, наведение порядка в почтовом ящике, групповые рассылки);
- Календарь (просмотр ближайших событий, создание новых напоминаний, отправка приглашений);
- Контакты (отбор контактов по определенному фильтру, извлечение из них телефонов, email-адресов и прочей информации);
- Карты (создание карт, добавление на них элементов, определение адрес по координатам и наоборот);
- Группы (получение списка групп в которых состоит человек с определенным email-адресом, получение списка пользователей конкретной группы);
- Переводчик (перевод текста с одного языка на другой).
Один автоматизирующий скрипт может работать сразу с несколькими сервисами. К примеру, в случае приближения нужного события в календаре делать групповую рассылку по списку из таблицы. Или генерировать и переводить отчеты на основе данных из форм. Возможны тысячи комбинаций.
Это совсем не сложно

В комментариях иногда пишут: «Я не хочу пользоваться Google Apps Script, так как не хочу заморачиваться с программированием». Но чтобы создавать автоматизации с помощью этого инструмента, практически не требуется умственного напряжения.
Нужно только понимать на абстрактном уровне что означают понятия: условный оператор, цикл, массив, функция, метод, объект, свойство объекта и знать английский язык/уметь пользоваться переводчиком, чтобы читать документацию, так как в ней есть множество готовых примеров кода.
Их можно копировать, комбинировать между собой, редактировать и получать в итоге успешно работающие автоматизации. И это очень быстрый процесс. Попробуйте и у вас все получится! Открываете любое из вышеперечисленных приложений, идете в пункт меню Инструменты -> Редактор скриптов и вперед!
И полезно владельцам iPhone
«Офтоп, опять офтоп» — думает кто-то из читателей. Но тема Google Apps Script очень актуальна для пользователей iOS-устройств. Во-первых, у Google есть множество полезных приложений для iPhone/iPad, которые основаны на сервисах, поддерживающих GAS:
А во-вторых, можно настроить запуск автоматизаций для сервисов Google после выполнения определенных действий на iPhone: создания фотографии или контакта, изменения местоположения, включения страницы в список для чтения. Это возможно благодаря рецептам IFTTT.
IFTTT

C помощью mush-up сервиса IFTTT (IF This Than That) можно настраивать выполнение какого-либо действия (отправка письма, размещения поста в Facebook, создание записи в таблице Google) или в случае проишествия какого-либо события (изменения погоды, достижения какой-либо цели в Fitbit, добавление новости в Pocket). Перед Новым годом на iPhones.ru о нем вышла статья 40 рецептов IFTTT для гаджетов.
IFTTT помогает подружить сервисы Google (внося записи об определенных действиях на диск) с iPhone, Android, термостатом Nest, лампочкой Lifx, кондиционером, «умной» копилкой, фитнесс-браслетом и десятками других гаджетов. А также с социальными сетями, платформами для ведения блогов, rss-каналами, облачным хранилищем и еще кучей других сервисов.
Для людей с фантазией это открывает огромный простор для творчества и улучшения своей жизни.
Триггеры и расписание

Если вы не читали предыдущие статьи про Google Apps Script, то у вас может возникнуть вопрос: каким образом новый файл на диске/строка в электронной таблице, которую добавляет IFTTT, может послужить толчком к выполнению автоматизации?
Если в редакторе скриптов открыть пункт меню Ресуры -> Триггеры текущего проекта, то можно настроить выполнение программ по времени:
- В конкретный день и час;
- Каждую неделю/день/месяц;
- Каждые n минут/часов/дней.
Или при совершении следующих событий:
- Открытие документа;
- Изменение документа (которое может производится с помощью IFTTT);
- Установка дополнения;
- Отправка запроса от веб-приложения (об этом ниже).

Скрипты можно запускать не только непосредственно из редактора, но и создавать для их запуска меню, который будут появляться при открытии документа в дополнение к основному интерфейсу. Вот небольшой пример кода, который показывает как это сделать:
[jscript]
// Устанавливаем триггер "при открытии документа"
function onOpen() <
// Создаем меню
var ui = SpreadsheetApp.getUi();
ui.createMenu(‘Пример меню’)
// Добавляем в него пункт
.addItem(‘Пункт меню’, ‘menuItem1’)
.addSeparator()
// Создаем подменю и добавляем в него пункт
.addSubMenu(ui.createMenu(‘Подменю’)
.addItem(‘Пункт подменю’, ‘menuItem2’))
.addToUi();
>
// Описываем функцию, которая будет запускаться при клике на пункт основного меню
function menuItem1() <
SpreadsheetApp.getUi()
.alert(‘Вы нажали на пункт меню’);
>
// Описываем функцию, которая будет запускать при клике на пункт подменю
function menuItem2() <
SpreadsheetApp.getUi()
.alert(‘Вы нажали на пункт подменю’);
>
[/jscript]
Веб-приложения
Еще с помощью Google Apps Script можно создавать полноценные веб-приложения с графическим интерфейсов на HTML/встраивать Google Apps Script на свои сайты. Простейшие пример: сделать на сайте форму загрузки файлов с компьютера на Google Drive или дашборд для мониторинга числа ответов на форму.
Парсинг сайтов и REST API
Еще на GAS можно делать http-запросы и обрабатывать их результаты. С помощью класса UrlFetchApp можно извлекать данные с веб-страниц и парсить XML/JSON ответы REST API сервисов.
К примеру, у нас на iPhones.ru есть программа, которая на входе получает список ссылок на AppStore из таблицы, а на выходе выдает блоки кода с информацией о приложениях и ссылками на иконки (картинки сохраняются на Google Диск под специальными названиями) и потом оттуда загружаются в админку WordPress.
Для чего я сама использую Google Apps Script

Когда я работала в ][, то у нас была старая тормознутая система для сведения бумажного номера, написанная на Delphi в лохматом году. Чтобы было удобнее, я сделала аналог в Google Документе. На GAS написаны функции для окраски строк в зависимости от этапа, на котором находится материал, нумерации страниц, подсчета незаполненных полос и генерации отчета о количестве материалов, которые находятся на каждом этапе (почти два десятка функций). Пожалуй, это самый масштабный пример личного использования GAS.
Если мне нужно спарсить несколько веб-страниц (не 2000, а 10-100), то я создаю Google Таблицу и открываю редактор скриптов. Это гораздо более быстрый и комфортный способ (для небольших объемов), чем использование curl (прежде всего из-за наглядности). Очень удобно, когда результаты парсинга можно сразу посмотреть в таблице и обернуть их в html-код. Чуть выше я приводила пример, как это может пригодиться автором статей про iOS-приложения.
И еще я регулярно использую GAS для создания групповых рассылок. Написать пару строк кода легче (это занимает минуту), чем отправить 30-40 писем (не говоря уже о больше объеме), настройке автоответов и отложенный отправки писем по условию.
Плюс еще целый ряд мелких одноразовых задач (в основном связанных с выгрузкой данных из почты/диска и работой с таблицами) были успешно решены с помощью GAS. Этот инструмент как швейцарский нож, который не надо носить с собой, так как он всегда на месте.
Но гораздо больше пользы с помощью Goole Apps Script я принесла не самой себе, а заказчикам скриптов (владельцам очень малого бизнеса), которым они были нужны, чаще всего, для обработки данных в таблицах или автоматизации продаж/оповещений клиентов.
Материалы про Google Apps Script
Все что нужно для начала экспериментов есть в официальной документации и справочнике. А описание готовых рецептов на русском языке можно найти в статья на iPhones.ru:
В закладки
Пишем скрипты для автоматизации работы с приложениями Google
Google Apps Script — это язык для автоматизации работы с онлайн-приложениями, появившийся в 2009 году. Его основа — классический JavaScript, обогащенный расширениями для работы с сервисами Google. После прочтения этой статьи ты овладеешь основами использования этого языка, выучишь пару приемов манипуляции с почтой и документами, а также получишь представление о необозримых возможностях Google Apps Script.
Основы использования
Начать писать Google Apps скрипты очень просто. Первым делом надо открыть редактор скриптов в любом приложении, взаимодействие с которым будем автоматизировать. В Google Docs он находится в меню «Инструменты -> Редактор скриптов». Далее надо выбрать проект, внутри которого будет располагаться скрипт (см. рис. 1). В открывшемся окне пишем код:

Рис. 1. Стартовое окно редактора скриптов
Другие статьи в выпуске: 
Хакер #187. Обходим Blizzard Warden
Декларированную функцию можно запускать из «Инструменты -> Управление скриптами» или сделать для нее отдельную кнопку. Для этого надо прописать еще одну функцию:
Теперь в нашем меню есть пункт под названием ExampleFunc, при клике на который открывается однострочное подменю «Моя единственная функция».
Декларированные функции можно использовать в формулах, которые вводятся внутрь ячеек электронных таблиц (см. рис. 3). Теперь перейдем к более практически полезным примерам.
Рис. 2. Редактор кода, заполненный автогенерируемым сырьевым материалом для работы с электронной таблицей
Рис. 3. Вызов пользовательской функции с аргументом
WARNING
Перед запуском скрипта не забудь сделать резервную копию важной информации. Действия, выполненные GS, нельзя отменить нажатием <Ctrl + Z>.
Работа с Google Docs
Когда встает задача автоматизации работы с офисными документами, первым делом на ум приходит VBA, одно упоминание которого оказывает на многих тотальное антиэкстатическое воздействие, вызывая болезненные воспоминания из школьного и университетского прошлого. Google Script однозначно удобнее и доступнее для понимания. Особенно для веб-разработчиков, ведь это же родной, привычный и любимый JS! Разберем пару примеров скриптов для Google Docs. Приведенный код заполняет левую верхнюю ячейку первого листа активной таблицы:
А этот код создает копию текстового документа и кладет его в определенное место:
А вот так можно провести замену строк в текстовом документе:
Следующий пример кода подсвечивает определенные слова в тексте:

Рис. 4 Вот здесь можно узнать ID документа
Если пишешь скрипт, включающий в себя функции поиска/замены текста, помни о том, что GS поддерживает регулярные выражения.
Работа с почтой
Письмо отправляется одной короткой строкой: MailApp.sendEmail(«irairache@gmail.com», «тема письма», «текст письма») Если добавить к ней еще немного кода, то можно организовать рассылку по списку адресов из электронной таблицы (исходник ищи в приложении):
Помимо рассылок, с помощью GS можно производить автоматизированную обработку содержимого почтового ящика. Пример — удаление всех писем от адресата, на которого ты обиделся:
WARNING
Имей в виду, что Gmail не только защищает от входящего спама, но и ограничивает рассылку исходящего. Больше 500 писем за сутки с помощью Google Apps Script не выйдет.
Работа с Google Translate
С помощью Google Apps Script можно переводить текстовые строки с одного языка на другой. Пример:
Коды для языков можно посмотреть в адресной строке сервиса Google Translate.
Если выделить код и нажать <Shift + Tab>, то магическим образом расставятся все отступы для условий, циклов, объявленных функций и всех других мест, где им положено быть.
Работа с Google Drive
Google Apps Script может работать с файлами пользователя, размещенными на Google Drive. Этот скрипт выводит в консоль имена всех файлов пользователя:
К файлам можно применять несколько десятков различных методов. Вот некоторые из них:
- addEditor(«email пользователя») — наделяет пользователя правами на редактирование файла;
- getOwner() — узнать владельца файла;
- makeCopy(«имя», «путь») — создать копию файла;
- getLastUpdated() — возвращает пользователя, который внес последнее изменение.
Работа с Google Contacts
Адресная книга также может быть подвергнута автоматизированной обработке. Приведенный ниже код копирует все контакты из группы «Редакция» в лист Google Spread Sheet:
Работа с Google Tasks
С помощью Google Apps Scripts можно работать с сервисом Google Task — создавать новые задачи и парсить уже имеющиеся.
Этот код создает новое дело в списке:
А таким образом можно вывести список нумерованных задач в консоль:
Задачи можно перемещать из одного списка в другой с помощью метода move, дополнять с помощью метода update и удалять с помощью метода delete.
Всего есть несколько десятков методов для работы с задачами. Полный их список доступен вGoogle Apps Script References для Google Tasks.
Работа с календарем
Создавать события в календаре тоже можно автоматически (и так же, как в случае с рассылкой, формировать информацию о них из строк таблицы). Код для создания события:
Формы обмена скриптами
Есть два основных способа поделиться своим скриптом с другим человеком (без учета непосредственного обмена исходным кодом) — ссылка и гаджет. В первом случае все просто: пользователь получает ссылку на программу, переходит по ней, и скрипт немедленно начинает выполняться (при условии, что человек авторизирован в своем Google-аккаунте).
Гаджет — это приложение-контейнер, которое размещается на веб-странице и исполняет определенные функции. Примеры: мини-блок в углу страницы с прогнозом погоды или календарем. Чтобы поместить Google Script внутрь гаджета, необходимо в меню редактора скриптов выбрать пункт «Publish -> Deploy as web app».
А если нажать <Ctrl + Space>, то включится режим автозавершения, то есть редактор будет дописывать код за тебя.
События
Можно настроить скрипт так, чтобы он выполнялся после определенного события. К примеру, после открытия/редактирования электронной таблицы или отправки данных формы. Подробности о работе с Events
Работа с базами данных
Для этого существует сервис для работы с базами данных Google Cloud SQL. По сути — классический MySQL в облаке. Может взаимодействовать с Google Apps Script по стандарту Java Database Connectivity. Вот пример кода, который производит чтение записей из таблицы:
Стоимость использования сервиса — 88 долларов в год за 10 Гб свободного места. С другими базами данных Google Apps Script, к сожалению, работать не может. Если ты запланировал написать скрипт, который должен взаимодействовать с данными, не стоит сразу расстраиваться или истощать свой бюджет пожертвованиями на закупку квадроциклов для жителей Кремниевой долины. Есть два способа выкрутиться из этой ситуации:
- первый — хранить данные в виде таблиц на Google Drive;
- второй — разместить базу на стороннем сервере, на нем же разместить
<и т. д.>скрипт, который будет выполнять к ней запрос и возвращать ответ в формате JSON или XML, а его, в свою очередь, подвергать парсингу внутри GS. Подробности о Google Cloud SQL
Приложения, с которыми может взаимодействовать Google Apps Script
Я думаю, что далеко не каждый из наших читателей успел опробовать все онлайн-сервисы Google. В целях расширения кругозора и стимуляции творческого воображения приведем краткий обзор возможностей приложений, работу которых можно автоматизировать с помощью Google Apps Script.
- Google Mail — почтовый клиент. Наиболее интересна в нем возможность отправлять письма людям, адреса которых неизвестны. Для этого надо включить настройку «Отправлять письма пользователям Google+» и ввести имя и фамилию получателя в поле «Кому».
- Google Calendar — органайзер. Самое удобное в нем — возможность отправки SMS-уведомлений о событиях на номера российских операторов.
- Google Contacts — приложение для хранения контактов. Самый цимес его в том, что если ты случайно синхронизируешь свой список контактов с новым смартфоном и все имена сотрутся, то сможешь попросить у Google резервную копию предыдущей версии, которая навечно сохранена в его архивах.
- Google Drive — облачное хранилище данных. 15 Гб, на которых также размещаются данные всех других приложений, доступны бесплатно.
- Google Maps — онлайн-карты. Жителям СНГ повезло, у них есть альтернативный инструмент для построения маршрутов и просмотра панорам улиц — Яндекс.Карты. Для жителей большинства других территорий альтернатив нет. Google Maps — единственная всемирная картографическая система, позволяющая искать населенные пункты, вводя названия на языке государства, в котором они находятся. Допустим, не Kotlas, а Котлас, не Vagharshapat, а Վաղարշապատ.
- Google Docs — онлайн-редактор офисных документов. Во время написания статьи этот сервис совершил мега-прорыв — появилась возможность редактировать документы, созданные в Microsoft Office. Это произошло после интеграции сервиса с функционалом приложения Quickoffice. Ради интереса попробовала отредактировать в Google Docs пояснительную записку к диплому (как пример документа с простейшим форматированием). Преобразование docx в гугл-формат пришлось ждать около минуты, и внешний вид текста явно отличался от оригинала.
- Google Forms позволяет создавать формы для сбора различных данных (онлайн-опрос, страницу регистрации на событие, обратную связь для сайта и прочее), которые можно привязать к таблицам в различных форматах (HTML, CVS, TXT, PDF, RSS, XLS, ODF). Собранные данные хранятся на Google Drive.
- Google Sites — бесплатный хостинг (100 Мб) с предельно ограниченным функционалом и собственной wiki-разметкой. Полнофункциональный HTML, а также CSS и JS недоступны.
По старой доброй традиции, которой уже почти три месяца, мы выложили несколько исходничков на GitHub:
- autodeletemail.gs — удаляет письма, с момента получения которых прошло n-ное количество дней;
- snoozeemails.gs — скрипт для повторной отправки самому себе прочитанных писем через определенный промежуток времени;
- sendsmsaboutemails.gs — настраивает отправку SMS в случае получения писем, соответствующих определенным критериям. Перед его использованием надо указать свой номер телефона Google Calendar;
- savemailtopdfindrive.gs — сохраняет содержимое письма в файлах на Google Drive;
- fromcalendartospreadsheet.gs — записывает информацию из календаря в электронную таблицу;
- sendmailsfromspreadsheet.gs — рассылает письма по списку адресов из электронной таблицы;
- createdocsfromspread.gs — генерирует текстовые документы из данных электронной таблицы.
Advanced Google Services
У Google есть множество API для разработчиков, которые можно внедрять в программы, написанные на Google Apps Script. Для этого надо подключить в редакторе скриптов эту возможность (в меню Resources, далее Advanced Google services). После этого можно будет задействовать возможности следующих сервисов:
Фишинг при помощи Google Apps Script
Для того чтобы фишинговая ссылка не была заблокирована на почтовом сервере, мошенники применяют редиректы через Google Apps Script.

Чтобы выманить у сотрудников компаний учетные данные от корпоративной почты, злоумышленникам в первую очередь нужно обмануть антифишинговые решения на почтовых серверах. Нередко для этого они пытаются использовать легитимные веб-сервисы: те, как правило, имеют заслуживающую доверия репутацию и не вызывают подозрений у почтовых фильтров. В последнее время в качестве одного из таких сервисов мошенники все чаще используют Google Apps Script.
Что такое Apps Script и как его используют злоумышленники
Apps Script — скриптовая платформа Google, построенная на базе Java Script. По задумке авторов, она служит для автоматизации задач как в продуктах компании (например, аддонов для Google Docs), так и в сторонних приложениях. По большому счету, это сервис, позволяющий создавать скрипты и исполнять их в инфраструктуре Google.
В почтовом фишинге этот сервис используют, по сути, для редиректа. Вместо того, чтобы вставлять непосредственно URL вредоносного сайта, злоумышленники зашивают в текст ссылку на скрипт. Таким образом они решают сразу несколько задач:
- Для антифишингового решения на почтовом сервере письмо выглядит как нормальное послание с гиперссылкой на легитимный сайт Google с нормальной репутацией.
- Такая схема позволяет эксплуатировать фишинговый сайт дольше, поскольку его URL не светится в письмах, а следовательно, не виден большей части защитных решений.
- Схема получает определенную гибкость — при необходимости скрипт можно поменять (на случай, если сайт все-таки будет забанен вендорами защитных решений), а кроме того, скрипт позволяет экспериментировать с доставкой контента (например, посылать жертву на разные языковые варианты сайта в зависимости от региона).
Пример использования уловки с Google Apps Script
Все, что нужно злоумышленникам — заставить пользователя кликнуть по ссылке. В последнее время чаще всего в качестве повода используют «переполнение почтового ящика». В теории выглядит логично — место, отведенное под почтовый ящик жертвы, закончилось, и нужно либо удалять старые письма, либо запрашивать расширение квоты.

Типичное фишинговое письмо, использующее уловку с переполненным ящиком
На практике злоумышленники чаще всего действуют достаточно небрежно и оставляют явные признаки мошенничества, которые легко может заметить даже человек, не знакомый с реальным форматом нотификаций от почтового клиента:
- Письмо пришло вроде бы от Microsoft Outlook, однако почтовый адрес отправителя имеет какой-то совершенно посторонний домен. В легитимном письме так не бывает — нотификация о переполнении ящика приходит от сервера exchange, работающего в инфраструктуре вашей компании. Плюс, если приглядеться, то заметно, что имя отправителя Microsoft Outlook написано без пробела и с символом 0 вместо буквы O.
- Самое главное: если подвести мышку к ссылке Fix this in storage settings, то вы увидите реальный адрес:

Ссылка на Google Apps Script в письме

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