0

我正在尝试将我的 csv 文件上传到我的谷歌驱动器/表格。

工作代码:弹出一个窗口,我登录我的谷歌帐户,然后代码完美运行,文件上传。

library(googledrive)
library(googlesheets4)

dff <- drive_upload('dff.csv', type = "spreadsheet")
drive_browse(dff)

我想避免这一步。所以我去了我的 googlesheets API 并从该窗口创建了一个具有所有者权限的服务帐户。

library(googledrive)
library(googlesheets4)
sheets_auth(scope = "https://www.googleapis.com/auth/drive",
            path  = 'myjson.json')

drive_auth(token = sheets_token())
dff <- drive_upload('dff.csv', type = "spreadsheet")
drive_browse(dff)

这不起作用。此外,drive_browse(dff) 会打开一个浏览器窗口,其中显示我无权访问该文件的消息。

我该如何解决这个问题?也许还有其他选择?理想情况下,我需要这个脚本在没有任何登录谷歌的情况下运行。

4

2 回答 2

1

服务帐户的行为与任何其他普通帐户一样 - 它们可以拥有文件并对其具有权限。即,如果您使用个人帐户创建文件并尝试使用服务帐户访问它,而在此之前没有授予适当的权限,则会导致错误。

我建议您使用服务帐户与表格和云端硬盘 API 进行通信。为此,您应该替换drive_auth(token = sheets_token())drive_auth(service_token='myjson.json')(如果您使用的是 googledrive 库 v0.1.3)或库drive_auth(path = 'myjson.json')的 v1.0.0。

请记住,使用服务帐户创建文件后,如果您打算从任何其他帐户访问它们,则必须事先将它们共享到您的帐户。为此,您可以在 R 代码中使用drive_share()函数。

此外,如果您在自己的域中使用 G Suite ,您可以考虑使用委派。此功能将允许服务帐户充当(或“模拟”)域的另一个用户。它执行的每个操作都将就像“模拟”的主体正在执行它一样,包括任何相关的权限。

于 2019-11-19T09:02:38.220 回答
0

carlesgg97提供的解决方案

文件上传后,必须与所有用户共享。

https://www.rdocumentation.org/packages/googledrive/versions/1.0.0/topics/drive_share

于 2019-11-19T11:10:36.453 回答