我让googlesheets4在shinyapps.io中使用以下代码:
gs4_auth(
email = "me@email.com",
path = NULL,
scopes = "https://www.googleapis.com/auth/drive",
cache = "path_to_cache",
use_oob = FALSE,
token = NULL)我在本地运行它,它需要初始的浏览器身份验证,并下载某种类型的文件。
只要我用我的应用程序将该文件上传到shinyapps.io,它就能工作(即随时刷新令牌)。
然而,据我所知,这是使用googlesheets4自己的Google设置,设置这些设置是为了让每个人都更容易使用。
缺点是,由于很多人共享这个API,他们有时(包括我自己)会碰到数据限制,得到一个429资源耗尽的错误。这是讨论这里。
好的,我遵循了这里和这里的指令,在auth块之前添加了以下代码:
if (interactive()){
# Desktop Client ID
google_app <- httr::oauth_app(
"my-awesome-google-api-wrapping-package",
key = "mykey_for_desktop_app",
secret = "mysecret"
)
}else{
# Web Client ID
google_app <- httr::oauth_app(
"my-awesome-google-api-wrapping-package",
key = "mykey_for_web_app",
secret = "mysecret"
)
}
# API key
google_key <- "My-API-KEY"
gs4_auth_configure(app = google_app, api_key = google_key)
# Also configure google drive to use my API
drive_auth_configure(app = google_app, api_key = google_key)因此,这似乎在本地起作用(例如在RStudio中),我可以在Google仪表板上看到活动。
然而,虽然这种方法工作时间很短(例如10分钟),即使上传到shinyapps.io,自动刷新似乎也失败了,因为我很快就会感到恐惧:
“无法获得谷歌凭据。您是否在非交互式会话中运行googlesheets4?”
有人能指出我做错了什么吗?
同样,只要我不尝试使用自己的API设置(第二个代码块),它就能正常工作。
发布于 2020-12-01 13:06:51
好吧,我很确定这件事.
正是YouTube视频这里真正起到了作用,并使这变得更加清晰。
我所需要的只是一个服务帐户,它似乎产生了一个json文件,我可以用我的应用程序上传。
也就是说,在视频中的1:03左右显示了这个服务帐户的创建,然后将(服务帐户的)电子邮件地址添加到我想要访问的Google工作表中,这意味着我可以下载(使用GoogleDrive)和写(使用GoogleSheets)。
最疯狂的是,我需要在代码中输入以下内容:
drive_auth(path = ".secrets/client_secret.json")
gs4_auth(path = ".secrets/client_secret.json")也就是说,这两行(加上服务帐户下载的json文件)替换了我在OP中发布的所有代码!
发布于 2021-02-03 23:53:33
如果有人正在阅读这篇文章,我会为Jimbo(出色的)答案的最后一步而挣扎,即如何将本地json文件上传到shinyapps.io。
我的工作解决方案是:我在闪亮的应用程序文件夹中创建了一个子文件夹,位于app.r文件旁边,名为“机密”。我把json文件放在那里了。在本地测试所有内容时,我确保将我的工作目录设置为闪亮的应用程序。(注意:不要在闪亮的应用程序代码中包含setwd()代码)。我不确定这是否以某种方式公开了json文件,但它必须这样做。
当发布到shinyapp时,我选中了Rstudio建议的所有框来上载文件夹的全部内容(app.r文件、子文件夹+子文件夹中的json文件)。我在app.r文件中使用了以下路径:
drive_auth(path = "secret/clientsecret.json")
gs4_auth(path = "secret/clientsecret.json")https://stackoverflow.com/questions/65051305
复制相似问题