如何从容器绑定脚本调用GAS Execution API的run方法?

时间:2017-09-02 06:52:43

标签: javascript google-apps-script

我已按照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"
      }
    ]
  }
}

我该如何解决这个问题?代码解释会很明显。谢谢。

1 个答案:

答案 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 ###",
    }
  }
}