我有两个脚本在不同的域,我想从一个到另一个提取数据。Google Apps脚本执行API
我们发现脚本执行API很有用,但是他们没有提供任何示例GAS给GAS。 https://developers.google.com/apps-script/guides/rest/quickstart/target-script
有关如何完成此类事情的任何建议/指导?
我有两个脚本在不同的域,我想从一个到另一个提取数据。Google Apps脚本执行API
我们发现脚本执行API很有用,但是他们没有提供任何示例GAS给GAS。 https://developers.google.com/apps-script/guides/rest/quickstart/target-script
有关如何完成此类事情的任何建议/指导?
是的,你可以使用Execution API从一个域获取数据到其他域。从文档中,它由一个脚本资源组成,它具有一个方法run
,可以调用特定的Apps脚本函数。
run方法必须给出以下信息调用时:
- 的ID of the script被调用。
- name of the function要执行的脚本内。
- 函数需要的参数列表(如果有的话)。
这里是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使网站和谷歌驱动器之间的相互作用。
这个答案可能会有帮助。我所做的是创建了一个云平台项目并创建了两个独立项目,一个包含调用脚本,另一个包含您想调用的方法,并且必须将其部署为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调用第一线。我这样做是因为调用脚本和目标脚本必须具有相同的范围。
作为一般规则,你应该已经发布了一些你已经尝试过的东西。 现在,ontopic,在这里:https://developers.google.com/apps-script/reference/drive/drive-app你可以找到关于如何使用驱动器的文档 如果我理解正确,你想访问文件夹从另一个帐户.. 如果是这种情况使用此https://jsfiddle.net/6da2oboe/会让你列出你有权查看的所有文件夹。我试了一下,它的工作原理。你只需要有阅读权利。 也许你应该细化一下,以更“可读”的方式查看它们 –
这是我以前试过的:http://stackoverflow.com/questions/38999993/two-scripts-different-domains-merge -数据 –