如何在不使用 oauth2 的情况下使用电子表格 API 读取数据
How to read data using the spreadsheets API without using oauth2
这是 Google 工作表 API 上的另一个错误 403。嗯,尝试使用一些自定义 HTML 过滤器从 Spreadsheet 读取数据并将其公开在网站上。
所以,有这个问题:
Error 403 on Google Sheets API
仍然,我不知道该怎么办。我在 google 云平台中设置了我的服务帐户,授予它访问我的 Spreadsheet 的权限 - 我什至通过 link 访问了我的 SpreadSheet(但这仅限于来自我的组织,所以它看起来毫无用处)。我还为我的服务帐户激活了域范围的委派 - 根本没有任何区别。我很确定问题与错误的密钥或某些拼写错误无关,因为当我从 sheet 中删除对服务电子邮件的访问权限时,我收到 403 错误,但它附带一条消息说来电者无权访问该价差sheet.
人们不断提到 OAuth,但我不想使用它,因为我打算使用简单的 API 访问,如 this Google GitHub example。我正在使用我的企业帐户,因此可能存在一些与此相关的问题。
这是 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>
有没有人知道我遗漏了什么,或者我还能尝试什么?
编辑:公开分享传播sheet 不是一种选择。这是一封商务电子邮件,因此,我在这里得到的唯一选择是在整个域范围内共享它,正如我在上面已经说过的那样。此外,这是一个业务传播sheet,其中包含敏感数据。公开揭露它真的没有意义。除此之外,我已经与服务邮箱分享了spreadsheet。毕竟,我想要实现的是在不使用 oauth 的情况下从 spreadsheet 读取数据,并将其嵌入到网站上(我知道有一个内置的嵌入工具,但那不是'不适合我,因为我需要添加一个 html 过滤器)。
如果您尝试访问不是 public 的电子表格,您将不得不使用 OAuth 2.0。由于它不是 public 资源,您必须使用有权访问此资源的帐户的 凭据 。
在您提供的示例中,他们正在访问 public 资源,因此 API 密钥就足够了。那不是你的情况。
参考:
这是 Google 工作表 API 上的另一个错误 403。嗯,尝试使用一些自定义 HTML 过滤器从 Spreadsheet 读取数据并将其公开在网站上。
所以,有这个问题: Error 403 on Google Sheets API
仍然,我不知道该怎么办。我在 google 云平台中设置了我的服务帐户,授予它访问我的 Spreadsheet 的权限 - 我什至通过 link 访问了我的 SpreadSheet(但这仅限于来自我的组织,所以它看起来毫无用处)。我还为我的服务帐户激活了域范围的委派 - 根本没有任何区别。我很确定问题与错误的密钥或某些拼写错误无关,因为当我从 sheet 中删除对服务电子邮件的访问权限时,我收到 403 错误,但它附带一条消息说来电者无权访问该价差sheet.
人们不断提到 OAuth,但我不想使用它,因为我打算使用简单的 API 访问,如 this Google GitHub example。我正在使用我的企业帐户,因此可能存在一些与此相关的问题。
这是 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>
有没有人知道我遗漏了什么,或者我还能尝试什么?
编辑:公开分享传播sheet 不是一种选择。这是一封商务电子邮件,因此,我在这里得到的唯一选择是在整个域范围内共享它,正如我在上面已经说过的那样。此外,这是一个业务传播sheet,其中包含敏感数据。公开揭露它真的没有意义。除此之外,我已经与服务邮箱分享了spreadsheet。毕竟,我想要实现的是在不使用 oauth 的情况下从 spreadsheet 读取数据,并将其嵌入到网站上(我知道有一个内置的嵌入工具,但那不是'不适合我,因为我需要添加一个 html 过滤器)。
如果您尝试访问不是 public 的电子表格,您将不得不使用 OAuth 2.0。由于它不是 public 资源,您必须使用有权访问此资源的帐户的 凭据 。
在您提供的示例中,他们正在访问 public 资源,因此 API 密钥就足够了。那不是你的情况。