Есть ли способ выполнить скрипт Google Apps из PostgreSQL или из Bash? - PullRequest
0 голосов
/ 19 февраля 2019

У меня есть сотни электронных таблиц Google, в которых есть один и тот же скрипт.Я хотел бы выполнить конкретную таблицу Google по идентификатору либо из PostgreSQL, либо из Bash.Есть ли простой способ выполнения скриптов?Я предпочитаю не изучать Python.

Например, у меня есть идентификатор электронной таблицы 1HGo8V-P5S-z4oCUiAKULrkZRFlzRHEalJqUFLiP, и я хотел бы выполнить функцию Refresh() через Bash или Postgresql.

Является ли APIединственный маршрут?https://developers.google.com/apps-script/api/how-tos/execute

До сих пор я думал о том, чтобы создать исполняемый файл python и выполнить его из функции postgresql.https://developers.google.com/apps-script/api/quickstart/python

Редактировать: Похоже, что если я хочу выполнить какой-либо сценарий приложения, для каждой электронной таблицы потребуется проект Google (созданный вручную).Должен быть более простой способ сделать это, вручную создавать проект для каждой таблицы не имеет смысла.

Ссылка: https://developers.google.com/apps-script/api/how-tos/execute

Вызываемый скрипт и вызывающее приложение должны совместно использовать проект Cloud Platform.

Решение: Развертывание веб-приложений - это решение, с которым я в итоге справился благодаря @ Tanaike

1 Ответ

0 голосов
/ 19 февраля 2019
  • Вы хотите выполнить связанный с контейнером сценарий Spreadsheet.
  • Вы хотите выполнить сценарий с локального ПК или вне Google.
  • Вы хотите выполнить сценарийиз таблицы ID.

Если мое понимание правильное, как насчет этого ответа?

Получение идентификаторов проекта сценария, связанного с контейнером:

Я думаю, что этосложная проблема в вашей ситуации.На текущем этапе нет методов получения идентификатора проекта сценария, привязанного к контейнеру, из родительских Документов Google (в данном случае это электронная таблица.).

  • Об этом уже сообщалось вhttps://issuetracker.google.com/issues/111149037 как запрос функции.Но, к сожалению, это еще не достигнуто.
  • Таким образом, идентификаторы проекта необходимо извлекать вручную.
  • Например, вы можете получить идентификаторы проекта в Developer Hub.
    • Когда вы выбираете проект, вы можете увидеть идентификатор проекта по URL-адресу https://script.google.com/home/projects/### projectId ###.

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

Выполнение сценария:

Я думаю, что есть 2 шаблона для выполнения сценария.Вы можете выбрать один из 2 образцов.

1.Используйте метод scripts.run в Apps Script API

  • Это также упоминается в вашем вопросе.
  • Функция в скрипте выполняется с использованием API.
  • Вытребуется для создания только сценария Python на локальной стороне.
  • В этом случае токен доступа, полученный процессом OAuth2, требуется на локальной стороне.

Я думаю, что в этом шаблонеСценарий может быть простым.

2.Использование веб-приложений

  • При доступе к веб-приложениям выполняется функция в сценарии.
    • В этом случае для выполнения сценария он использует scripts.run в Apps Script API из-за большого количества таблиц в вашей ситуации.Когда пользователь обращается к веб-приложениям, сценарий электронной таблицы запускается сценарием веб-приложений.Поскольку используется Google Apps Script, маркер доступа можно легко получить.
  • Вам необходимо создать скрипт Python для доступа к веб-приложениям на локальной стороне и Google Apps Script в Google.Side (веб-приложения).
  • В этом случае вы можете запустить скрипт с токеном доступа и без него на локальной стороне.

Я думаю, что в этом шаблоне методдоступ может быть простым.

Ссылки:

Если это не то, что вам нужно, я прошу прощения.

Редактировать:

Из обсуждений я подумал, что в случае вашего сценария Refresh() подходит следующий поток.1. Разверните веб-приложения, используя скрипт Refresh(), как API.2. Вызвать API, используя скрипт Python и curl.Таким образом, скрипт веб-приложений запускается, и вы можете отобразить результат Refresh() для всех таблиц.

Пример сценария:

function doGet() {
  var spreadsheets = ["spreadsheetId1", "spreadsheetId2",,,]; // Please set spreadsheet ID here.
  for (var i = 0; i < spreadsheets.length; i++) {
    SpreadsheetApp.openById(spreadsheets[i])
      .getSheetByName("Sheet1") // If you want to also put values to other sheet, please modify this.
      .getRange(1, 1)
      .setValue(new Date());
  }
  return ContentService.createTextOutput("Done.");
}
  • при развертывании веб-приложений, экран авторизации открыт.Но эта авторизация выполняется только один раз.

Развертывание веб-приложений:

Прежде чем отправлять запрос в веб-приложения, разверните веб-приложения.

  • НаРедактор сценариев
  • Публикация -> Развертывание как веб-приложение
    1. Создание новой версии проекта
    2. В поле "Выполнить приложения" выберите "Я"
    3. В поле «Кто имеет доступ к приложению» выберите «Любой, даже анонимный»
    4. Нажмите «Развернуть»
    5. Копировать «URL текущего веб-приложения»
    6. Нажмите «ОК»

Пример скручивания:

Если вы используете команду скручивания, используйте следующее.

$ curl -L "https://script.google.com/macros/s/#####/exec"

Примечание:

  • Когда вы изменили скрипт, пожалуйста, повторно разверните Веб-приложения как новую версию.Таким образом, последний скрипт отображается в веб-приложениях. Это важный момент.

Примечание:

  • Также вы можете использовать идентификаторы электронных таблиц для запросаи вы можете напрямую включить их в веб-приложения.(В примере сценария используется последний.)
    • Если вы хотите использовать идентификаторы электронной таблицы для запроса, будьте осторожны.Число рабочих для веб-приложений должно быть меньше 30. Ref
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...