joc*_*hen 27 json google-sheets
如何使用JSON访问(新式)Google表格的内容?我的目标是从JavaScript访问值,因此我需要能够通过HTTP下载JSON.
示例:如何从此工作表中下载JSON数据?
我试图通过网络搜索找到答案,但最终失败了:
Web上的许多教程都是从key=...在url中查找值的说明开始的.我导出工作表时获得的URL是https://docs.google.com/spreadsheets/d/1mhv1lpzufTruZhzrY-ms0ciDVKYiFJLWCMpi4OOuqvI/pubhtml?gid=1822753188&single=true并且没有key=....
"访问公开Google表格"的答案似乎表明我应该尝试https://docs.google.com/spreadsheets/d/1mhv1lpzufTruZhzrY-ms0ciDVKYiFJLWCMpi4OOuqvI/export?format=csv&id=1mhv1lpzufTruZhzrY-ms0ciDVKYiFJLWCMpi4OOuqvI&gid=1822753188获取CSV版本,但这对我不起作用:我得到一个登录页面而不是数据.
我找到了使用Google Apps脚本的方法,但这些似乎需要在浏览器中执行一些用户操作,而不是提供下载链接.
Sen*_*ful 39
如果要使用最新的API(v4),则需要执行以下操作:
使用表格的请求:
https://sheets.googleapis.com/v4/spreadsheets/SPREADSHEET_ID/values/RANGE?key=API_KEY
Run Code Online (Sandbox Code Playgroud)然后,您将获得一个干净的JSON响应:
{
"range": "Sheet1!A1:D5",
"majorDimension": "ROWS",
"values": [
["Item", "Cost", "Stocked", "Ship Date"],
["Wheel", "$20.50", "4", "3/1/2016"],
["Door", "$15", "2", "3/15/2016"],
["Engine", "$100", "1", "30/20/2016"],
["Totals", "$135.5", "7", "3/20/2016"]
],
}
Run Code Online (Sandbox Code Playgroud)
请注意,如果要指定一个网页的全部内容,如标识Sheet1是完全有效的.
有关更多信息,请参阅基本阅读
从v4 API开始,所有请求都必须附带标识符(例如API密钥):
对Google表格API请求公共数据的请求必须附带一个标识符,该标识符可以是API密钥或访问令牌.
按照链接文档中的步骤在凭据页面上创建API密钥.
确保:
在新的Sheets API v4中,没有明确的可见性声明.API调用是使用电子表格ID进行的.如果应用程序无权访问指定的电子表格,则会返回错误.否则呼叫继续进行.
请注意,您并不需要将表发布到网上.您需要做的就是确保拥有该链接的任何人都可以访问该表.
(即,当您单击Google表格API上的创建凭据时,选择其他非UI,用户数据,并显示"无法从没有UI的平台访问用户数据,因为它需要用户交互才能登录."您可以安全地忽略该消息.API Key是您真正需要的,因为这是公共数据.)
该请求缺少有效的API密钥.
您没有key=在通话中包含该参数.
API密钥无效.请传递有效的API密钥.谷歌开发者安慰
您提供了错误的API密钥.确保您正确输入了密钥.如果您还没有密钥,请转到Google开发人员控制台并创建一个密钥.
未找到API密钥.请传递有效的API密钥.
Google开发者控制台API密钥
您的API密钥可能是正确的,但您很可能没有添加Google表格权限.转到Google开发人员控制台API密钥页并添加工作表权限.
来电者没有权限
您的工作表未设置为可公开访问.
joc*_*hen 22
我终于(有点)解决了我的问题.仅供将来参考,如果有其他人遇到同样的麻烦,我想出的解决方案:
要使工作表可公开访问,需要使工作表可公开访问.这是使用菜单条目在Google表格网页界面中完成的File > Publish to the web ... > link > publish.可以发布整个电子表格或单个工作表.
Google表格API网页介绍了以编程方式从Google表格访问数据的API.此API使用表单https://spreadsheets.google.com/feeds/.../key /worksheetId的 URL /....有点奇怪的是,key和worksheetId的含义似乎没有在API文档中解释.
我的实验表明,可以通过网页界面获取用于访问工作表的部分URL来找到关键值(另请参见此处).关键是一切之后/d/,直到下一个斜线.对于问题中的电子表格,关键是这样1mhv1lpzufTruZhzrY-ms0ciDVKYiFJLWCMpi4OOuqvI.该worksheetId似乎是一个整数,给在电子表格中的工作表中的位置.对于问题中的示例,必须知道所显示的工作表是第二个工作表,在这种情况下工作表是2.
API定义public和private请求.要在不进行身份验证的情况下访问导出的资源,public必须使用请
在"检索基于列表的源"部分中解释了从电子表格中获取数据的API调用(单击示例中的"协议"选项卡).所需的URL从问题中的电子表格中提取数据
对此URL的HTTP GET请求将该数据作为XML返回.(我还没有找到一种将数据作为JSON获取的方法.)
通常的保护跨站请求使得难以通过Web应用程序中的JavaScript XML RPC调用来访问数据.解决此问题的一种方法是通过Web服务器代理API调用(例如,使用nginx的proxy_pass指令).
上述步骤至少是问题中问题的部分解决方案.唯一的困难是数据以XML而不是JSON的形式返回.由于API文档没有提到JSON,也许不再可能以这种格式提取数据了?
以下是使用这些相同的URL参数获取JSON的方法:
"https://spreadsheets.google.com/feeds/list/" + spreadsheetID + "/od6/public/values?alt=json";
Run Code Online (Sandbox Code Playgroud)
信任@jochen,答案一直到XML "https://spreadsheets.google.com/feeds/list/" + spreadsheetID + "/od6/public/" + sheetID;
正如@jochen的答案所解释的,这sheetID是基于电子表格中工作表的顺序。
| 归档时间: |
|
| 查看次数: |
19472 次 |
| 最近记录: |