Google Sheets 是否停止允许 json 访问?

问题描述 投票:0回答:5

我有一个应用程序,可以打开我已发布到网络上的电子表格的 json 版本。我使用了此网站上的说明:https://www.freecodecamp.org/news/cjn-google-sheets-as-json-endpoint/

几个月来一直工作正常,但今天我意识到我的 json 文件的 url 从昨天开始就不再工作了。它显示消息:“抱歉,目前无法打开文件。请检查地址并重试。”不过,以网页形式查看电子表格的常规链接仍然有效。

Google 是否放弃了对此功能的支持?还有其他方法可以通过 URL 获取 json 格式的电子表格数据吗?我开始研究 Google Developer API,但它真的很令人困惑。

json google-sheets google-sheets-api google-data-api
5个回答
25
投票

您正在使用 Google 数据协议JSON Alt 类型变体。该协议已过时并且似乎不再可靠地工作。 GData API 目录 告诉:

Google Spreadsheets Data API:GData 版本仍然有效。已被 Google Sheets API v4 取代。

Google Sheets API v4 是一个现代的 RESTful 接口,通常与 客户端库 一起使用来处理数据请求的身份验证和批处理。如果您不想进行完整的客户端实现,David Kutcher 使用 jQuery 为 GData JSON Alt 类型提供以下 v4 模拟:

GData(旧版本,不推荐):

var url = 'https://spreadsheets.google.com/feeds/list/' +
           spreadsheet_id + '/' + tab_ordinal + '/public/values?alt=json';
($.getJSON(url, 'callback=?')).success(function(data) {
  // ...
};

V4(新版本,推荐):

var url = 'https://sheets.googleapis.com/v4/spreadsheets/' +
           spreadsheet_id + '/values/' + tab_name +
           '?alt=json&key=' + api_key;
($.getJSON(url, 'callback=?')).success(function(data) {
  // ...
};

...哪里:

  • spreadsheet_id
    是电子表格地址中由字母和数字组成的长字符串 - 它是
    /d/
    /edit
  • 之间的位
  • tab_ordinal
    是工作表的编号 — 选项卡栏中出现的第一个工作表是工作表编号
    1
    ,第二个是
    2
    ,依此类推
  • tab_name
    是工作表的名称,即当您打开电子表格进行编辑时,您在窗口底部的选项卡栏中看到的名称
  • api_key
    是您从 Google Cloud Platform 控制台
  • 获取的 API 密钥

请注意,两个版本之间的 JSON 输出格式有所不同。

使用 GData 模式,需要将电子表格共享为 文件 > 共享 > 发布到网络

使用 V4 模式,电子表格需要共享为 文件 > 共享 > 与他人共享 > 知道链接的任何人都可以查看。


18
投票

截至 2022 年 3 月:

如果您不想创建密钥,可以使用以下 URL 格式:

https://docs.google.com/spreadsheets/d/{spreadsheetId}/gviz/tq
下载

json.txt

格式的文件

google.visualization.Query.setResponse({json});
从中你必须切出 json

-或--

只需按照官方文档配置一个密钥即可。

    转到 Google Console 并创建一个项目(或使用现有项目)
  1. 转到
  2. Credenetials 页面并创建 API 密钥
  3. 包含库中的 Sheets API
  4. 瞧!
您现在可以使用 URL 格式获取 json:

https://sheets.googleapis.com/v4/spreadsheets/{spreadsheetId}/values/{sheetName}?alt=json&key={theKey}
编辑:该表应该是公开的,任何有链接的人都可以查看


4
投票
没有 jQuery ...

var url = 'https://docs.google.com/spreadsheets/d/'+id+'/gviz/tq?tqx=out:json&tq&gid='+gid;
带有电子表格的 id 和工作表的 gid

https://codepen.io/mikesteelson/pen/wvevppe 例子:

var id = '______your_speadsheet_id________'; var gid = '0'; var url = 'https://docs.google.com/spreadsheets/d/'+id+'/gviz/tq?tqx=out:json&tq&gid='+gid; fetch(url) .then(response => response.text()) .then(data => document.getElementById("json").innerHTML=myItems(data.substring(47).slice(0, -2)) ); function myItems(jsonString){ var json = JSON.parse(jsonString); var table = '<table><tr>' json.table.cols.forEach(colonne => table += '<th>' + colonne.label + '</th>') table += '</tr>' json.table.rows.forEach(ligne => { table += '<tr>' ligne.c.forEach(cellule => { try{var valeur = cellule.f ? cellule.f : cellule.v} catch(e){var valeur = ''} table += '<td>' + valeur + '</td>' } ) table += '</tr>' } ) table += '</table>' return table }
    

2
投票
gdata 是 Sheets API 的旧版本,它已关闭。请在此处查看 Google 的公告

https://cloud.google.com/blog/products/g-suite/migrate-your-apps-use-latest-sheets-api


0
投票
我相信

https://sheet2api.com可以做到这一点。

JS 示例:

import Sheet2API from 'sheet2api-js'; const url = 'https://sheet2api.com/v1/FgI6zV8qT121/characters/'; const options = {}; Sheet2API.read(url, options).then(function(result){ console.log(result); }, function(error){ console.log(error); });
    
© www.soinside.com 2019 - 2024. All rights reserved.