我的想法是创建一个谷歌表单,将其公开,然后从我的工作计算机Linux/Bash访问它,以便每天读取/写入值。
我有一个公共的谷歌文档表,任何人都可以找到/编辑。这是图纸ID:1F6jh6756xNDlDYIvZm_3TrXb59EFEFHGEC7jdWz-Nx0
按书做https://developers.google.com/sheets/api/samples/readingcurl '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"
}
}
我读了很多,特别是在这里Google Sheet API v4我发现了一个复杂的解决方案。也就是说,如果您希望在短短1小时内访问您的公共表单。
你浏览到https://developers.google.com/oauthplayground/获取v4 API的授权,然后获取“授权代码”,然后获取“刷新令牌”,最后是“访问令牌”。
使用这个“访问令牌”,您可以像这样访问公共表curl 'https://sheets.googleapis.com/v4/spreadsheets/1F6jh6756xNDlDYIvZm_3TrXb59EFEFHGEC7jdWz-Nx0/values/Sheet1!A1:A3' -H "Authorization: Bearer ya29.GlvaBLjrTdsSuSllr3u2nAiC-BOsjvIOE1x5afU3xiafB-FTOdLWDtfabuIMGF1rId5BsZxiTXxrx7VDEtxww4Q1uvW9zRndkfm3I2LZnT1HK2nTWzX_6oXu-NAG"
返回:
{
"range": "Sheet1!A1:A3",
"majorDimension": "ROWS",
"values": [
[
"a1"
],
[
"a2"
],
[
"a3"
]
]
}
完美。理论上“访问令牌”在一小时后到期,“刷新令牌”永远不会到期。因此,您将保存令牌,尝试使用“访问令牌”读取工作表,如果失败,请使用“刷新令牌”获得新的“访问令牌”并继续。
但是,我有一打的“刷新令牌”的赎回/过期,“授权码”的过期,所有的一切都没有工作后,几个小时。为什么?
如果没有这种授权,我怎么能用curl访问我谷歌表单bash?特别是因为我的工作表是公开的,任何人都可以用浏览器编辑。
有没有其他方法可以用其他永久授权来做到这一点?为什么不使用电子邮件和通行证?
“API密钥”被提及但从未解释。谁能一步一步地解释一下这个方法?
4条答案
按热度按时间yacmzcpb1#
所有Google API都要求您在Google developer console上创建一个项目,并标识您自己和您的应用程序,甚至访问公共数据。既然你已经将工作表设置为public,你可以直接进入google developer console并创建一个公共API密钥,记得激活google sheets api。然后在请求中添加key=[YourKey]作为参数。
更新Dev控制台:
创建项目并获取密钥:
Google developer console->创建项目-> credentials下拉列表-> API Key
启用它:
Google developer console-> library查找工作表启用它。
更新:
{“error”:{“code”:403,“消息”:“请求缺少有效的API密钥。",“status”:“PERMISSION_DENIED”} }
这意味着你没有向Google表明自己的身份。在2015年,Google开始要求我们识别自己,你不能在不告诉Google你是谁的情况下使用Google API。您可以通过在[Google开发者控制台1.创建一个API密钥,并在所有请求中使用该API密钥。这只适用于公共数据。
https://sheets.googleapis.com/v4/spreadsheet/1F6jh6756xNDlDYIvZm_3TrXb59EFEFHGEC7jdWz-Nx0/values/Sheet1!A1:A3?key=YOurKEY
注意:对于私有用户数据,您需要使用OAuth并使用access_token=your token或设置header
授权:承载ya 29. GlvaBLjrTdsSuSllr 3u 2nAiC-BOsjvIOE 1x 5afU 3xiafB-FTOdLWDtfabuIMGF 1 rId 5 BsZxiTXrx 7VDEtxww 4 Q1 uvW 9 zRndkfm 3 I2 LZnT 1HK 2nTWzX_6 oXu-NAG。
访问令牌与API密钥不同。
j2datikz2#
如果你不想搞砸OAuth2,也许更简单的解决方案是使用第三方软件。https://sheetdb.io允许您使用Google电子表格并为您执行OAuth2。此外,API比Google更简单,请在此处查看文档:https://docs.sheetdb.io
xvw2m8pv3#
另一种方法是与Google Cloud服务帐户共享工作表,然后使用服务帐户与API客户端进行授权。如果文档是公开的,则无需共享。
有关创建服务帐户和阅读Google文档的说明,这些说明也适用于工作表https://www.futurice.com/blog/read-goog-doc-using-service-account
jqjz2hbq4#
一个建议-永远不要允许写访问公共谷歌表。任何人都可以添加大量数据并导致各种问题。
始终控制可编辑人员的访问权限。
允许任何人以编程方式进行任意编辑甚至更糟。我可以迅速编写一个脚本,在几秒钟内用垃圾数据填满你的Google表单。对于其他查看它的人来说,该工作表看起来像是一堆混乱的数据。
现在回答你的问题。以下是创建OAuth 2.0 ClientID的基本步骤:
1.在Credentials中,单击Create Credentials > OAuth client ID。单击应用程序类型>桌面应用程序。
1.在“名称”字段中,键入凭据的名称。此名称仅显示在Google Cloud控制台中。
1.单击“创建”。OAuth客户端创建屏幕出现,显示您的新客户端ID和客户端密码。
1.单击确定。新创建的凭据将显示在OAuth 2.0客户端ID下。
1.将下载的JSON文件保存为credentials.json,并将文件移动到您的工作目录。
按照其余的说明设置Go应用程序的环境,以通过Golang验证,授权和操作Google Sheet。对于其他语言,请在网页的左侧边栏中选择相应的条目。