使用Google Apps脚本进行身份验证以查询Fusion Table

时间:2016-01-16 21:56:01

标签: google-apps-script google-fusion-tables

我是Google 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的参考文献,但我不确定如何使其适应我正在做的事情。

我可以使用Google提供的示例字符串让脚本工作,所以我确信代码是正确的:

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

提前谢谢你。

1 个答案:

答案 0 :(得分:1)

您需要使用访问令牌或登录身份验证在请求中传递授权标头。它显示在您发布的link中。

无论如何,使用Fusion Table高级服务要容易得多。要启用它,请转到资源>高级Google服务> Fusion Tables API。

如果您仍想手动拨打电话。至少启用服务并放入一些假代码,以便Apps脚本可以为您请求oAuth2范围。 e.g。

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);
}