标签: googlesheets4

客户端没有足够的权限

我目前正在跑步

library(googlesheets4)
sheets_auth()

dat=read_sheet("https://docs.google.com/spreadsheets/d/1R9XuH9Wej-p6HdkFGV2IsHuCmA9w0s7M3-jzE3S-Qrs/edit#gid=950673024", sheet="Summary", range=cell_rows(1:777))
Run Code Online (Sandbox Code Playgroud)

并得到以下输出。

Suitable tokens found in the cache, associated with these emails:
  * dcallow@umd.edu
  * ddcc2442@gmail.com
The first will be used.
Using an auto-discovered, cached token.
To suppress this message, modify your code or options to clearly consent to the use of a cached token.
See gargle's "Non-interactive auth" vignette for more details:
https://gargle.r-lib.org/articles/non-interactive-auth.html
The googlesheets4 package is using a cached token for dcallow@umd.edu.
> 
> dat=read_sheet("https://docs.google.com/spreadsheets/d/1R9XuH9Wej-p6HdkFGV2IsHuCmA9w0s7M3-jzE3S-Qrs/edit#gid=950673024", sheet="Summary", range=cell_rows(1:777))
Error: Client error: (403) PERMISSION_DENIED
  * …
Run Code Online (Sandbox Code Playgroud)

r google-sheets-api googlesheets4

10
推荐指数
3
解决办法
8010
查看次数

如何在调度代码时自动选择R中googlesheets4中的预授权帐户?

我试图弄清楚自动允许 googlesheet4 包选择我的预授权帐户来下载特定谷歌表格的方法是什么。

例如 - 我想每天运行以下一次 -

library(googlesheets4)
delta<-read_sheet(
  "https://docs.google.com/spreadsheets/xyz...",
  sheet = "XYZ Delta"
)
Run Code Online (Sandbox Code Playgroud)

控制台给出以下输出:

The googlesheets4 package is requesting access to your Google account.
Select a pre-authorised account or enter '0' to obtain a new token. 
Press Esc/Ctrl + C to abort.

1. xyz@gmail.com
Run Code Online (Sandbox Code Playgroud)

从上面可以看出,我已经在上一步中授予了它访问该帐户的权限,以使用 google 工作表。但它仍然要求我手动输入“1”来选择此帐户。是否可以自动执行此操作,以便在自动安排此代码时无需手动输入“1”来运行此脚本?

如果您能指出我正确的方向,我将不胜感激!

r token google-sheets googlesheets4

9
推荐指数
1
解决办法
1041
查看次数

使用 googlesheets4 通过 R 中的闪亮连接到 googlesheets

我正在尝试使用此示例的更新版本通过 Shine 连接到私有 googlesheet,并将此应用程序部署在 Shinyapps.io 服务器上。由于应用程序使用指定的预先存在的 googlesheet,因此用户不需要对 google 帐户进行身份验证。

我已经按照这个例子(部分复制在这里),试图将令牌保存到我闪亮的应用程序:

# previous googlesheets package version:
shiny_token <- gs_auth() # authenticate w/ your desired Google identity here
saveRDS(shiny_token, "shiny_app_token.rds")

Run Code Online (Sandbox Code Playgroud)

但尝试将其更新为 googlesheets4,如下所示:

ss <- gs4_get("MY GOOGLE DOC URL") # do the authentication once, manually.
ss
gs4_has_token() # check that the token exists

# get token
ss_token <- gs4_token()
# save the token
save(ss_token, file = "APP PATH ... /data/tk.rdata")
Run Code Online (Sandbox Code Playgroud)

然后在应用程序中,我将此代码放在shinyApp()函数之外。

load("data/tk.rdata")

googlesheets4::gs4_auth(token = ss_token, use_oob = …
Run Code Online (Sandbox Code Playgroud)

r shiny google-sheets-api googlesheets4

5
推荐指数
2
解决办法
1766
查看次数

使用 googlesheets4 通过 Shiny 应用程序授权对 googlesheets 的非交互式使用

我知道还有一些其他类似的问题(例如,这里这里),但我想我会再试一次,因为其他人还没有得到很多答案。

我有一个 Shiny 应用程序,允许用户通过该应用程序提供输入,但这些用户需要跳过身份验证步骤。在以前的版本中,googlesheets我公开了该表(对任何有链接的人)并避免了一些身份验证过程。在更新过程中,googlesheets4我在将更新的应用程序部署到shinyapps.io 时遇到了权限问题。这是我尝试过的内容以及得到的结果的总结。任何指示将不胜感激。

首先,根据本文中的建议,我创建了一个服务gargle帐户,下载了一个 JSON 服务帐户令牌(格式为“project-name-12345678abc1.json”),并将其(暂时)保存在父应用程序文件夹中的下假设它需要与应用程序包一起上传。然后我启用了 Google Sheets API。

我已将以下命令放在应用程序的前面,位于任何实质性内容之前:

  1. gs4_deauth(),因为谷歌表格对任何有链接的人都是公开的,因此可能不需要令牌。

  2. 继这篇文章之后gs4_auth(path = "project-name-12345678abc1.json"). 我还添加了scopes参数(如下),并且use_oob=TRUE.

  3. credentials_service_account(scopes = "https://www.googleapis.com/auth/spreadsheets", path = "project-name-12345678abc1.json")

  4. credentials_app_default(path = "project-name-12345678abc1.json")

结果

大多数组合都会给我错误提示“无法获取 Google 凭据”,然后建议我查看漱口网站上的非交互式文章。唯一的例外是尝试 3,它提供了以下错误消息 - 奇怪的是,它很有希望:

警告:错误:客户端错误:(403) PERMISSION_DENIED

  • 客户端没有足够的权限。发生这种情况的原因是 OAuth 令牌没有正确的范围、客户端没有权限或尚未为客户端项目启用 API。

关于我可能会缺少什么的任何想法?该应用程序在本地运行良好。

任何帮助表示赞赏。谢谢!

r google-sheets shiny googlesheets4

5
推荐指数
1
解决办法
927
查看次数

R Shiny Dashboard:从本地文件和在线数据库(例如Google Sheet)上传数据

我是Shiny仪表板的初学者,我有一个困扰我很长时间的问题。
我的最终目标是将数据分配给名为“myData”的变量,但我为用户提供了从本地文件或在线文件(在我的例子中为 GoogleSheet)上传数据的选项。
下面是我的应用程序的简化版本。为了实现目标,我做了:

  1. 在“data”选项卡下,我创建了一个选择框“input_option”,以便用户可以选择上传本地数据(=“local”)或来自在线持久数据库(=“online”)的数据;
  2. 我使用“eventReactive”来获取以“input_option”的值为条件的数据;
  3. 如果用户选择从在线数据库上传数据,则数据将显示在仪表板主体中;
  4. 如果用户选择从本地文件上传数据,则仪表板主体中会显示“文件输入”框,引导用户选择本地文件。然后数据也会显示在仪表板主体的下方。

然而,问题是:

  1. 无论哪种方式,数据都无法显示在仪表板主体中。我什至不知道数据是否已成功获取;
  2. 当我选择上传在线数据然后关闭应用程序时,R控制台不会暂停而是继续运行。

有朋友或专家可以帮助我解决这些问题吗?我真的非常感谢你的帮助!

library(shiny)
library(shinydashboard)
library(googlesheets4)
library(googledrive)

server = function(session, input, output)
{
  # "input_option" is used to select whether input data from local or online
  input_option = reactive(
    input$select_upload
  )
  
  # Upload the data
  myData = eventReactive(
    input$select_upload,
    if(input$select_upload == "local")
    {
      req(input$file_myData)
      read.csv(
        input$file_myData$datapath, 
        header = T, 
        stringsAsFactors = F, 
        sep = input$sep_file_myData)
    }
    else if(input_option() == "online")
    {
      as.data.frame(gs4_find("myData_sample") %>% range_read())
    }
  )
  
  # display the myData data …
Run Code Online (Sandbox Code Playgroud)

user-input r shiny shinydashboard googlesheets4

2
推荐指数
1
解决办法
1296
查看次数