Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Connect to googlesheets via shiny in R with googlesheets4

I'm trying to use an updated version of this example to connect to a private googlesheet via shiny, and deploy this app on the shinyapps.io server. The user is not required to authenticate to a google account as the app uses a specified pre-existing googlesheet.

I've followed this example (partly copied here), attempting to save the token to my shiny app:

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

but tried to update it to googlesheets4, like this:

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")

Then in the app, I have placed this code outside the shinyApp() function.

load("data/tk.rdata")

googlesheets4::gs4_auth(token = ss_token, use_oob = T)

In the app, I connect to a google doc from the app, using a hardcoded id obtained from ss$spreadsheet_id above. The app works locally.

After attempting to deploy the app to the server I get the error "...Can't get google credentials. Are you running googlesheets4 in a non-interactive session?... etc" I thought that the token would contain sufficient information for this.

I'd be grateful if anyone can point me to a guide to setting this up, and also comment on whether this approach (saving a token on the shinyapps.io) is safe?

I've looked at other examples, but it seems most are for the previous version of googlesheets

like image 248
CCID Avatar asked Dec 02 '25 20:12

CCID


1 Answers

On 21-Jul-2021 googlesheets4 deprecated some of its function when releasing v1.0.0.

I have updated volfi's answer to work with googlesheets4 v1.0.0.
It also works when deploying to shinyapps.io.

Set up non-interactive authentication

library(googlesheets4)
    
# Set authentication token to be stored in a folder called `.secrets`
options(gargle_oauth_cache = ".secrets")

# Authenticate manually
gs4_auth()

# If successful, the previous step stores a token file.
# Check that a file has been created with:
list.files(".secrets/")

# Check that the non-interactive authentication works by first deauthorizing:
gs4_deauth()

# Authenticate using token. If no browser opens, the authentication works.
gs4_auth(cache = ".secrets", email = "[email protected]")

Example - add data to Gooogle Sheet

Create a Google Sheet on Google Sheets and copy the sheet's url.

library(googlesheets4)
gs4_auth(cache=".secrets", email="[email protected]")

ss <- gs4_get("https://docs.google.com/path/to/your/sheet")
sheet_append(ss, data.frame(time=Sys.time()))

If deploying your app to shinyapps.io make sure to deploy the file in the .secrets folder.

like image 56
Johan Ejstrud Avatar answered Dec 04 '25 08:12

Johan Ejstrud



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!