我已按照documentation中google的指示制作了一个目标项目脚本,并按照所有步骤部署为API Executable.Enabled也是Google应用脚本执行API。
在文档中,他们提到了Execution API的run方法。通过使用它,我们可以调用项目方法。我不知道如何在GAS中使用它。
这是目标项目的脚本,
/**
* The function in this script will be called by the Apps Script Execution API.
*/
/**
* Return the set of folder names contained in the user's root folder as an
* object (with folder IDs as keys).
* @return {Object} A set of folder names keyed by folder ID.
*/
function getFoldersUnderRoot() {
var root = DriveApp.getRootFolder();
var folders = root.getFolders();
var folderSet = {};
while (folders.hasNext()) {
var folder = folders.next();
folderSet[folder.getId()] = folder.getName();
}
return folderSet;
}
我尝试使用以下方法调用执行API的run方法,但它需要访问令牌,如何在此代码中获取访问令牌。
var access_token=ScriptApp.getOAuthToken();//Returning a string value
var url = "https://script.googleapis.com/v1/scripts/MvwvW29XZxP77hsnIkgD0H88m6KuyrhZ5:run";
var headers = {
"Authorization": "Bearer "+access_token,
"Content-Type": "application/json"
};
var payload = {
'function': 'getFoldersUnderRoot',
devMode: true
};
var res = UrlFetchApp.fetch(url, {
method: "post",
headers: headers,
payload: JSON.stringify(payload),
muteHttpExceptions: true
});
但是作为回应我得到了这个,
{
"error": {
"code": 401,
"message": "ScriptError",
"status": "UNAUTHENTICATED",
"details": [
{
"@type": "type.googleapis.com/google.apps.script.v1.ExecutionError",
"errorMessage": "Authorization is required to perform that action.",
"errorType": "ScriptError"
}
]
}
}
我该如何解决这个问题?代码解释会很明显。谢谢。
答案 0 :(得分:0)
这个示例脚本怎么样?根据您的问题,我可以知道您已经完成了部署API Executable并启用了Execution API。要使用Execution API,还需要具有您使用的范围的访问令牌,您可以在Requirements上看到。你已经检索过了吗?如果您还没有,可以通过选中the Auth Guide来检索它。通过准备这些,您可以使用Execution API。
以下示例用于项目部署的API Executable中的运行getFoldersUnderRoot()
。请将此示例脚本复制并粘贴到电子表格脚本编辑器中。在使用此功能之前,请将您部署的API Executable项目的访问令牌和脚本ID导入脚本。
var url = "https://script.googleapis.com/v1/scripts/### Script ID ###:run";
var headers = {
"Authorization": "Bearer ### acces token ###",
"Content-Type": "application/json"
};
var payload = {
'function': 'getFoldersUnderRoot',
devMode: true
};
var res = UrlFetchApp.fetch(url, {
method: "post",
headers: headers,
payload: JSON.stringify(payload),
muteHttpExceptions: true
});
此处,getFoldersUnderRoot()
的结果返回如下。
{
"done": true,
"response": {
"@type": "type.googleapis.com/google.apps.script.v1.ExecutionResponse",
"result": {
"### folder id1 ### ": "### folder name1 ###",
"### folder id2 ### ": "### folder name2 ###",
}
}
}