我的想法是创建一个google工作表,将其公开,然后从我的工作计算机linux/bash上访问它,每天读取/写入值。
我有一个公开的谷歌文档表,任何人都可以找到/编辑。这是图纸ID:1F6jh6756xNDlDYIvZm_3TRXB59EFHGEC7JDWZ-Nx0
照章办事https://developers.google.com/sheets/api/samples/reading
curl'https://sheets.googleapis.com/v4/spreadsheets/1F6jh6756xNDlDYIvZm_3TrXb59EFEFHGEC7jdWz-Nx0/values/Sheet1!A1: A3'
返回:
{
"error": {
"code": 403,
"message": "The request is missing a valid API key.",
"status": "PERMISSION_DENIED"
}
}
我读了很多书,特别是在这里,我发现了一个复杂的解决方案。也就是说,如果您想在短短1小时内访问您的公共工作表。
您浏览https://developers.google.com/oauthplayground/获得v4 api的授权,然后获得“授权代码”,然后获得“刷新令牌”,最后是“访问令牌”。
使用此“访问令牌”,您可以像这样访问公共工作表curl'https://sheets.googleapis.com/v4/spreadsheets/1F6jh6756xNDlDYIvZm_3TrXb59EFEFHGEC7jdWz-Nx0/values/Sheet1!A1:A3'-H“授权:持有人ya29.GlvaBLjrTdsSuSllr3u2nAiC-BOsjvIOE1x5afU3xiafB-FTODLWDTFAFUIMGF1RID5BZXITXRX7VDETXWW4Q1UVW9ZRndKFM3I2LZNT1HK2NTWZX6OXU-NAG”
返回:
{
"range": "Sheet1!A1:A3",
"majorDimension": "ROWS",
"values": [
[
"a1"
],
[
"a2"
],
[
"a3"
]
]
}
完美。理论上,“访问令牌”在一小时后过期,“刷新令牌”永远不会过期。所以你会保存令牌,试着用“访问令牌”读取工作表,如果它失败了,使用“刷新令牌”获得新的“访问令牌”继续。
但是,我有一打“刷新令牌”被赎回/过期,“授权代码”过期,几个小时后一切都不起作用。为什么?
如果没有这种授权,我怎么能使用curl访问我的谷歌表单bash?尤其是因为我的工作表是公开的,任何人都可以用浏览器编辑。
有没有其他方法可以通过其他永久授权来实现这一点?为什么不使用电子邮件和通行证?
提到了“应用编程接口密钥”,但从未解释过。有人能一步一步地解释一下这个方法吗?
所有GoogleAPI都要求您在GoogleDeveloper控制台上创建一个项目,并标识您自己和您的应用程序,甚至需要访问公共数据。由于您已经将工作表设置为public,您只需转到googledeveloper控制台并创建一个公共api密钥,记住要激活googlesheetsapi。然后在请求中添加key=[YourKey]作为参数。
更新开发控制台:
创建项目并获取密钥:
谷歌开发者控制台-
启用它:
谷歌开发者控制台-
更新:
{“错误”:{“代码”:403,“消息”:“请求缺少有效的API密钥。”,“状态”:“权限被拒绝”}
意味着你没有向谷歌表明自己的身份。2015年,谷歌开始要求我们识别自己,你不能只使用谷歌应用编程接口而不告诉谷歌你是谁。你可以通过在[谷歌开发者控制台1上创建一个项目来做到这一点。创建一个API密钥,并在所有请求中使用该API密钥。这只适用于公共数据。
https://sheets.googleapis.com/v4/spreadsheets/1F6jh6756xNDlDYIvZm_3TrXb59EFEFHGEC7jdWz-Nx0/values/Sheet1!A1: A3?Key=YOURKEY
注意:对于私有用户数据,您需要使用OAuth,并使用access_token=您的令牌或设置标头
授权:持有人ya29。GlvaBLjrTdsSuSllr3u2nAiC-BOsjvIOE1x5afU3xiafB-FTODLWDTFFABUIMGF1RID5BSZXITXRX7VDETXWW4Q1UVW9ZrNdKfM3I2LZNT1HK2NTWZX6OXU-NAG。
访问令牌与API密钥不同。
另一种方法是与Google Cloud服务号共享工作表,然后使用服务号向API客户端授权。如果文档是公开的,您不需要共享它。
有关创建服务号和阅读Google文档的说明,这些说明也应适用于工作表https://www.futurice.com/blog/read-goog-doc-using-service-account
如果您不想弄乱OAuth2,可能更简单的解决方案是使用第三方软件。https://sheetdb.io允许您使用Google电子表格并为您执行OAuth2。此外,API比Google更简单,请查看以下文档:https://docs.sheetdb.io