2012-07-20 63 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