gpt4 book ai didi

node.js - google-spreadsheet.js (npm) 只读访问不使用 API KEY 的单元格 - 需要 OAuth?

转载 作者:太空宇宙 更新时间:2023-11-03 21:50:23 25 4
gpt4 key购买 nike

来自 node.js 应用程序(discord 机器人)我尝试使用 npm 包 google-spreadsheet 访问公共(public) googlesheet

我仔细遵循了每个步骤,但我只想使用 API key 身份验证方法,而不是风险更大的 Oauth 身份验证

(我的不和谐机器人是公开的,在heroku上,即使我使用环境变量,我也不想弄乱太多敏感信息)

google-spreadsheet.js 的文档中提到:

// OR use API key -- only for read-only access to public sheets
doc.useApiKey('YOUR-API-KEY');

我可以成功连接到 spreadsheet 阅读它的标题获取每张纸的标题但是当我打电话时等待sheet.loadCells();它给了我以下错误

Google API error - [401] 
Request is missing required authentication credential.
Expected OAuth 2 access token,
login cookie or other valid authentication credential.
See https://developers.google.com/identity/sign-in/web/devconsole-project.

如果可能,仅使用 API key 身份验证,正确的方式或仅读取单元格是什么?

这是我的完整代码:

  const sheetId = "1Bny-ZsCG_oUuS0nTbR-7tBBZu47_ncS9qGYaMpuprWU"

var loaded = {}

if (message) {
message.reply("je me connecte à Google Sheets...")
}

const doc = new GoogleSpreadsheet(sheetId);

doc.useApiKey(process.env.GOOGLE_API_KEY);

await doc.loadInfo();
loaded.docTitle = doc.title;
loaded.sheets = {};

if (message) {
message.reply("...connection réussie, je récupère les infos...")
}

// get the spreadsheets
for (let s = 0; s < doc.sheetCount; ++s ) {
const sheet = doc.sheetsByIndex[s];
loaded.sheets[sheet.title] = {sheetReference:sheet};

loaded.sheets[sheet.title].data = []

await sheet.loadCells(); // <---------it seems to block here

for (let row= 0; row < sheet.rowCount; ++row) {
loaded.sheets[sheet.title].data.push([])

for (let col = 0; col < sheet.columnCount; ++col) {
let cell = sheet.getCell(row, col).value;
loaded.sheets[sheet.title].data[row].push(cell)
}
}

非常感谢!

最佳答案

  • 您想要使用 API key 从 Google 电子表格中检索值。
  • Google 电子表格是公开共享的。
  • 您想使用 google-spreadsheet 来实现此目的.

如果我的理解是正确的,这个答案怎么样?请将此视为几个可能答案之一。

问题和解决方法:

当我看到the source script时在 google-spreadsheet 中,似乎 sheet.loadCells() 使用 API key 通过 POST 方法进行请求。 Ref不幸的是,API key 无法使用 POST 方法。于是就出现了这样的错误。我认为这个问题的原因就是这个原因。例如,当使用 OAuth2 和服务帐户的访问 token 时,我可以确认 sheet.loadCells() 有效。从这种情况来看,这可能是一个错误或库的规范。

幸运的是,可以使用 API key 从公开共享的 Google 电子表格中检索这些值。因此,作为几种解决方法之一,在这个答案中,googleapis for Node.js被用作一种简单的方法。这是官方库。

示例脚本:

首先,请安装googleapis。请设置spreadsheetIdAPIKey变量。

const { google } = require("googleapis");

const spreadsheetId = "1Bny-ZsCG_oUuS0nTbR-7tBBZu47_ncS9qGYaMpuprWU"; // This is from your script.
const APIKey = "### your API key ###";

const sheets = google.sheets({version: "v4", auth: APIKey});
sheets.spreadsheets.get({ spreadsheetId: spreadsheetId }, (err, res) => {
if (err) {
console.error(err);
return;
}
sheets.spreadsheets.values.batchGet(
{
spreadsheetId: spreadsheetId,
ranges: res.data.sheets.map(e => e.properties.title)
},
(err, res) => {
if (err) {
console.error(err);
return;
}
console.log(JSON.stringify(res.data));
}
);
});
  • 运行脚本时,系统会检索公开共享电子表格中所有工作表的所有值。
  • 在上面的示例脚本中,使用了电子表格.get 和电子表格.values.batchGet 两种方法。

引用文献:

如果我误解了您的问题并且这不是您想要的方向,我深表歉意。

关于node.js - google-spreadsheet.js (npm) 只读访问不使用 API KEY 的单元格 - 需要 OAuth?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60095462/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com