如何在不使用 oauth2 的情况下使用电子表格 API 读取数据



这是Google Sheets API上的另一个错误403。嗯,尝试从电子表格中读取数据并将其公开在网站上,使用一些自定义HTML过滤器。

所以,有这样一个问题: 谷歌表格 API 上的错误 403

不过,我不知道该怎么办。我已经在谷歌云平台中设置了我的服务帐户,授予它访问我的电子表格的权限 - 我什至通过链接访问我的电子表格(但这仅限于来自我组织的电子邮件,所以无论如何它似乎都没有用(。我还为我的服务帐号激活了全网域委派 - 根本没有任何区别。我很确定这个问题与错误的键或某些拼写错误无关,因为当我从工作表中删除对服务电子邮件的访问权限时,我收到了 403 错误,但它带有一条消息,说呼叫者无法访问该电子表格。

人们不断提到OAuth,但我不想使用它,因为我打算使用一个简单的API访问,就像这个Google GitHub示例一样。我正在使用我的企业帐户,因此可能存在一些与此相关的问题。

这是HTML(我从python上的简单HTTP服务器运行,而不是直接运行,因为GAPI不能很好地处理localhost/源(:

<!DOCTYPE html>
<html>
<head>
<title>Google Sheets API Quickstart</title>
<meta charset="utf-8" />
</head>
<body>
<p>Google Sheets API Quickstart</p>
<!--Add buttons to initiate auth sequence and sign out-->
<button id="authorize_button" style="display: none;">Authorize</button>
<button id="signout_button" style="display: none;">Sign Out</button>
<pre id="content" style="white-space: pre-wrap;"></pre>
<script type="text/javascript">
// Client ID and API key from the Developer Console
var API_KEY = 'My-API-KEY';
var DISCOVERY_DOCS = ["https://sheets.googleapis.com/$discovery/rest?version=v4"];
var SCOPES = "https://www.googleapis.com/auth/spreadsheets.readonly";
function handleClientLoad() {
gapi.load('client', initClient);
}
function initClient() {
gapi.client.init({
apiKey: API_KEY,
discoveryDocs: DISCOVERY_DOCS
}).then(function(){listMajors();})
}
function appendPre(message) {
var pre = document.getElementById('content');
var textContent = document.createTextNode(message + 'n');
pre.appendChild(textContent);
}
function listMajors() {
gapi.client.sheets.spreadsheets.values.get({
spreadsheetId: 'my-spreadsheet-id',
range: 'Sheet1!A1:A10',
}).then(function(response) {
var range = response.result;
if (range.values.length > 0) {
appendPre('Name, Major:');
for (i = 0; i < range.values.length; i++) {
var row = range.values[i];
// Print columns A and E, which correspond to indices 0 and 4.
appendPre(row[0] + ', ' + row[4]);
}
} else {
appendPre('No data found.');
}
}, function(response) {
appendPre('Error: ' + response.result.error.message);
});
}
</script>
<script async defer src="https://apis.google.com/js/api.js"
onload="this.onload=function(){};handleClientLoad()"
onreadystatechange="if (this.readyState === lete') this.onload()">
</script>
</body>
</html>

有没有人知道我错过了什么,或者我还能尝试什么?

编辑:公开共享电子表格不是一种选择。这是一封商业电子邮件,因此,正如我上面已经说过的,我在这里唯一的选择是在整个域范围内共享它。此外,这是一个业务电子表格,其中包含感知数据。公开曝光它真的没有意义。除此之外,我已经与服务电子邮件共享了电子表格。毕竟,我想要实现的是不使用oauth从电子表格中读取数据,并将其嵌入网站上(我知道有一个内置的嵌入工具,但这不适合我,因为我需要添加一个html过滤器(。

如果您尝试访问非公共电子表格,则必须使用 OAuth 2.0。由于它不是公共资源,因此您必须使用有权访问此资源的帐户的凭据

在您提供的示例中,他们正在访问公共资源,因此 API 密钥就足够了。那不是你的情况。

参考:

  • 使用 OAuth 2.0 访问 Google API

最新更新