r نماذج إرسال المعلومات إلى جداول بيانات غوغل/نموذج غوغل




نماذج جوجل (3)

أريد استخدام جدول بيانات غوغل أو نموذج + جدول بيانات غوغل لجمع رد من مستخدم R وإرساله إلى ورقة بيانات.

إليك نموذج غوغل الحد الأدنى: https://docs.google.com/forms/d/1tz2RPftOLRCQrGSvgJTRELrd9sdIrSZ_kxfoFdHiqD4/viewform

وجدول البيانات المصاحب: https://docs.google.com/spreadsheets/d/1xemHzTdeqgMuGbsP6oqDYuMu4PymBdw7k7kMC_-Dsi8/edit#gid=102827002

ظننت أنني سأستخدم حزمة جوجليشيتس جيني برايان مثل ذلك:

library(googlesheets);library(dplyr)
(my_sheets <- gs_ls())

minresp <- gs_title("minimal (Responses)")
minresp %>% gs_add_row(ws = "dat", input = mtcars[20, 1:2]) 

يعمل كبيرة ولكن إذا أدرجت رمز وشخص آخر (أي، الذي ليس لي) يحاول استخدام التعليمات البرمجية:

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

حتى في المقالة القصيرة أرى هناك وبصرف النظر:

# هل تحتاج إلى الوصول إلى ورقة لا تملكها؟
# الوصول إليه عن طريق المفتاح إذا كنت تعرف ذلك!

أنا أحسب هذا كان تذكرة للسماح للآخرين لإدخال البيانات في جدول البيانات حتى حاولت:

minresp2 <- gs_key("1xemHzTdeqgMuGbsP6oqDYuMu4PymBdw7k7kMC_-Dsi8")

العائد:

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

يعمل هذا كله إذا قمت بتسجيل الدخول والمصادقة عبر غوغل، ولكن كيف يمكنني جعله بحيث يمكن للمستخدمين إضافة إلى جدول البيانات الخاص بي. لا يهمني النهج / الحزم واحد يستخدم. انها لطيفة إذا كان المستخدم يمكن تحرير فقط سبرياشيت عن طريق استخدام في وظيفة وليس مجرد النظر في المصدر والحصول على رابط وتحرير يدويا ولكن هذا أقل من مصدر قلق.

أساسا أريد أن تكون قادرة على جمع الردود من مستخدم R في سبريششيت (أو شكل بيانات أخرى) ويلحق مع كل مستخدم جديد.


لقد استخدمت طن من وظائفك والحزم، لذلك أريد فقط أن أقول شكرا. :)

على أي حال، لقد واجهت مشكلة مماثلة التي لديك في الماضي، وعملت طريقي حول ذلك باستخدام هذه الوظيفة. أنا في الأساس مجرد اختراق وظيفة Auth التي تأتي من حزمة 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)

وقد عمل هذا بالنسبة لي في الماضي، ولكن اسمحوا لي أن أعرف إذا كان لا يعمل.


من المحتمل أن يكون الإعداد الذي استخدمته في إعداد جداول بيانات غوغل. jennybryan يذكر شيئا من هذا القبيل في عددها # 126،148 أدناه:

https://github.com/jennybc/googlesheets/issues/148

موافق نعم أحصل على نفس الخطأ مع الحزمة وحتى الآن يمكن مشاهدته في المتصفح. كما أنها ليست ورقة قديمة. هل يمكنك التحقق مرتين من نشرها على شبكة الإنترنت؟ مجرد أن يكون الجمهور على شبكة الإنترنت لا يكفي للوصول أبي. وانا ذاهب الى جعل وظيفة جديدة لاختبار لهذا! يرجى الاطلاع على هذا التعليق للتمييز:

126 (تعليق)


يجب على المستخدمين تسجيل الورقة باستخدام gs_key(YOUR_KEY, lookup = FALSE, visibility = "private") . هاتان الحجتان مهمتان لسببين مختلفين.

  • lookup = FALSE يسمح لهم بتسجيل ورقة حتى لو لم يسبق لهم زيارة في المتصفح. لاحظ أنه لا يزال من المهم أن تكون الورقة "منشورة على الويب" وأن لديهم إذن القراءة.
  • visibility = "private" بريفات visibility = "private" يؤثر على عنوان ورل الذي نبنيه للحصول على بوست النهائي المطلوب لإضافة صف. إلى آخر، يجب أن تكون الرؤية "خاصة"، وإلا تحصل على الخطأ 405 ذكرت في https://github.com/jennybc/googlesheets/issues/168 .

ما زلت بحاجة إلى جعل معلومات lookup جزءا من عنصر ورقة غوغل المسجل للمثال أدناه للعمل لغير المالكين للورقة. مما يعني أنك سوف تحتاج إلى تثبيت إصدار التطوير من جيثب.

لتحقيق هدفك، يجب أن يكون المستخدم أيضا إذن الكتابة. كيفية تحقيق ذلك؟ أسهل ولكن يكي هو جعل ورقة العالم للكتابة، كما هو موضح أدناه. بالنسبة إلى عدد قليل من الأشخاص، يمكنك منح الإذن بشكل فردي. أنا لا أعرف من أي وسيلة لجعل ورقة للكتابة من قبل، ويقول، والناس الذين يحدث أن يكون المفتاح. إذا كنت تريد حقا أن "خبز في" هذا النوع من إذن في وظيفة أو حزمة، وأظن أنك سوف تحتاج إلى العثور على وسيلة آمنة لنقل رمزية، كما هو موضح في تعليقي الأصلي.

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.

في المتصفح، قم بأمرين:
ملف> نشر على الويب
زر المشاركة> عام على الويب - يمكن لأي شخص على الإنترنت العثور عليه وتعديله

الآن يمكن للمستخدمين الدخول إلى الصفوف وإضافتها مثل:

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?