2016-01-16 12 views
1

一個融合表我是一個谷歌Apps域的成員,我嘗試使用示例代碼來查詢的融合表,但不斷收到以下錯誤:身份驗證查詢使用谷歌Apps腳本

{ 
    "error": { 
    "errors": [ 
     { 
     "domain": "global", 
     "reason": "required", 
     "message": "Login Required", 
     "locationType": "header", 
     "location": "Authorization" 
     } 
    ], 
    "code": 401, 
    "message": "Login Required" 
    } 
} 

這裏是我使用的代碼:

function myFunction() { 

//Fusion Table 
    var constructor = 'https://www.googleapis.com/fusiontables/v2/query?sql='; 
    var fusionTableID = '1pJk********UY5l'; 
    var fusionTableAPIKey = 'AIza********AGV8'; // Browser API Key 
    var fusionTableQuery = 'SELECT * FROM ' + fusionTableID + '&key=' + fusionTableAPIKey; 
    var queryString = constructor + fusionTableQuery; 

    var response = UrlFetchApp.fetch(queryString); 

    var parsedResponse = JSON.parse(response.getContentText()); 

    Logger.log(parsedResponse); 

} 

不幸的是,由於域設置,我無法分享任何與人的文件我們的域之外。我已閱讀參考文獻here,但我不確定如何使其適應我所做的。

我能拿到劇本使用谷歌從該樣本串工作,所以我相信,代碼是正確的:

https://www.googleapis.com/fusiontables/v2/query?sql=SELECT * FROM%201KxVV0wQXhxhMScSDuqr-0Ebf0YEt4m4xzVplKd4&key=AIzaSyAm9yWCV7JPCTHCJut8whOjARd7pwROFDQ 

預先感謝您。

回答

1

您需要通過訪問令牌或登錄身份驗證在請求中傳遞授權標頭。它顯示在您發佈的link中。

無論如何,使用Fusion Table高級服務要容易得多。要啓用它,請轉到資源>高級Google服務> Fusion Tables API。

如果您仍想手動進行呼叫。至少啓用該服務並放置一些僞代碼,以便Apps Script可以爲您請求oAuth2範圍。例如

function noNeedToRun() //just to trigger the scope 
    FusionTables.Query.sql('foo'); //although this is easier than UrlFetch`ing manually 
} 

function myFunction() { 
    //...your same code 
    var queryString = constructor + fusionTableQuery; 

    var response = UrlFetchApp.fetch(queryString, { 
    headers: { //this is what you're missing 
     "Authorization": "Bearer " + ScriptApp.getOAuthToken(), 
    } 
    }); 

    var parsedResponse = JSON.parse(response.getContentText()); 

    Logger.log(parsedResponse); 
} 
+0

謝謝你,那美好的工作!我知道Apps腳本應該處理oAuth,但無法啓動屏幕。現在有意義...期待探索FusionTables.Query.sql。現在這只是一個橋樑,我真正的問題是從Google Script查詢Google Sheet服務器端... –