我是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
提前谢谢你。
答案 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);
}