Google Apps脚本执行API

时间:2016-08-18 07:20:14

标签: google-apps-script

我在不同的域中有两个脚本,我想从一个到另一个获取数据。

我发现脚本执行API很有用,但是他们没有向GAS提供任何示例GAS。 https://developers.google.com/apps-script/guides/rest/quickstart/target-script

关于如何完成此类事情的任何建议/指导?

2 个答案:

答案 0 :(得分:1)

这个答案可能会有所帮助。我所做的是创建了一个云平台项目并创建了两个独立项目,一个包含调用脚本,另一个包含您要调用的方法,必须部署为API可执行文件。

重要:这两个项目都必须与云平台项目相关联。

要将项目与Cloud Platform的项目相关联,请在脚本编辑器中执行此操作,资源 - >云平台项目。您将看到包含输入框的对话框,其中包含占位符在此处输入项目编号,此处放置云平台的项目编号,并对其他项目执行相同的操作。

现在我已经关注了谷歌的EXECUTION API快速入门教程。我有一个目标脚本(脚本包含您的方法),如下所示:

/**
 * 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可执行文件。在项目中,您必须启用了Google Execution API。

现在是调用脚本,

function makeRequest(){
  // DriveApp.getRootFolder();
  var access_token=ScriptApp.getOAuthToken();
  var url = "https://script.googleapis.com/v1/scripts/{YourScriptId}: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
  });
  Logger.log(res);  
}

在第一行内部功能中,您可以看到我已注释掉Drive API调用。我这样做是因为调用脚本和目标脚本必须具有相同的范围。

答案 1 :(得分:0)

是的,您可以使用Execution API将数据从一个域提取到另一个域。从文档中,它由单个脚本资源组成,该资源具有单个方法run,可以调用特定的Apps脚本函数。

  

调用时,必须为run方法提供以下信息:

     

以下是GitHub的示例:

var script = google.script('v1');
var key = require('./creds.json');
var jwtClient = new google.auth.JWT(key.client_email, null, key.private_key, ['https://www.googleapis.com/auth/spreadsheets'], null);

jwtClient.authorize(function(err, tokens) {
  if (err) {
    console.log(err);
    return;
  }
  script.scripts.run({
    auth: jwtClient,
    scriptId: 'script-id',
    resource: {
      function: 'test',
      parameters: []
    }
  }, function(err, response) {
    if (err) {
      throw err;
    }
    console.log('response', response);
  })

});

您还可以查看related SO question有关如何使用Google Apps脚本执行API和Javascript进行网站与Google云端硬盘之间互动的信息。