2016-08-18 173 views
0

我有两个脚本在不同的域,我想从一个到另一个提取数据。Google Apps脚本执行API

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

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

+0

作为一般规则,你应该已经发布了一些你已经尝试过的东西。 现在,ontopic,在这里:https://developers.google.com/apps-script/reference/drive/drive-app你可以找到关于如何使用驱动器的文档 如果我理解正确,你想访问文件夹从另一个帐户.. 如果是这种情况使用此https://jsfiddle.net/6da2oboe/会让你列出你有权查看的所有文件夹。我试了一下,它的工作原理。你只需要有阅读权利。 也许你应该细化一下,以更“可读”的方式查看它们 –

+0

这是我以前试过的:http://stackoverflow.com/questions/38999993/two-scripts-different-domains-merge -数据 –

回答

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如何使用谷歌Apps脚本API执行和Javascript使网站和谷歌驱动器之间的相互作用。

0

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

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

要将项目与Cloud Platform项目相关联,请在脚本编辑器中执行此操作,资源 - >云平台项目。你会看到有输入框的占位符的对话框在这里输入项目编号,这里把云平台的项目编号和其他项目也一样。

现在,我已经按照谷歌执行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执行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); 
} 

在里面的功能,你可以看到我有注释掉驱动器API调用第一线。我这样做是因为调用脚本和目标脚本必须具有相同的范围。