进行身份验证以使用 Google Apps 脚本查询融合表



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

很遗憾,由于域设置,我无法与我们域外的人共享任何文件。 我已经在这里查看了参考资料,但我不确定如何使其适应我正在做的事情。

我可以使用Google的此示例字符串使脚本工作,因此我相信代码是正确的:

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

提前谢谢你。

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

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

如果您仍要手动进行呼叫。至少启用该服务并放置一些假代码,以便应用程序脚本可以为您请求 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);
}

最新更新