HTTP Google表格API v4如何在没有OAuth 2.0的情况下访问?

14 bash curl http google-api google-sheets

我的想法是创建一个google工作表,将其公开,然后从我的工作计算机linux/bash访问它,以便每天读取/写入值.

我有一个公共谷歌文档表,任何人都可以找到/编辑.这是工作表ID:1F6jh6756xNDlDYIvZm_3TrXb59EFEFHGEC7jdWz-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"
  }
}
Run Code Online (Sandbox Code Playgroud)

我已经阅读了很多内容,特别是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"
    ]
  ]
}
Run Code Online (Sandbox Code Playgroud)

完善.理论上,"访问令牌"在一小时后到期,"刷新令牌"永不过期.因此,您将保存令牌,尝试使用"访问令牌"读取表单,如果失败则使用"刷新令牌"获取新的"访问令牌"并继续.

但是,我已经有十几个"刷新令牌"被兑换/过期,"授权码"已过期,几个小时后一切都无效.为什么?

如何在没有这种授权的情况下使用curl访问我的谷歌表格bash?特别是因为我的工作表是公开的,任何人都可以使用浏览器进行编辑.

是否有另一种方法可以通过其他永久授权来完成此操作?为什么不使用电子邮件并通过?

提到"API密钥"但从未解释过.有人可以一步一步解释这个方法吗?

DaI*_*mTo 17

所有Google API都要求您在[Google开发人员控制台1上创建项目,并标识您自己和您的应用程序,甚至是访问公共数据.由于您已将工作表设置为公开,因此您只需访问Google开发者控制台并创建公共API密钥,请记住激活Google工作表api.然后只需在您的请求中添加key = [YourKey]作为参数.

更新开发控制台:

创建项目并获取密钥:

Google开发人员控制台 - >创建项目 - > 凭据下拉菜单 - > API密钥

在此输入图像描述

启用它:

谷歌开发者控制台 - > 查找表启用它.

更新:

{"error":{"code":403,"message":"请求缺少有效的API密钥.","status":"PERMISSION_DENIED"}}

意味着您尚未向Google表明自己的身份.在2015年Google Start要求我们确定您自己不能使用Google API而不告诉谷歌您是谁.您可以通过在[Google开发者控制台1]上创建项目来实现.创建API密钥并在所有请求中使用该API密钥.这仅适用于公共数据.

https://sheets.googleapis.com/v4/spreadsheets/1F6jh6756xNDlDYIvZm_3TrXb59EFEFHGEC7jdWz-Nx0/values/Sheet1!A1:A3?key=YOurKEY

注意:对于私人用户数据,您需要使用OAuth并使用access_token =您的令牌或设置标头

授权:承载ya29.GlvaBLjrTdsSuSllr3u2nAiC-BOsjvIOE1x5afU3xiafB-FTOdLWDtfabuIMGF1rId5BsZxiTXxrx7VDEtxww4Q1uvW9zRndkfm3I2LZnT1HK2nTWzX_6oXu-NAG.

访问令牌与API密钥不同.

  • 当我尝试使用 API 密钥编写工作表时,出现错误 { "error": { "code": 401, "message": "Request is missing required authentication credential。预期的 OAuth 2 访问令牌、登录 cookie 或其他有效身份验证凭据。请参阅 https://developers.google.com/identity/sign-in/web/devconsole-project.", "status": "UNAUTHENTICATED" } } POST: https://sheets.googleapis.com/v4 /spreadsheets/1dgdfgdgdftry59595euDfxtqkC56656544o:batchUpdate?key=:FGzaSyC3B_kjvqoFJKC1oo (2认同)

小智 5

如果你不想搞乱OAuth2,也许更简单的解决方案是使用第三方软件。https://sheetdb.io允许您使用 Google 电子表格并为您执行 OAuth2。此外,该 API 比 Google 更简单,请查看此处的文档: https: //docs.sheetdb.io