r - 努力在 shinyapps.io 中使用我自己的 API 密钥和 googlesheets4
问题描述
我有 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 设置,这些设置是为了让每个人都可以轻松使用。
缺点是,由于很多人都在共享这个 API,他们有时(包括我自己)会达到数据限制并得到 429 RESOURCE EXHAUSTED 错误。这将在此处讨论。
好的,所以我已按照此处和此处的说明进行操作,并在已提供的身份验证块之前添加了以下代码:
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 Cloud API 仪表板上看到活动。
然而,虽然这在短时间内(例如 10 分钟)有效,但即使上传到 shinyapps.io,自动刷新似乎也会失败,因为我很快就会感到害怕:
“无法获取 Google 凭据。您是否在非交互式会话中运行 googlesheets4?”
有人能指出我做错了什么吗?
再次 - 只要我不尝试使用自己的 API 设置(第二个代码块),它就可以正常工作。
解决方案
好的,很确定我已经完成了这个工作......
真正有帮助的是这里的 YouTube 视频,并且使这一点更加清晰。
我只需要一个服务帐户,它似乎会生成一个我可以使用我的应用程序上传的 json 文件。
即在视频中的 1:03 左右显示了此服务帐户的创建,然后将该电子邮件地址(服务帐户的)添加到我要访问的 Google 表格中,这意味着我可以下载(使用 GoogleDrive ) 并编写(使用 GoogleSheets)。
疯狂的部分是我需要在我的代码中输入以下内容:
drive_auth(path = ".secrets/client_secret.json")
gs4_auth(path = ".secrets/client_secret.json")
即这两行(加上为服务帐户下载的 json 文件)替换了我在我的 OP 中发布的所有代码!
推荐阅读
- elasticsearch - 将旧数据从 Elasticsearch 归档到 Google Cloud Storage
- prolog - 对于给定的字符串,开发一个 prolog 加载(aSCii_Encoded (S, X))
- docker - Docker Compose:将容器端口重新映射为网络内部和主机上的相同
- python - 在 Django 3 中上传多个文件
- sql - 以 HHH:MM:SS 格式 (Nvarchar) 将天转换为小时
- vue.js - 在按钮上使用 v-model?
- sql - 根据条件将一列转换为两列
- android - 在 Moshi 中将可为空的布尔值映射为 false
- python - /wiki/CSS 的 NoReverseMatch 为“edit_pagina”反向,未找到任何参数。尝试了 1 种模式:['edit/(?P
[^/]+)$'] - tensorflow - 使用 tensorflow 测试 .trt 文件