无法使用 Google 工作表 API 创建新电子表格
Unable to create a new spreadsheet with the Google Sheets API
我正在使用 googleapis 包创建新的 Google 电子表格,但它失败了。当我使用 web-based tools in the Google API documentation.
时同样的请求有效
Google.prototype.createSheet = function(filename, callback) {
var services = google.sheets('v4');
services.spreadsheets.create({
properties : {title:filename},
auth : this.auth
}, function(err,response) {
if( err ) {
console.log('Error : unable to create file, ' + err);
return;
} else {
console.dir(response);
}
});
}
结果,
Error : unable to create file, Error: Invalid JSON payload received.
Unknown name "properties": Cannot bind query parameter. Field
'properties' could not be found in request message.
我还尝试使用 "resource" 的 属性 名称而不是 "properties",因为我在其他工作表端点中发现了这一点。这也没有用,但在我调试 googleapis 代码时导致了不同的错误消息和不同的 API 请求。
Error : unable to create file, Error: Invalid JSON payload received.
Unknown name "title" at 'spreadsheet': Cannot find field.
我也试过使用驱动器 API without success.
创建文件
哇。原来答案是我的两个实验的混合体。将属性封装在资源块中。
Google.prototype.createSheet = function(filename, callback) {
var services = google.sheets('v4');
services.spreadsheets.create({
resource : {properties:{title:filename}},
auth : this.auth
}, function(err,response) {
if( err ) {
console.log('Error : unable to create file, ' + err);
return;
} else {
console.dir(response);
}
});
}
我在 Google API documentation 中没有看到 任何东西 表明这是发送请求的正确方式所以即使它有效,也不是很令人欣慰。
我建议使用 JWT/OAuth2.0 和一个服务帐户,您可以像这样通过 Google 云平台设置:
const {google} = require('googleapis');
let sheets = google.sheets('v4');
const serviceAccount = { INSERT_JSON_HERE };
const client = new google.auth.JWT(
serviceAccount.client_email,
null,
serviceAccount.private_key,
['https://www.googleapis.com/auth/spreadsheets',
'https://www.googleapis.com/auth/drive',
'https://www.googleapis.com/auth/drive.file'],
null
);
return new Promise((resolve, reject) => {
sheets.spreadsheets.create({
auth: client,
}, (err, obj) => {
if (err) {
console.log(err);
reject(err);
} else {
console.log(`New Spreadsheet ID: ${obj.data.spreadsheetId}`);
resolve(obj);
}
});
我正在使用 googleapis 包创建新的 Google 电子表格,但它失败了。当我使用 web-based tools in the Google API documentation.
时同样的请求有效Google.prototype.createSheet = function(filename, callback) {
var services = google.sheets('v4');
services.spreadsheets.create({
properties : {title:filename},
auth : this.auth
}, function(err,response) {
if( err ) {
console.log('Error : unable to create file, ' + err);
return;
} else {
console.dir(response);
}
});
}
结果,
Error : unable to create file, Error: Invalid JSON payload received. Unknown name "properties": Cannot bind query parameter. Field 'properties' could not be found in request message.
我还尝试使用 "resource" 的 属性 名称而不是 "properties",因为我在其他工作表端点中发现了这一点。这也没有用,但在我调试 googleapis 代码时导致了不同的错误消息和不同的 API 请求。
Error : unable to create file, Error: Invalid JSON payload received. Unknown name "title" at 'spreadsheet': Cannot find field.
我也试过使用驱动器 API without success.
创建文件哇。原来答案是我的两个实验的混合体。将属性封装在资源块中。
Google.prototype.createSheet = function(filename, callback) {
var services = google.sheets('v4');
services.spreadsheets.create({
resource : {properties:{title:filename}},
auth : this.auth
}, function(err,response) {
if( err ) {
console.log('Error : unable to create file, ' + err);
return;
} else {
console.dir(response);
}
});
}
我在 Google API documentation 中没有看到 任何东西 表明这是发送请求的正确方式所以即使它有效,也不是很令人欣慰。
我建议使用 JWT/OAuth2.0 和一个服务帐户,您可以像这样通过 Google 云平台设置:
const {google} = require('googleapis');
let sheets = google.sheets('v4');
const serviceAccount = { INSERT_JSON_HERE };
const client = new google.auth.JWT(
serviceAccount.client_email,
null,
serviceAccount.private_key,
['https://www.googleapis.com/auth/spreadsheets',
'https://www.googleapis.com/auth/drive',
'https://www.googleapis.com/auth/drive.file'],
null
);
return new Promise((resolve, reject) => {
sheets.spreadsheets.create({
auth: client,
}, (err, obj) => {
if (err) {
console.log(err);
reject(err);
} else {
console.log(`New Spreadsheet ID: ${obj.data.spreadsheetId}`);
resolve(obj);
}
});