作者PsMonkey (痞子军团团长)
看板Google
标题[docs] Google Sheet API v3 升 v4
时间Fri Aug 20 03:28:45 2021
有连结可以点、有表情符号、其他没差的 blog 版:
https://pt2club.blogspot.com/2021/08/google-sheet-api-v3-v4.html
----------------------------------------------------------------------
之前用这个网址格式取得 JSON 格式 Google Sheet 资料,一直相安无事:
https://spreadsheets.google.com/feeds/list/SHEET_ID/
TAB_INDEX/public/values?alt=json
然後大概从 2021/8/15 开始,就有机率读取不成功(对,有时候会成功 =.=),
有的时候是炸 CORS 问题、有的时候是炸 404。
狗了一下的结果,应该就是 Google Sheet API v3 在 2021/8/2 停用所导致的。
至於 v3 版跟应该还会继续活着的 GData 有什麽关系、
为什麽是「有机率挂掉」就… 不研究… [盖牌][翻白眼]
经过几天的摸索,如果只是单纯要取得 JSON,那麽会遇到下面这几件事情。
首先要去 Google Cloud Platform 搞一个 API 金钥(以下简称 API_KEY)。
如果之前没有用过可能还要先开一个(看起来毫无意义的)专案然後才能产生…
有了 API 金钥之後,接下来是把网址改成这个格式:
https://sheets.googleapis.com/v4/spreadsheets/SHEET_ID/
values/RANGE&key=API_KEY
这边不再是用「第几个工作表」(或是那个根本不知道怎麽来的 id 值)的方式,
而是指定 RANGE。完整版的 RANGE 大概是「FOO!A1:D100」的长相,
这表示要求「FOO」这个工作表的 A1~D100 这个 cell 范围的资料。
实测之後(找不到文件… )发现允许下列几种变形:
+ FOO:可以省略 cell 范围。如此会回传整个 FOO 的资料
+ A1:D100:可以省略工作表名称。
如此会回传第一个工作表的指定 cell 范围的资料
回传的 JSON 也跟以前不一样,v4 版变得很纯:
{
"range": "'FOO'!A1:D100",
"majorDimension": "ROWS",
"values": [
["ColumnA", "栏位B", "ColumnC", "栏位D"],
["第一笔A", "第一笔B", "第一笔C", "第一笔D"],
[],
["", "第三笔B"]
}
+ v3 会把 sheet 的第一个 row 的值当成 JSON 的 key 值;
v4 纯粹就是给你一个二维字串阵列。(反正都能指定范围了)
+ v3 遇到第一个空白 row 就会视为後面没有资料停止输出;
v4 会在指定范围内确定是否以下空白才停止输出,
其中夹杂的空白行会给一个空阵列。
+ 如果该 row 第 n 个 column 之後都没有值,
则该 row 对应的阵列长度只到 n - 1。
1~n - 1 当中如果有 column 没有值,会给空字串。
一样是实测结果(还是找不到文件… ),
下列状况会导致 server 给不是 200 的 HTTP status code:
+ 400:range 无法正常解析
+ 403:API_KEY 值不正确
+ 404:SHEET_ID 值不正确
最後,用 v4 版,sheet 可以不用做「发布到网路」这一个动作,
但是「共用」设定的「取得连结」要设定为「知道连结的使用者(检视者)」
--
钱锺书:
说出来的话
http://www.psmonkey.org
比不上不说出来的话
Hiking / Singapore 板
只影射着说不出来的话
and more......
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 218.166.173.181 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Google/M.1629401330.A.B33.html
1F:→ microloft: 不想处理金钥的话还是可以继续用发布到网路的方式 08/20 05:17
2F:→ microloft: 然後自己 csv 转 json 08/20 05:17
CSV 也太悲情了点
※ 编辑: PsMonkey (36.239.87.32 台湾), 08/21/2021 13:35:56
3F:推 wang0424: 专业文 推一个 08/25 18:23