我正在开发一个谷歌应用程序脚本函数,它将在融合表中插入一行。我的大多数融合表界面都可以正常工作,但这是我第一次尝试 sql 'POST' 查询。根据此处的文档,我应该能够将 sql 语句放在 POST 正文中。我已将自己简化为OAuth Playground进行故障排除,但我不断收到以下错误。我一直在尝试使用 sql insert 语句sql=INSERT INTO {fusionId} (HeadingName) VALUES (ValueOne)
,并且尝试了该语句的各种变体,但均无济于事。请帮助我确定执行此操作的正确语法或方法。
{
"error": {
"errors": [
{
"domain": "global",
"reason": "required",
"message": "Required parameter: sql",
"locationType": "parameter",
"location": "sql"
}
],
"code": 400,
"message": "Required parameter: sql"
}
}
一旦我弄清楚这一点,我就需要在我的代码中复制游乐场操作,(我认为)看起来像这样:
function fusionRequest(methodType, sql, oAuthFields) {
OAL.googleAuth(oAuthFields);
var options =
{
oAuthUseToken : "always",
oAuthServiceName : 'fusiontables',
method : "POST",
payload : "sql=INSERT INTO {fusionId} (Heading) VALUES (ONE)",
contentType : "application/json"
};
Logger.log(options)
var fetchResult = UrlFetchApp.fetch(oAuthFields.queryUrl, options);
return JSON.parse(fetchResult.getContentText());
}
我一直认为这也可能是内容类型的问题,但我不知所措。请帮忙。
更新 #1 通过使用三亚的建议,我能够让请求在 OAuth Playground 中工作。但是,我仍在为代码中的请求而苦苦挣扎。运行代码时我收到重复的授权请求(或调试时出现一般 OAuth 错误)。根据我之前的经验,我相信这意味着我的有效载荷仍然存在问题。对此的任何建议将不胜感激。
var oAuthFields = {
'clientId' : '523606257547.apps.googleusercontent.com',
'scope' : 'https://www.googleapis.com/auth/fusiontables',
'fetchUrl' : 'https://www.googleapis.com/fusiontables/v1/',
'clientSecret' : 'L-f8DgwK4rs7Qmw9k5IFL7lZ',
'fusionId' : '1b4kT_aYRfNBy8ZPtSZqhQUqVSVIYj_QWiBmjXXI',
'service' : 'fusiontables',
'queryUrl' : 'https://www.googleapis.com/fusiontables/v1/query/'
};
function fusionRequest(methodType, sql, oAuthFields) {
OAL.googleAuth(oAuthFields);
var options =
{
oAuthUseToken : "always",
oAuthServiceName : 'fusiontables',
method : "POST",
payload : "sql=INSERT INTO {fusion id} (\'Heading\') VALUES (\'ONE\')",
contentType : "application/x-www-form-urlencoded"
};
var fetchResult = UrlFetchApp.fetch(oAuthFields.queryUrl, options);
return JSON.parse(fetchResult.getContentText());
}
对于上下文,googleAuth() 函数和该函数的整体布局与我用来在融合表中添加列的函数相同(有效)。