5

我正在尝试使用httr library连接到 fitbit api 。

使用提供的示例,我想出了以下代码:

library(httr)

key <- '<edited>'
secret <- '<edited>'
tokenURL <- 'http://api.fitbit.com/oauth/request_token'
accessTokenURL <- 'http://api.fitbit.com/oauth/access_token'
authorizeURL <- 'https://www.fitbit.com/oauth/authorize'

fbr <- oauth_app('fitbitR',key,secret)
fitbit <- oauth_endpoint(tokenURL,authorizeURL,accessTokenURL)

token <- oauth1.0_token(fitbit,fbr)
sig <- sign_oauth1.0(fbr,
    token=token$oauth_token,
    token_secret=token$oauth_token_secret
)

我完成了身份验证。来自 httr 的消息,但尝试访问 api 然后会引发错误消息

GET("http://api.fitbit.com/1/user/-/activities/date/2012-08-29.json", sig)
Response [http://api.fitbit.com/1/user/-/activities/date/2012-08-29.json]
  Status: 401
  Content-type: application/x-www-form-urlencoded;charset=UTF-8
{"errors":[{"errorType":"oauth","fieldName":"oauth_access_token","message":"Invalid signature or token '<edited>' or token '<edited>'"}]} 

关于问题可能是什么的任何线索?

4

2 回答 2

3

问题来自 httr 库,它使用 curlEscape 对参数进行编码,而 OAuth 1.0 规范需要百分比编码(请参阅此页面)。

用 curlPercentEncode 替换对 curlEscape 的调用解决了这个问题!

非常感谢@mark-s 的帮助。

于 2012-09-03T09:00:06.203 回答
2

我唯一注意到的是,您获取签名的调用与 httr 示例略有不同。httr 示例是:

sig <- sign_oauth1.0(myapp, token$oauth_token, token$oauth_token_secret)

虽然您的代码是:

sig <- sign_oauth1.0(fbr,
    token=token$oauth_token,
    token_secret=token$oauth_token_secret
)

您的代码中是否需要“token=”和“token_secret=”?

于 2012-08-31T15:14:52.620 回答