如何解决403通过Apps脚本访问以编程方式创建的图纸项目端点
使用代码创建空白电子表格并获取其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”
解决步骤:
- 从“默认” Google云项目切换到“标准”云项目(请查看TheMaster的链接)
- 在云控制台中为该项目创建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,method: 'POST',contentType: "application/json",muteHttpExceptions: true,payload: JSON.stringify(data),});
这就是您从脚本本身向Scripts API成功执行请求的方式
解决方法
首先,要获取电子表格的网址,您可以简单地调用getUrl
方法,该方法将完整的网址作为字符串返回到电子表格:
var ss = SpreadsheetApp.getActiveSpreadsheet();
Logger.log(ss.getUrl());
完成此操作后,便有了使用SriptApp
服务的正确想法,但是在运行时附加脚本的细节是错误的。要将功能附加到工作表,您需要使用Trigger
创建一个新的TriggerBuilder
(仅在给定特定条件的情况下才有效的回调):
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
,-
如果这是gsuite,则您可能需要要求管理员授予这些特权。
-
如果您确定自己具有特权,则需要switch from "default" Google cloud project to "standard" cloud project
-
Enable the api用于创建的“标准” GCP
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。