Authentication API键和已发现的Google sheets函数

Authentication API键和已发现的Google sheets函数,authentication,google-api,google-sheets-api,api-key,Authentication,Google Api,Google Sheets Api,Api Key,这个问题是关于在使用Python写入Google工作表时使用API密钥进行身份验证。下面的示例中,我正在使用URL“发现”API: service = discovery.build('sheets', 'v4', discoveryServiceUrl= 'https://sheets.googleapis.com/$discovery/rest?version=v4', developerKey=APIKEY) 以这种方式传递API键似乎有效(不会引发异常)。之后,我尝试

这个问题是关于在使用Python写入Google工作表时使用API密钥进行身份验证。下面的示例中,我正在使用URL“发现”API:

service = discovery.build('sheets', 'v4', discoveryServiceUrl=
    'https://sheets.googleapis.com/$discovery/rest?version=v4',
    developerKey=APIKEY) 
以这种方式传递API键似乎有效(不会引发异常)。之后,我尝试使用
batchUpdate
更新电子表格:

service.spreadsheets().batchUpdate(spreadsheetId=SHEETID,
    body={'requests': requests}).execute()
这会引发401HTTP错误:“请求缺少所需的身份验证凭据。”其他函数如
values().clear()
会导致相同的错误


如何将API密钥传递给已发现的Python函数?

我认为您的
服务是正确的。问题是用于使用POST和PUT方法的API不能使用API键。为了使用它们,请使用OAuth2的访问令牌。我从自己的经历中知道这一点。虽然当时我已经找过这方面的文件,但我没有找到。对不起

另一方面,可以使用API键将Sheets API用于GET方法。例如,您可以通过以下示例使用API键检索值。为了使用此功能,请共享电子表格。如果电子表格未共享,则返回“调用者没有权限”。如果未使用API密钥,则返回“请求缺少有效的API密钥”。这表示需要API密钥

service = discovery.build('sheets', 'v4', discoveryServiceUrl=
    'https://sheets.googleapis.com/$discovery/rest?version=v4',
    developerKey=APIKEY)
res = service.spreadsheets().values().get(spreadsheetId=SHEETID, range='sheet1!A1:A1').execute()

如果这对您没有用,并且我误解了您的问题,我很抱歉。

谢谢!我曾希望使用API键作为写入工作表的简单替代方法。Oauth使安装过程变得更加困难?管理员必须为每台服务器手动生成oauth令牌。@Andomar关于oauth进程,用户只需手动授权一次。由此,可以检索刷新令牌,可以使用刷新令牌检索访问令牌。这种流动可能有点困难。如果你想使用like-API键轻松编写表单,我建议服务器使用Google-Apps脚本的Web应用。通过使用Web应用程序,管理员准备服务器。通过访问Web应用程序,用户可以轻松访问和编写工作表。此外,它还可以让用户显示谷歌登录屏幕的安全性。如果你需要的话,我想我可以讨论一下。刚刚让oauth2开始工作,很高兴听到令牌将被刷新!如果我读对了,它要求我们的服务器可以从internet访问,这不是解决此问题的一个选项。谢谢你的建议,看起来很有趣@欢迎你。我很高兴我能帮上忙。如果您需要样品,请随时告诉我。