【问题标题】:Google Sheets v4 Update Effect JSON Endpoint Data? Shut down on June 8, 2021Google Sheets v4 更新效果 JSON 端点数据? 2021 年 6 月 8 日关闭
【发布时间】:2021-03-04 10:06:51
【问题描述】:

我读到了article 关于 Google Sheet API v4 更新的内容。我需要更改当前的代码结构吗?

我正在使用simple JSON data 在网络上显示 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'};

我真的需要更新什么吗?

【问题讨论】:

    标签: javascript php google-apps-script google-sheets google-sheets-api


    【解决方案1】:

    我相信你的目标如下。

    • 您想将端点从 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:

    在此示例脚本中,Spreadsheet 的值被检索为 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\(([\s\S\w]+)\)/);
      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(e => e ? (e.v || "") : "")); // Modified from 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);
    });
    

    参考资料:

    【讨论】:

    • 所有信息都是正确的。在某些项目中,我没有使用任何 API 密钥。我只使用“发布为网络”并转换成这个“spreadsheets.google.com/feeds/list/…”并在我的网站上显示 JSON 数据。 (1) v4 对“发布为网络”技术的影响? (2) 我应该做什么。或者这种“作为网络发布”技术很好。谷歌在这方面没有任何改变? @田池
    • @Manish S 感谢您的回复。我认为您的 https://spreadsheets.google.com/feeds/list/###/1/public/values?alt=json 端点适用于 Sheets API v3。而且,Sheets API v3 将在不久的将来被弃用。因此,您想更改端点以使用publish as a web 从 Web 发布的电子表格中检索值。我是这样理解的。如果我误解了你的问题,请告诉我。
    • @Manish S 关于您的 2 个新问题,A1:我认为 publish as a web 不是 Sheets API v3。这用于查询语言和 Google 可视化。 A2:因为publish as a web 不是Sheets API v3,所以在弃用Sheets API v3 之后,可以使用我的答案中的端点https://docs.google.com/spreadsheets/d/###/gviz/tq。如果我误解了您的新 2 个问题,我深表歉意。
    • @bomberjackets 将“gid=###############”附加到查询字符串的末尾,如下所示:“/d/1l7VfPOI3TYtPuBZlZ-JMMiZW1OK6rzIBt8RFd6KmwbA/gviz/ tq?tqx=out:json&gid=#########",其中 gid 编号是在 google sheet url 中找到的 sheet number
    • @lincolnberryiii 感谢您的回复。虽然我不确定我是否能正确理解您的情况,但我更新了示例脚本 2。请您确认一下吗?
    猜你喜欢
    • 2022-08-16
    • 1970-01-01
    • 1970-01-01
    • 2012-05-17
    • 1970-01-01
    • 2021-08-21
    • 1970-01-01
    • 2021-09-13
    • 1970-01-01
    相关资源
    最近更新 更多