Автономный скрипт Google Apps для использования API скриптов Google Apps для обновления многих связанных скриптов - PullRequest
0 голосов
/ 01 октября 2018

Я пытаюсь написать автономный скрипт Google Apps, который использует API скриптов Google Apps для обновления содержимого связанного скрипта многих листов Google.

У меня есть идентификаторы листовпримерно 200 листов Google, которые я создал из шаблона.Я хотел бы обновить содержимое проекта связанных скриптов на каждом из этих листов, чтобы оно совпадало с набором мастер-скриптов.

Я застрял с ошибкой аутентификации при использовании urlFetchApp для получения содержимогосвязанный скрипт одного листа в качестве теста.Ошибка выглядит так:

Request failed for
https://script.googleapis.com/v1/projects/<SCRIPTID>/content returned code 401. 
Truncated server response: { "error": { "code": 401, 
"message": "Request is missing required authentication credential.
Expected OAuth 2 access token, login cookie ... 
(use muteHttpExceptions option to examine full response) (line 34, file "AddScriptsToSheets")

Используемая мной тестовая функция выглядит следующим образом:

function getSheetScriptContent(sheetId) { 
  var sheet = SpreadsheetApp.openById(sheetId);
  // Make a POST request with a JSON payload.
  // Make a GET request and log the returned content.
  var url = PROJECTS_GET_CONTENT_URL.format(sheetId);
  var response = UrlFetchApp.fetch(url);
  Logger.log(response.getContentText());
}

Я думаю, что Библиотека OAuth2 может быть полезна в этом случае.Я просто не знаю, как его использовать.Может ли кто-нибудь указать мне правильное направление?

1 Ответ

0 голосов
/ 02 октября 2018

Если вы владеете всеми файлами, вам не нужно использовать библиотеку OAuth или какой-либо специальный код для получения токена доступа.Вы можете получить токен доступа из класса ScriptApp.

var theAccessTkn = ScriptApp.getOAuthToken();

Код для перезаписи файла скрипта приложения:

function updateContent(scriptId,content,theAccessTkn) {
//try{
  var options,payload,response,url;

  if (!content) {
    //Error handling function
    return;
  }

  if (!theAccessTkn) {
    theAccessTkn = ScriptApp.getOAuthToken();
  }

  //https://developers.google.com/apps-script/api/reference/rest/v1/projects/updateContent
  url = "https://script.googleapis.com/v1/projects/" + scriptId + "/content";

  options = {
    "method" : "PUT",
    "muteHttpExceptions": true,
    "headers": {
      'Authorization': 'Bearer ' +  theAccessTkn
     },
    "contentType": "application/json",//If the content type is set then you can stringify the payload
    "payload": JSON.stringify(content)
  };

  response = UrlFetchApp.fetch(url,options);
  response = JSON.parse(response);//Must be parsed even though it shows as coming back as an object

  //Logger.log('typeof response: ' + typeof response)

  //Logger.log('response 29 in file GS_Update: ' + JSON.stringify(response).slice(0,45))

  return response;
//} catch(e) {
  //Logger.log(response)
//}
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...