2017-10-13 159 views
1

我試圖使用googleAuthR從Google電子表格中請求數據。我需要使用此庫而不是Jenny Bryan的googlesheets,因爲請求是具有多用戶身份驗證的閃亮應用程序的一部分。當請求範圍不包含空格(如"Sheet1!A:B"請求成功然而,當標籤名稱包含空格(如"'Sheet 1'!A:B""\'Sheet 1\'!A:B",請求將失敗並拋出這個錯誤:使用googleAuthR,httr和jsonlite向Google表格API失敗的HTTP請求

Request Status Code: 400 
Error : lexical error: invalid char in json text. 
            <!DOCTYPE html> <html lang=en> 
       (right here) ------^ 

馬克·埃德蒙森的googleAuthR使用jsonlite爲。解析JSON我認爲這個錯誤是從jsonlite來了,但我在爲如何解決它的一個損失這裏是一個小例子來重現問題:

library(googleAuthR) 

# scopes 
options("googleAuthR.scopes.selected" = "https://www.googleapis.com/auth/spreadsheets.readonly") 
# client id and secret 
options("googleAuthR.client_id" = "XXXX") 
options("googleAuthR.client_secret" = "XXXX") 

# request 
get_data <- function(spreadsheetId, range) { 

    l <- googleAuthR::gar_api_generator(
     baseURI = "https://sheets.googleapis.com/v4/", 
     http_header = 'GET', 
     path_args = list(spreadsheets = spreadsheetId, 
         values = range), 
     pars_args = list(majorDimension = 'ROWS', 
         valueRenderOption = 'UNFORMATTED_VALUE'), 
     data_parse_function = function(x) x) 

    req <- l() 

    req 
} 

# authenticate 
gar_auth(new_user = TRUE) 

# input 
spreadsheet_id <- "XXXX" 
range <- "'Sheet 1'!A:B" 

# get data 
df <- get_data(spreadsheet_id, range) 

如何格式化對於T range變量他請求工作?先謝謝您的幫助。

回答

1

使用URLencode()來編碼百分比空格。

詳情:

使用options(googleAuthR.verbose = 1)顯示,GET請求是形式:

GET /v4/spreadsheets/.../values/'Sheet 1'!A:B?majorDimension=ROWS&valueRenderOption=UNFORMATTED_VALUE HTTP/1.1 

我本以爲會被編碼的空間,但我想不會。在2016年8月發佈的this github發行中,Mark的URLencode()將成爲googleAuthR更高版本的默認版本。不知道這是否仍然會發生,但在此期間這是一個簡單的解決方案。

+0

URLendcoding是最新版本的googleAuthR,0.6.2 – MarkeD