2012-07-20 61 views
3

使用R和Jeff Gentry的ROAuth軟件包嘗試從fitbit中提取數據,並且認證似乎不起作用。代碼如下:ROAuth R和FitBit API錯誤:未提供授權標頭

apiURL = 'api.fitbit.com/' 

credentials = OAuthFactory$new(consumerKey=key, 
          consumerSecret=secret, 
          requestURL=tokenURL, 
          accessURL=accessTokenURL, 
          authURL=authorizeURL 
          ) 

,然後我跑握手:

> credentials$handshake() 
To enable the connection, please direct your web browser to: 
http://www.fitbit.com/oauth/authorize?oauth_token=036afa88a832bfffc72af485e38c1572 
When complete, record the PIN given to you and provide it here: 

完成授權,並在oauth_verifier令牌粘貼,從而在適當的面色組憑據。

最後,我試圖讓我以後我的配置文件數據:

rawToChar(credentials$OAuthRequest(paste(apiURL,"1/user/userID/profile.json", sep="", collapse=''), "GET")) 

而且我得到這樣的迴應:

[1] "{\"errors\":[{\"errorType\":\"oauth\",\"fieldName\":\"n/a\",\"message\":\"No 
Authorization header provided in the request. Each call to Fitbit API should be OAuth 
signed\"}]}" 

回答

1

好了終於解決了這個問題後,一些挖掘和電子郵件與DTL和傑夫詹特里(非常感謝這麼多人)。

在原有ROAuth包oauthGet功能沒有使用授權的.opt的捲曲呼叫,也有看起來像這樣PARAMS:

params <- c(params, as.list(auth)) 
getForm(url, .params = params, curl = curl, .opts = c(list(httpget = TRUE), opts, list(...)))) 

Fitbit.com API是多了幾分特別的https://wiki.fitbit.com/display/API/OAuth+Authentication+in+the+Fitbit+API需要「包裹oauth_params的價值觀和我做了如下的mods:

params <-as.list(auth) #dropping the first item in the list which was an extra "GET" 
opts=list(httpheader=c(Authorization=paste("OAuth ", paste(names(auth), '="', auth, '"', sep = "", collapse = ",\n "), sep="", collapse=''))) 
getForm(url, curl = curl, .opts = c(opts)) 

看來,指定PARAMS和上市期權是造成問題

最後獲得正確數據的表單!

0

如果您還沒有準備好,請確保您有最新的版本(0.9.2),這是不可用的CRAN:

http://geoffjentry.hexdump.org/ROAuth_0.9.2.tar.gz

如果你使用的是Windows,你需要使用這一個:

http://geoffjentry.hexdump.org/ROAuth_0.9.2.zip

還有其他人在包裝未來發展的工作,我認爲他們將會有一個新的版本已經但顯然不是,我應該向CRAN提交0.9.2以防萬一它需要一段時間。

如果這不起作用,它可能是Fitbit特有的東西。我看到一些網站在ROAuth上表現不佳。讓我知道如果0.9.2仍然失敗,我會試着去看看它。

+0

仍然無法正確發送授權標頭(我相信這是問題)。 oauthGET函數中的某處必須設置一些額外的.opts,但我無法弄清楚哪一個。寫給RCurl的作者鄧肯朗看看他是否會知道。 – 2012-07-25 14:51:18

+0

DTL實際上是接管ROAuth的人之一,所以你可能會問他關於版本0.99.2(他現在的開發版)是否是另一種可能性。 – geoffjentry 2012-07-25 17:39:59

+0

好吧,取得一些進展,對於fitbit來說,它似乎需要在將Oauth參數作爲值傳遞之前將其引入引號中。現在將RCurl的verbose = T選項打開並獲取更多有用的信息 – 2012-07-25 18:27:14