Как развернуть Google Sheet как веб-приложение с помощью Google API - PullRequest
1 голос
/ 13 мая 2019

У меня небольшая проблема с Google Sheets API

У меня есть Google Sheet Document на моем GDrive. И я могу работать с ним, используя Google Sheets API и Google Drive API. Так что я могу переместить его, обновить или сделать копии.

Моя задача: 1. сделайте копию этого документа (я могу это сделать) 2. опубликуйте эту копию как веб-приложение. Таким образом, каждая копия имеет doGet() функцию внутри, поэтому она может быть опубликована как веб-приложение. Вручную это можно сделать так: Опубликовать -> Развернуть как веб-приложение .. Но я не могу найти API для этого. enter image description here

  1. Получить URL опубликованного сервиса

UPDATE

Я читаю документацию projects.deployments.create И я попытался создать новое развертывание (перед этим я должен создать версию), но у моего нового deployemnt нет доступа в Интернет, нет URL-адреса и т. Д., Если я проверяю через projects.deployments.list показывает:

{
  "deploymentId": "AKfycbxVfuoeIQmumgy_Efhw12NCcqE7vqosYoxbDiKj5CT4mL_GbtybXsh1ppMIX22wQX20",
  "deploymentConfig": {
    "scriptId": "1zfjbALVe0jGbZCtqjFR0RP2-O___hR7MtAlx3biuJGXKsrKh3y1W0hMT",
    "versionNumber": 1,
    "manifestFileName": "appsscript",
    "description": "v1"
  },
  "updateTime": "2019-05-13T22:33:23.760Z"
}

И если я сделаю это вручную через веб-интерфейс, это будет выглядеть как

{
  "deploymentId": "AKfycbyn3smPKxJcZwsm9SzSTtzNCAcWJzf1OVs4WTslvHo",
  "deploymentConfig": {
    "scriptId": "1zfjbALVe0jGbZCtqjFR0RP2-O___hR7MtAlx3biuJGXKsrKh3y1W0hMT",
    "manifestFileName": "appsscript"
  },
  "updateTime": "1970-01-01T00:00:00Z",
  "entryPoints": [
    {
      "entryPointType": "WEB_APP",
      "webApp": {
        "url": "https://script.google.com/macros/s/AKfycbyn3smPKxJcZwsm9SzSTtzNCAcWJzf1OVs4WTslvHo/exec",
        "entryPointConfig": {
          "access": "ANYONE_ANONYMOUS",
          "executeAs": "USER_DEPLOYING"
        }
      }
    }
  ]
}

1 Ответ

1 голос
/ 14 мая 2019

Необходимо использовать API скриптов приложений.Вы можете использовать REST API и сделать запрос UrlFetchApp.fetch(url).Это двухступенчатый процесс.Сначала вы должны создать новый файл скрипта приложения, затем вы должны обновить этот новый файл скрипта приложения новым содержимым в файле манифеста.Файл манифеста должен иметь свойство для webapp, которое определяет тип развертывания.

Код, вероятно, будет выглядеть примерно так:

function deployA_project() {
  var id, OAuthToken,options,payload,rtrn,url;

  id = ScriptApp.getScriptId();//Get the project ID of this script project
  Logger.log('id: ' + id)

  url = 'https://script.googleapis.com/v1/projects/' + id + '/deployments';//For REST

  OAuthToken = ScriptApp.getOAuthToken();

  payload = {
    "versionNumber": number,
    "manifestFileName": string,
    "description": string
  }

  options = {
    "method" : "POST",
    "muteHttpExceptions": true,
    "headers": {
      'Authorization': 'Bearer ' +  OAuthToken
    },
    "contentType": "application/json",
    "payload": JSON.stringify(payload)
  };

  rtrn = UrlFetchApp.fetch(url,options);

  Logger.log('rtrn: ' + rtrn)


}

См. Документацию: projects.deployments.create

Способ развертывания проекта сценария приложений определяется в файле манифеста:

{
  "timeZone": "America/New_York",
  "dependencies": {
  },
  "webapp": {
    "access": "MYSELF",
    "executeAs": "USER_DEPLOYING"
  },
  "exceptionLogging": "STACKDRIVER"
}

API не предоставляет параметр конфигурации для созданиятип развертывания.Таким образом, превращение развертывания в веб-приложение выполняется путем обновления файла манифеста.Это должен быть двухэтапный процесс.Сначала вы создаете новый файл проекта, а затем обновляете его с помощью объекта JSON содержимого файла.Вы можете назначить содержимое файла манифеста с именем "appsscript.json"

Содержимое должно быть в формате JSON в следующем формате:

{
  "scriptId": "scriptId",
  "files": [{
    "name": "appsscript",
    "type": "JSON",
    "source": "{\"timeZone\":\"America/New_York\", \"webapp\": {\"access\": \"MYSELF\",\"executeAs\": \"USER_DEPLOYING\"},\"exceptionLogging\":\"STACKDRIVER\"}",
    "lastModifyUser": {
      "name": "MyName",
      "email": "example@gmail.com",
    }
  }]
}

Вам необходимо сделать другой запрос к другомуurl, и запрос должен быть запросом PUT, чтобы сделать обновление:

  url = 'https://script.googleapis.com/v1/projects/' + id + '/deployments/' + {deploymentId}

  var newContent = {
    "scriptId": "scriptId",
    "files": [{
      "name": "appsscript",
      "type": "JSON",
      "source": "{\"timeZone\":\"America/New_York\", \"webapp\": {\"access\": \"MYSELF\",\"executeAs\": \"USER_DEPLOYING\"},\"exceptionLogging\":\"STACKDRIVER\"}",
      "lastModifyUser": {
        "name": "MyName",
        "email": "example@gmail.com",
      }
    }]
  }

  var requestBody = {};
  requestBody.files = newContent;

  requestBody.deploymentConfig = {
      "scriptId": string,
      "versionNumber": number,
      "manifestFileName": string,
      "description": string
    }

  options = {
    "method" : "PUT",
    "muteHttpExceptions": true,
    "headers": {
      'Authorization': 'Bearer ' +  OAuthToken
    },
    "contentType": "application/json",
    "payload": JSON.stringify(requestBody)
  };

  rtrn = UrlFetchApp.fetch(url,options);

  Logger.log('rtrn: ' + rtrn)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...