3

使用 R 和 Jeff Gentry 的 ROAuth 包尝试从 fitbit 中提取数据,但身份验证似乎不起作用。代码如下:

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\"}]}"
4

2 回答 2

1

好的,在与 DTL 和 Geoff Jentry 进行了一些挖掘和发送电子邮件之后,终于解决了这个问题(非常感谢大家)。

在原始 ROAuth 包中,oauthGet 函数没有使用 Authorization .opt 进行 curl 调用,并且还具有如下所示的参数:

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

似乎指定参数并列出选项会导致问题。

终于得到了数据正确的表格!

于 2012-07-25T19:18:34.783 回答
0

如果您还没有,请确保您拥有 CRAN 上不可用的最新版本 (0.9.2):

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 仍然失败,请告诉我,我会尝试看看它。

于 2012-07-23T20:31:41.087 回答