3

虽然它不是我的主要语言,但我使用 R 将每日 ETL 的结果发布到 Google 表格工作表中。因为这将是一个永久运行的预定作业,所以我对使用交互式流程从 R 验证 Google Drive 犹豫不决。我从我的 Google Drive 帐户凭据中获得了 JSON 的路径,但是当我通过时

gs4_deauth()
gs4_has_token()
gs4_auth(email=<email-string>, path = jsonlite::fromJSON(<path-to-json>), cache = NULL)

它引发以下错误:

[1] FALSE
Error: Can't get Google credentials.
Are you running googlesheets4 in a non-interactive session? Consider:
  * `gs4_deauth()` to prevent the attempt to get credentials.
  * Call `gs4_auth()` directly with all necessary specifics.
See gargle's "Non-interactive auth" vignette for more details:
https://gargle.r-lib.org/articles/non-interactive-auth.html
Execution halted

由于错误消息没有提供太多细节,我想知道是否有人对此有经验或有任何想法为什么会发生这种情况?我使用 gs4_deauth() 是因为我最初使用交互式流程登录,但现在想确保非交互式身份验证有效。

顺便说一句,从 json 凭证文件中创建令牌对象最不痛苦的方法是什么?我相信这可能比直接使用path参数重复传递 json 凭据更简单。

4

1 回答 1

0

如果是服务帐户凭据

googlesheets4::gs4_auth(
  path = "service_accout.json",
  scopes = "https://www.googleapis.com/auth/spreadsheets.readonly"
)

## NOTE: the spreadsheet is shared with the service account
s <- googlesheets4::read_sheet(ID_OF_YOUR_SPREADSHEET)

令牌可以通过这种方式重复使用:

token <- googlesheets4::gs4_token()
googledrive::drive_auth(token = token)
googledrive::drive_has_token()
[1] TRUE
于 2021-05-06T19:09:08.243 回答