Аутентификация удаленного сервера для чтения Googlesheets из R-скрипта без использования служебных учетных записей?

Я автоматизирую процесс в R, который извлекает, отправляет, анализирует и сохраняет данные определенным образом, и в целом, жонглирует данными между Googlesheets, Postgresql и Salesforce. До сих пор он работал в моей системе, но мне нужно будет запускать сценарии с моего удаленного входа в систему ssh-сервера на aws.

Дело в том, что я использую пакет «googlesheets» в R для аутентификации и чтения листов Google, но для регистрации/настройки требуется интерактивная среда. Я читал другие ответы на SO об этой проблеме, но все они предлагают открыть учетную запись службы Google.

Однако я не хочу этого делать, потому что все, что мне нужно, это читать эти таблицы Google, которые сами по себе бесплатны. У меня сейчас нет GCP, Google Computing, bigquery или чего-то подобного, и я, конечно же, не могу сейчас ни за что платить.

Есть ли способ читать листы Google из неинтерактивной среды (интерфейс удаленного входа в терминал Linux)? Я готов попробовать другие библиотеки или любой другой хак, который у вас может быть.

Что-нибудь, ребята?


person Deepak    schedule 07.07.2017    source источник
comment
Вы когда-нибудь догадывались об этом? У меня точно такая же проблема. Нужно как-то автоаутентифицировать на сервере.   -  person Samuel Cavazos    schedule 30.08.2017
comment
Да, я сделал, вам нужно будет создать учетную запись службы Google, не волнуйтесь, вы можете сделать это бесплатно (но есть некоторые ограничения, но я не полностью понял эту часть).. как только вы это сделаете, используйте библиотеку gspread и Google вокруг, вы получите его. ДВ, у тебя есть это!   -  person Deepak    schedule 30.08.2017


Ответы (2)


Я много часов боролся с чем-то подобным, поэтому, даже если это старый вопрос, я думаю, что некоторые другие люди могут найти это решение полезным. Моя проблема заключалась в неинтерактивной аутентификации для чтения и изменения листа Google через приложение Shiny. Приложение всегда запускает процесс аутентификации танца, независимо от того, сохранил ли я его в папке кеша, встроенной в приложение.

Я использовал следующие руководства и вопросы, чтобы провести себя через этот процесс:

Попробуйте следующий воспроизводимый пример:

library("googledrive")
library("googlesheets4") # I am using the developing version 0.1.0.9000
library("shiny")

# You want to deploy an app in Shinyapps.io or other server
# FIRST STEP----
# Get the token an store it in a cache folder embedded in your app directory
# designate project-specific cache
options(gargle_oauth_cache = ".secrets")
# options(gargle_quiet = FALSE) # So you can know what is happening
# Authenticate in interactive mode (run the app) ONCE and check if the token 
# has been stored inside the .secrets folder, after that just comment this line
#drive_auth() # Authenticate to produce the token in the cache folder
# Grant permission to googlesheets to access to the token produced
#sheets_auth(token = drive_token())

# SECOND STEP----
# Comment lines 10, 13 and 15 and uncomment lines 21 and 22
# You tell gargle to search the token in the secrets folder and to look
# for an auth given to a certain email (enter your email linked to googledrive!)
drive_auth(cache = ".secrets", email = "enter_your_email@here")
sheets_auth(token = drive_token())

# THIRD STEP---
# Now you can deploy your app in shinyapps.io!!
# Test if your app runs properly in the local version
# Authenticate in ShinyApps.io
# rsconnect::setAccountInfo(name="<ACCOUNT>", token="<TOKEN>", secret="<SECRET>")
# setwd() in your App directory
# library(rsconnect)
# deployApp()
# Enjoy your new App!!

ui <- # Define UI for application that plots random distributions 
  fluidPage(

    # Application title
    titlePanel("Hello Shiny!"),

    # Sidebar with a slider input for number of observations
    sidebarLayout(
      sidebarPanel(
        sliderInput("obs", 
                    "Number of observations:", 
                    min = 1, 
                    max = 1000, 
                    value = 500),
        actionButton(
          "add",
          "Add new entry")
      ),

      # Show a plot of the generated distribution
      mainPanel(
        "Check your googlesheet!!"
      )
    )
  )

server <- function(input, output, session) {
  # Expression that generates a plot of the distribution. The expression
  # is wrapped in a call to renderPlot to indicate that:
  #
  #  1) It is "reactive" and therefore should be automatically 
  #     re-executed when inputs change
  #  2) Its output type is a plot 
  #
  observeEvent(input$add, {
    # You should have or create a googlesheets through google drive with
    # the name "example_shiny"
    wb <- drive_get("example_shiny")
    dt <- read_sheet(wb)
    new_entry <-
      data.frame(ID = tail(dt$ID, 1) + 1, NAME = "new",
                 OBSERVATION = input$obs)
    sheets_append(new_entry, wb)
  })
}

shinyApp(ui, server)
person Anderson Arroyo    schedule 25.01.2020

Я думаю, что эта часть документации от Rstudio показывает, как это сделать, если я понимаю ваш вопрос: https://support.rstudio.com/hc/en-us/articles/217952868-Generating-OAuth-tokens-from-a-server

person John David Smith    schedule 14.02.2018