403 доступ к программно созданной конечной точке проекта листов через скрипт приложений

Используемый код для создания пустой таблицы и получения ее идентификатора. Как только Id ресурса станет доступен, я хочу программно прикрепить к нему собственный скрипт.

  [...]
  var newSpreadsheet = SpreadsheetApp.create("Опис "+dateFormated);
  
  Logger.log(newSpreadsheet.getId());

  var url = 'https://script.googleapis.com/v1/projects/'+newSpreadsheet.getId();
  var token = ScriptApp.getOAuthToken();
  var response = UrlFetchApp.fetch(url, {
    headers: {
      Authorization: 'Bearer ' + token
    },
    muteHttpExceptions: true
  });

запрос приводит к ошибке (независимо от того, какую конечную точку я вызываю для проекта). URL-адрес, указанный в сообщении об ошибке, бесполезен, поскольку это не проект, которым я управляю. Переход к нему приводит к

У вас недостаточно прав для просмотра этой страницы

Вам не хватает хотя бы одного из следующих необходимых разрешений:

Проект

resourcemanager.projects.get

serviceusage.services.get

 "error": {
    "code": 403,
    "message": "Apps Script API has not been used in project 85798724816 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/script.googleapis.com/overview?project=85798724816 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.",
    "status": "PERMISSION_DENIED",
    "details": [
      {
        "@type": "type.googleapis.com/google.rpc.Help",
        "links": [
          {
            "description": "Google developers console API activation",
            "url": "https://console.developers.google.com/apis/api/script.googleapis.com/overview?project=85798724816"
          }
        ]
      }
    ]
  }

РЕДАКТИРОВАТЬ: Ответ от puffin и TheMaster решает проблему.

Ответ от TheMaster - это то, что я хотел сделать более конкретно

С моим вопросом тоже есть проблема. Я пытаюсь получить проект для электронной таблицы еще до того, как она будет создана. Итак, первый правильный запрос - это POST на https://script.googleapis.com/v1/projects.

Шаги решения:

  1. переключиться с облачного проекта Google по умолчанию на стандартный облачный проект (проверьте ссылку на TheMaster)
  2. Создайте API-ключ в облачной консоли для проекта
  var url = 'https://script.googleapis.com/v1/projects?key=[YOUR_KEY_HERE]';
  var token = ScriptApp.getOAuthToken();
  var data = {
    "parentId": "16eL4PIVFO5Zdd7r-8HhQF_4OZS7G7TbTX-pg",
    "title": "autoProject"
  };
  var response = UrlFetchApp.fetch(url, {
    headers: {
      Authorization: 'Bearer ' + token
    },
    method: 'POST',
    contentType: "application/json",
    muteHttpExceptions: true,
    payload: JSON.stringify(data),
  });

и вот как вы выполняете успешный запрос к Scripts API из самого Scripts


person Petyo Zhechev    schedule 23.08.2020    source источник
comment
Это gsuite? Вероятно, вам нужно попросить администратора предоставить эти привилегии   -  person TheMaster    schedule 23.08.2020


Ответы (2)


person TheMaster    schedule 23.08.2020

Во-первых, чтобы получить URL-адрес электронной таблицы, вы можете просто вызвать getUrl , который возвращает полный URL-адрес электронной таблицы в виде строки:

var ss = SpreadsheetApp.getActiveSpreadsheet();
Logger.log(ss.getUrl());

Как только вы это сделаете, у вас есть правильное представление об использовании службы SriptApp, но вы неправильно используете особенности присоединения сценария во время выполнения. Чтобы прикрепить функцию к листу, вам необходимо создать новый _4 _ (которые эффективны только обратные вызовы, которые вызываются при определенных условиях) с использованием TriggerBuilder:

ScriptApp.newTrigger('myFunction')
  .forSpreadsheet(ss) // you can also use the spreadsheet id here
  .onOpen()
  .create();

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

Для этого вам понадобится https://www.googleapis.com/auth/script.scriptapp область авторизации, иначе вы получите больше ошибок времени выполнения, которые можно просмотреть на панели инструментов проектов скриптов Google.

Для получения дополнительной информации прочтите Области авторизации и Авторизация для служб Google

person joshmeranda    schedule 23.08.2020