403通过应用程序脚本访问程序创建的图纸项目端点



使用代码创建一个空白的电子表格并获取它的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"
}
]
}
]
}

编辑:海雀和大师的答案都解决了这个问题。

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),
});

这就是您从脚本本身向脚本API执行成功请求的方式

  • 如果这是gsuite,您可能需要要求管理员授予这些权限。

  • 如果你确定你有特权,你需要从";默认";谷歌云项目;标准";云项目

  • 为创建的";标准";GCP

  • 需要将项目范围添加到清单

  • 相关答案和评论链

首先,要获得电子表格的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授权范围,否则您将收到更多的运行时错误,您可以在谷歌脚本项目面板中查看这些错误。

有关更多信息,请阅读谷歌服务的授权范围和授权

相关内容

  • 没有找到相关文章

最新更新