Обновить номер версии библиотеки с помощью Script API - PullRequest
1 голос
/ 13 марта 2020

Моя конечная цель - обновить номер версии библиотеки, включенной в набор связанных скриптов приложений Google. Приведенный ниже код является упрощенной версией, которая получает содержимое скрипта только как JSON. У меня проблемы с доступом к значениям ключа, который указывает на объект. Для простоты код только пытается извлечь часовой пояс, который не является таким же вложенным, как номер версии библиотеки.

Для запуска кода необходимо включить две области, прокомментированные в приведенном ниже сценарии, и создать проект облачной платформы с включенным Script API. Затем добавьте номер проекта для GCP, который вы создали в разделе Ресурсы-> Облачная платформа.

function getScriptData() {
  //scopes needed for this script
  //https://www.googleapis.com/auth/script.projects
  //https://www.googleapis.com/auth/script.external_request

  var scriptID = ScriptApp.getScriptId();

  var url = 'https://script.googleapis.com/v1/projects/' + scriptID + '/content';
  var token = ScriptApp.getOAuthToken();

  var options = {
    'method' : 'get',
    'headers' : {'Authorization':'Bearer '+  token},
    'muteHttpExceptions' : true
  };

  var response = UrlFetchApp.fetch(url, options);
  var json = JSON.parse(response.getContentText());

  Logger.log(json.files[1].source);
  Logger.log(json.files[1].source.timeZone) //returns null instead of time zone

  var source = JSON.parse(json.files[1].source);
  Logger.log(source.timeZone); //this works

  //looking to modify JSON like below
  //json.files[1].source.timeZone = 'America/New_York';

  //then upload JSON to modify script
  /*
  var options = {
    'method' : 'put',
    'headers' : {'Authorization':'Bearer '+  token},
    'contentType' : 'application/json',
    'payload' : json
  };

  var response = UrlFetchApp.fetch(url, options);
  */
}

1 Ответ

2 голосов
/ 14 марта 2020
  • Вы хотите изменить версию установленной библиотеки с помощью API скриптов Google Apps.
  • Вы уже смогли получить и поместить значения для проекта скрипта Google Apps с помощью API скриптов Google Apps.
  • Вы хотите добиться этого с помощью Google Apps Script.

Если мое понимание верно, как насчет этого ответа? Пожалуйста, подумайте об этом как об одном из нескольких возможных ответов.

Точки модификации:

  • Чтобы изменить версию библиотеки, измените json.files[1].source, проанализированный как JSON object.
  • В этом случае json.files[1].source требуется указывать в качестве строкового типа. Поэтому после обновления версии до объекта, обработанного json.files[1].source, установите для типа строки json.files[1].source.
  • Если вы хотите использовать библиотеку путем изменения версии, установите developmentMode как false. Таким образом, вы можете использовать каждую версию.
  • Когда вы помещаете измененную полезную нагрузку, пожалуйста, измените 'payload' : json на 'payload' : JSON.stringify(json).

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

Модифицированный скрипт:

function getScriptData() {
  var libraryId = "###";  // Please set the library ID you want to change the version.
  var updateVersion = "2";  // Please set the changed version. In this case, the version is changed to "2".

  var scriptID = ScriptApp.getScriptId();
  var url = 'https://script.googleapis.com/v1/projects/' + scriptID + '/content';
  var token = ScriptApp.getOAuthToken();
  var options = {
    'method' : 'get',
    'headers' : {'Authorization':'Bearer '+  token},
    'muteHttpExceptions' : true
  };
  var response = UrlFetchApp.fetch(url, options);
  var json = JSON.parse(response.getContentText());

  // Here, json.files[].source is modified.
  json.files.forEach(function(file, i) {
    if (file.name == "appsscript") {
      var source = JSON.parse(file.source);
      if (source.hasOwnProperty("dependencies") && source.dependencies.hasOwnProperty("libraries")){
        source.dependencies.libraries = source.dependencies.libraries.map(function(e) {
          if (e.libraryId == libraryId) {
            e.version = updateVersion;
            e.developmentMode = false;
          }
          return e;
        });
        json.files[i].source = JSON.stringify(source, null, "  ");
      }
    }
  });

  // Modified json object is put to the Google Apps Script.
  var options = {
    'method' : 'put',
    'headers' : {'Authorization':'Bearer '+  token},
    'contentType' : 'application/json',
    'payload' : JSON.stringify(json)
  };
  var response = UrlFetchApp.fetch(url, options);
  Logger.log(response)
}

Примечание:

  • Это простой модифицированный скрипт. Поэтому, пожалуйста, измените это для вашей реальной ситуации.

Ссылки:

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

...