GoogleSheetsv4更新效果JSON端点数据?2021年6月8日关闭
我阅读了这篇关于 Google Sheet API v4 更新的文章。我需要更改当前的代码结构吗?
我正在使用简单的 JSON 数据在网络上显示 Google 工作表数据。我使用以下代码在网络上制作了一些 PHP 和 JavaScript 基础项目:
.HTML
var sf = https://spreadsheets.google.com/feeds/list/1l7VfPOI3TYtPuBZlZ-JMMiZW1OK6rzIBt8RFd6KmwbA/1/public/values?alt=json
$.getJSON(sf, function(data) {
var sd = data.feed.entry;
key = data.feed.entry[i]['gsx$key']['$t'];
name = data.feed.entry[i]['gsx$name']['$t'];
img = data.feed.entry[i]['gsx$img']['$t'];
rice = data.feed.entry[i]['gsx$price']['$t'];
.php
$url = 'https://spreadsheets.google.com/feeds/list/1l7VfPOI3TYtPuBZlZ-JMMiZW1OK6rzIBt8RFd6KmwbA/1/public/values?alt=json';
$file = file_get_contents($url);
$json = json_decode($file);
$rows = $json->{'feed'}->{'entry'};
$key = $row->{'gsx$key'}->{'$t'};
$price = $row->{'gsx$price'}->{'$t'};
$img = $row->{'gsx$img'}->{'$t'};
$name = $row->{'gsx$name'}->{'$t'};
我真的需要更新任何东西吗?
回答
我相信你的目标如下。
- 您想将端点从 Sheets API v3 更改为其他端点。
问题和解决方法:
在 Sheets API v3 中,可以在没有访问令牌和 API 密钥的情况下使用此 API。但是对于 Sheets API v4,需要使用访问令牌和/或 API 密钥。似乎这是当前的规范。当我看到您的脚本时,未使用访问令牌和 API 密钥。因此,在此答案中,作为一种解决方法,我想提出一种无需访问令牌和 API 密钥即可从电子表格中检索值的方法。终点如下。
https://docs.google.com/spreadsheets/d/{spreadsheetId}/gviz/tq
这是与查询语言一起使用的端点。重要的一点是,在这种情况下,需要将 Google 电子表格作为 Web 发布来发布。请注意这一点。当我看到您的电子表格的 URL 时,电子表格似乎是作为 Web 发布发布的。因此,您的电子表格可以与以下脚本一起使用。
在这个答案中,使用了 Javascript 脚本。
示例脚本 1:
在这个示例脚本中,电子表格的值被直接检索为 CSV 数据。
var sf = "https://docs.google.com/spreadsheets/d/1l7VfPOI3TYtPuBZlZ-JMMiZW1OK6rzIBt8RFd6KmwbA/gviz/tq?tqx=out:csv";
$.ajax({url: sf, type: 'GET', dataType: 'text'})
.done(function(csv) {
console.log(csv);
})
.fail((e) => console.log(e.status));
示例脚本 2:
在此示例脚本中,电子表格的值作为 JSON 数据检索,并将其解析为标题行和值。
var sf = "https://docs.google.com/spreadsheets/d/1l7VfPOI3TYtPuBZlZ-JMMiZW1OK6rzIBt8RFd6KmwbA/gviz/tq?tqx=out:json";
$.ajax({url: sf, type: 'GET', dataType: 'text'})
.done(function(data) {
const r = data.match(/google.visualization.Query.setResponse(([sSw]+))/);
if (r && r.length == 2) {
const obj = JSON.parse(r[1]);
const table = obj.table;
const header = table.cols.map(({label}) => label);
const rows = table.rows.map(({c}) => c.map(({v}) => v));
console.log(header);
console.log(rows);
}
})
.fail((e) => console.log(e.status));
示例脚本 3:
例如,当使用 Sheets API v4 时,示例脚本如下。在这种情况下,将使用 API 密钥。并且需要公开共享电子表格。请注意这一点。
var url = "https://sheets.googleapis.com/v4/spreadsheets/1l7VfPOI3TYtPuBZlZ-JMMiZW1OK6rzIBt8RFd6KmwbA/values/Sheet1?key=###"
$.getJSON(url, function(data) {
console.log(data.values);
});
参考:
- 查询语言参考
- 响应格式
- 方法:Sheets API v4 的电子表格.get
- @bomberjackets 将“gid=###############”附加到查询字符串的末尾,如下所示:“/d/1l7VfPOI3TYtPuBZlZ-JMMiZW1OK6rzIBt8RFd6KmwbA/gviz/tq?tqx=out:json&gid #########",其中 gid 编号是在 google sheet url 中找到的工作表编号
THE END
二维码