使用 google 云服务帐户访问私人 Google sheet

Accessing a private Google sheet with a google cloud service account

我有一个私人 Google 电子表格,我正在尝试使用 Google Visualization/Google 图表以编程方式访问它。我已经创建了服务帐户,并尝试使用 google-auth-librarygoogleapis 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

注:

  • 当我使用修改后的范围测试您的端点时,我确认没有发生错误。但是如果你测试了,当出现错误时,请检查其他部分,然后再。