对于上下文,我正在 Qt QML 中做一个小型应用程序,它需要将数据读/写到 google 工作表中。阅读部分工作正常,但是我在使用 google sheets API V4 中的“sheets.spreadsheets.values.append”函数时遇到了问题(可以在此处找到文档:https://developers.google.com/sheets/api/reference/rest/)
下面的 Javascript 函数将此 URL 作为参数:https://sheets.googleapis.com/v4/spreadsheets/{SHEET-ID}/values/A2:ZZ:append?valueInputOption=RAW&key={API -KEY
作为参数传递的请求体是这个:
{
"majorDimension": "ROWS",
"values": [
[
"15:41 02/08/2019",
"Steven",
"20",
"Male",
"test@mail.com",
"FooBar"
]
]
}
调用执行 POST 的函数:
function postReq(url, callback, request = null) {
var xhr = new XMLHttpRequest();
xhr.open("POST", url);
xhr.onload = function (e) {
if (e) console.log(e);
if (xhr.readyState === 4) {
if (xhr.status === 200) {
console.log(xhr.responseText);
callback(xhr.responseText.toString());
} else {
callback(null);
console.log(xhr.status);
}
} else {
console.log(xhr.status);
};
};
xhr.send(request);
};
这总是会返回一个 401 响应代码,即使我将工作表发布到 Web 并且 API key 不应该是问题,因为它在读取数据时工作正常(我确保工作表也是可编辑的)。
最佳答案
- 您想使用 Sheets API 的 values.append 方法追加行。
- 您正在为此使用 API key 。
- 已在 API 控制台启用 Sheets API。
如果我的理解是正确的,这个修改怎么样?请将此视为几个答案之一。
修改点:
- 很遗憾,API key 不能用于 POST 方法。 API key 只能用于 GET 方法。因此,请使用 OAuth2 和服务帐户检索到的访问 token 。
- 对于您的脚本,请将请求正文作为内容类型的
application/json
发送。
修改后的脚本:
作为使用访问 token 的脚本,我修改了你的脚本如下。在使用它之前,请设置您的访问 token 。
function postReq(url, callback, request = null) {
const accessToken = "###"; // <--- Please set your access token here.
// Sample request body?
var request = {
"majorDimension": "ROWS",
"values": [
[
"15:41 02/08/2019",
"Steven",
"20",
"Male",
"test@mail.com",
"FooBar"
]
]
};
var xhr = new XMLHttpRequest();
xhr.open("POST", url);
xhr.setRequestHeader('Authorization', 'Bearer ' + accessToken); // Added
xhr.setRequestHeader('Content-Type', 'application/json'); // Added
xhr.onload = function (e) {
if (e) console.log(e);
if (xhr.readyState === 4) {
if (xhr.status === 200) {
console.log(xhr.responseText);
callback(xhr.responseText.toString());
} else {
callback(null);
console.log(xhr.status);
}
} else {
console.log(xhr.status);
};
};
xhr.send(JSON.stringify(request)); // Modified
};
备注:
- 以上修改后的脚本,在我的环境中,我可以确认它有效。
引用资料:
- > Using OAuth 2.0 to Access Google APIs
- > Using OAuth 2.0 for Server to Server Applications
- > Method: spreadsheets.values.append
如果我误解了您的问题并且这不是您想要的方向,我深表歉意。
关于javascript - 使用表格 API 和 XMLHttpRequest 将请求正文发送到 google 表格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57331104/