使用 google 云服务帐户访问私人 Google sheet
Accessing a private Google sheet with a google cloud service account
我有一个私人 Google 电子表格,我正在尝试使用 Google Visualization/Google 图表以编程方式访问它。我已经创建了服务帐户,并尝试使用 google-auth-library
和 googleapis
npm 包来创建一个访问令牌,然后我可以使用它来访问电子表格。但是,当我尝试使用该访问令牌从电子表格中读取时,请求失败并显示 HTTP 代码 401(未授权)。我需要做什么才能完成这项工作?
这是我的代码:
const { auth } = require('google-auth-library');
const keys = require('./jwt.keys.json');
const id = '{Spreadsheet ID}';
const sheetId = '{Sheet ID}';
const query = "{Query}";
async function getClient(){
const client = auth.fromJSON(keys);
client.scopes = ['https://www.googleapis.com/auth/spreadsheets.readonly'];
console.log(client);
return client;
}
async function main(){
const client = await getClient();
const token = await client.getAccessToken();
console.log(token);
console.log(token.token);
const url = `https://docs.google.com/spreadsheets/d/${id}/gviz/tq?tqx=out:csv&tq=${encodeURIComponent(query)}&access_token=${token.token}#gid=${sheetId}`;
const res = await client.request({url});
console.log(res);
}
main().catch(console.error);
当我看到你的脚本时,我认为它需要修改范围。我遇到了和你一样的情况(状态代码 401
使用你的端点)。不幸的是,您的端点似乎无法使用 https://www.googleapis.com/auth/spreadsheets.readonly
的范围。那么,比如说,改成下面这样,再测试一下怎么样?
发件人:
https://www.googleapis.com/auth/spreadsheets.readonly
收件人:
https://www.googleapis.com/auth/spreadsheets
或
https://www.googleapis.com/auth/drive.readonly
注:
- 当我使用修改后的范围测试您的端点时,我确认没有发生错误。但是如果你测试了,当出现错误时,请检查其他部分,然后再。
我有一个私人 Google 电子表格,我正在尝试使用 Google Visualization/Google 图表以编程方式访问它。我已经创建了服务帐户,并尝试使用 google-auth-library
和 googleapis
npm 包来创建一个访问令牌,然后我可以使用它来访问电子表格。但是,当我尝试使用该访问令牌从电子表格中读取时,请求失败并显示 HTTP 代码 401(未授权)。我需要做什么才能完成这项工作?
这是我的代码:
const { auth } = require('google-auth-library');
const keys = require('./jwt.keys.json');
const id = '{Spreadsheet ID}';
const sheetId = '{Sheet ID}';
const query = "{Query}";
async function getClient(){
const client = auth.fromJSON(keys);
client.scopes = ['https://www.googleapis.com/auth/spreadsheets.readonly'];
console.log(client);
return client;
}
async function main(){
const client = await getClient();
const token = await client.getAccessToken();
console.log(token);
console.log(token.token);
const url = `https://docs.google.com/spreadsheets/d/${id}/gviz/tq?tqx=out:csv&tq=${encodeURIComponent(query)}&access_token=${token.token}#gid=${sheetId}`;
const res = await client.request({url});
console.log(res);
}
main().catch(console.error);
当我看到你的脚本时,我认为它需要修改范围。我遇到了和你一样的情况(状态代码 401
使用你的端点)。不幸的是,您的端点似乎无法使用 https://www.googleapis.com/auth/spreadsheets.readonly
的范围。那么,比如说,改成下面这样,再测试一下怎么样?
发件人:
https://www.googleapis.com/auth/spreadsheets.readonly
收件人:
https://www.googleapis.com/auth/spreadsheets
或
https://www.googleapis.com/auth/drive.readonly
注:
- 当我使用修改后的范围测试您的端点时,我确认没有发生错误。但是如果你测试了,当出现错误时,请检查其他部分,然后再。