2016-08-18 174 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調用第一線。我這樣做是因爲調用腳本和目標腳本必須具有相同的範圍。