2017-10-13 21 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) 

どのように私はトンのために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発行では、の最新バージョンでは、URLencode()のマーク状態がデフォルトになりました。それがまだ起こるかどうかはわかりませんが、その間は簡単に解決できます。

+0

URLendcodingはgoogleAuthR、0.6.2の最新バージョンです – MarkeD