【问题标题】:403 accessing programatically created sheets project endpoint through Apps Script403 通过 Apps 脚本访问以编程方式创建的工作表项目端点
【发布时间】:2020-08-23 01:06:12
【问题描述】:

使用代码创建一个空白电子表格并获取它的 ID。一旦资源的 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. 从“默认”谷歌云项目切换到“标准”云项目(查看 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 本身向 Scripts API 成功执行请求的方式

【问题讨论】:

  • 这是 gsuite 吗?您可能需要让您的管理员授予这些权限

标签: google-apps-script http-status-code-403 google-apps-script-api


【解决方案1】:

【讨论】:

    【解决方案2】:

    首先,要获取电子表格的 url,您可以简单地调用 getUrl 方法,它将完整的 url 作为字符串返回到电子表格:

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

    一旦你这样做了,你就有了使用SriptApp 服务的正确想法,但是你正在讨论在运行时附加脚本的细节是错误的。要将函数附加到工作表,您需要使用TriggerBuilder 创建一个新的Trigger(仅在特定条件下调用的回调有效):

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

    请务必注意,您希望将所需的函数名称作为 字符串 而不是回调传递。

    为此,您需要https://www.googleapis.com/auth/script.scriptapp 授权范围,否则您会收到更多运行时错误,您可以在 google 脚本项目仪表板中查看。

    更多信息请阅读Authorization Scopes和Authorization for Google Services

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多