如何在无头环境(EC2 实例)中使用 googlesheets 包进行身份验证?

How to authenticate with googlesheets package in a head less environment(EC2 instance)?

通常当我在我的桌面 R studio 上使用 googlesheets 包时,它会让我通过基于浏览器的身份验证,在那里我 select 我的 Google 帐户进行身份验证并且它得到 approved.I使用 gs_ls() 函数进行身份验证。

现在我正尝试在我的 Amazon EC2 实例中使用 R 中的 googlesheets 包,该实例没有可用的浏览器。我如何在此环境中完成身份验证过程?

你可以参考这个thread。它指出从服务器创建 gs_auth 令牌的最简单方法是将 httr_oob_default 选项设置为 true,这将告诉 httr 使用带外方法进行身份验证。您将获得一个 URL 并期望 return 一个授权码。

您还可以查看此 Google Sheets R API 教程,了解如何使用 googlesheets 从 R 访问和管理 Google 电子表格。

我找到了这个问题的答案。

我基本上所做的是将 Google sheet 作为网页发布并将访问权限设置为 public。如果我们这样做,我们可以在没有任何基于浏览器的身份验证的情况下访问 google sheet。我使用了以下代码-

sheet_key='xxxxxxxxxxxxxxxxxxxx'
sheetdata <- sheet_key %>%  gs_key(lookup = FALSE) %>% gs_read()

Sheet 键基本上是 /d 和 /edit

之间 url 的部分

https://docs.google.com/spreadsheets/d/xxxxxxxxxxxxxxxxxxxx/edit#gid=0

这是一个老问题,但我只是 运行 在 ec2 上使用 python 和 google 工作表解决了同样的问题,并在搜索时发现了这个问题。这是我的解决方法。

尝试从 python 连接到 google 工作表时弹出此消息:

Please visit this URL to authorize this application: 
https://accounts.google.com/o/oauth2/auth?#######

我将 url 放入本地计算机的浏览器中,并选择了我的 Google 帐户进行身份验证,它获得了批准。但是,ec2 实例仍然卡住了。

身份验证后浏览器中的 url 更改为本地主机 link。我打开了到 ec2 实例的第二个连接,并使用 python 请求库,我做了

import requests
requests.get(localhost_url_from_browser)

python 脚本随后成功继续。我确定 R studio 有一个类似于 python requests 的库,你可以使用它。

请注意,这并不要求网页可以公开访问。