mis - Enviar información a Google Spreadsheets/Formulario de Google
google forms (3)
Es posible que sea la configuración que haya utilizado en la configuración de Hojas de cálculo de Google. @jennybryan menciona algo como esto en su número 126,148 a continuación:
https://github.com/jennybc/googlesheets/issues/148
OK sí, obtengo el mismo error con el paquete y aún puedo verlo en el navegador. Tampoco es una hoja vieja. ¿Puedes verificar que está publicado en la web? El simple hecho de ser público en la web no es suficiente para el acceso a la API. ¡Voy a hacer una nueva función para probar esto! Por favor vea este comentario para la distinción:
Quiero utilizar Google google spreadsheet o form + spreadsheet para recopilar una respuesta de un usuario R y enviarla a una hoja de cálculo.
Aquí hay un formulario mínimo de Google: https://docs.google.com/forms/d/1tz2RPftOLRCQrGSvgJTRELrd9sdIrSZ_kxfoFdHiqD4/viewform
Y la hoja de cálculo adjunta: https://docs.google.com/spreadsheets/d/1xemHzTdeqgMuGbsP6oqDYuMu4PymBdw7k7kMC_-Dsi8/edit#gid=102827002
Pensé que usaría el paquete googlesheets de Jenny Bryan así:
library(googlesheets);library(dplyr)
(my_sheets <- gs_ls())
minresp <- gs_title("minimal (Responses)")
minresp %>% gs_add_row(ws = "dat", input = mtcars[20, 1:2])
Funciona muy bien, pero si incluyo el código y alguien más (es decir, quién no soy yo) intenta usar el código:
Error in gs_lookup(., "sheet_title", verbose) :
"minimal (Responsess)" doesn''t match sheet_title of any sheet returned by gs_ls() (which should reflect user''s Google Sheets home screen).
Entonces en la viñeta veo que hay aparte:
# ¿Necesita acceder a una hoja que no le pertenece?
# ¡Acceda por clave si lo conoce!
Pensé que este era el ticket para permitir que otros ingresen datos en una hoja de cálculo, así que probé:
minresp2 <- gs_key("1xemHzTdeqgMuGbsP6oqDYuMu4PymBdw7k7kMC_-Dsi8")
flexible:
Authentication will be used.
Error in gs_lookup(., "sheet_key", verbose) :
"1xemHzTdeqgMuGbsP6oqDYuMu4PymBdw7k7kMC_-Dsi8" doesn''t match sheet_key of any sheet returned by gs_ls() (which should reflect user''s Google Sheets home screen).
Todo esto funciona si estoy conectado y autenticado a través de google, pero ¿cómo podría hacerlo para que los usuarios puedan agregar a mi hoja de cálculo? No me importa qué enfoque / paquetes uno usa. Es bueno que el usuario solo edite la sphesheet a través del uso en la función y no solo mire la fuente, obtenga la url y edite manualmente, pero eso no es tan preocupante.
Básicamente, quiero poder recopilar respuestas de un usuario R en una spreadsheet (u otra forma de datos) y anexar con cada nuevo usuario.
He usado muchas de tus funciones y paquetes, así que solo quiero decir gracias. :)
De todos modos, me encontré con un problema similar al que tenía en el pasado y trabajé en mi camino con esta función. Básicamente, simplemente pirateé la función Auth
que proviene del paquete RGoogleAnalytics
.
# client id and secret for google drive ####
client.secret <- "YOUR SECRET"
client.id <- "YOUR ID"
# auth function to get at files in google drive ####
# and implementing it
Auth <- function(client.id,client.secret) {
require(httr)
myapp <- oauth_app("google", client.id,
client.secret)
google.token <- oauth2.0_token(oauth_endpoints("google"), myapp,
scope = "https://www.googleapis.com/auth/drive.file")
return(google.token)
}
token <- Auth(client.id,
client.secret)
Esto me funcionó en el pasado, pero avíseme si no funciona.
Sus usuarios deben registrar la Hoja con gs_key(YOUR_KEY, lookup = FALSE, visibility = "private")
. Estos dos argumentos son importantes por dos razones diferentes.
-
lookup = FALSE
les permite registrar la Hoja incluso si nunca la han visitado en el navegador. Tenga en cuenta que sigue siendo importante que la Hoja esté "publicada en la web" y que tengan permiso de lectura. -
visibility = "private"
afecta a la URL que construimos para el eventual POST requerido para agregar una fila. Para POST, la visibilidad debe ser "privada"; de lo contrario, recibirá el error 405 informado en https://github.com/jennybc/googlesheets/issues/168 .
Todavía tenía que hacer que la información de lookup
formara parte del objeto de hoja de cálculo para que el ejemplo siguiente funcione para los no propietarios de la hoja. Lo que significa que tendrá que instalar la versión de desarrollo de GitHub.
Para lograr su objetivo, su usuario también debe tener permiso de escritura. ¿Cómo lograr eso? Lo más fácil pero asqueroso es hacer que la Hoja sea editable, como se hace a continuación. Para un pequeño número de personas, puede otorgar el permiso individualmente. No conozco ninguna forma de hacer que una hoja sea editable por, digamos, personas que tengan la clave. Si realmente desea "incluir" este tipo de permiso en una función o paquete, sospecho que deberá encontrar una forma segura de transmitir un token, como se describe en mi comentario original.
ss <- gs_new("add-row-test", input = head(iris))
#> Sheet "add-row-test" created in Google Drive.
#> Range affected by the update: "A1:E7"
#> Worksheet "Sheet1" successfully updated with 35 new value(s).
#> Worksheet dimensions: 1000 x 26.
En el navegador, haz dos cosas:
Archivo> Publicar en la web
Botón Compartir> Público en la web: cualquier persona en Internet puede buscar y editar
Ahora sus usuarios pueden acceder y agregar filas así:
ss_key <- "114cXPTe9whThS3lmpa3neY2vplpUX1hcnM8o8Oo6QtM"
add_row_result <- ss_key %>%
gs_key(lookup = FALSE, visibility = "private") %>%
gs_add_row(input = c("can", "you", "hear", "me", "now?"))
#> Authorization will not be used.
#> Worksheets feed constructed with private visibility
#> Row successfully appended.
add_row_result %>%
gs_read()
#> Accessing worksheet titled "Sheet1"
#> Source: local data frame [9 x 5]
#>
#> Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#> (chr) (chr) (chr) (chr) (chr)
#> 1 5.1 3.5 1.4 0.2 setosa
#> 2 4.9 3 1.4 0.2 setosa
#> 3 4.7 3.2 1.3 0.2 setosa
#> 4 4.6 3.1 1.5 0.2 setosa
#> 5 5 3.6 1.4 0.2 setosa
#> 6 5.4 3.9 1.7 0.4 setosa
#> 7 can you hear me now?