我在不同的域中有两个脚本,我想从一个到另一个获取数据。
我发现脚本执行API很有用,但是他们没有向GAS提供任何示例GAS。 https://developers.google.com/apps-script/guides/rest/quickstart/target-script
关于如何完成此类事情的任何建议/指导?
答案 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方法提供以下信息:
- 正在调用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有关如何使用Google Apps脚本执行API和Javascript进行网站与Google云端硬盘之间互动的信息。