5

httrライブラリを使用してfitbitAPIに接続しようとしています。

提供された例を使用して、次のコードを思いつきました。

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

この問題は、パラメータのエンコードにcurlEscapeを使用するhttrライブラリに起因しますが、OAuth 1.0仕様ではパーセントエンコードが必要です(このページを参照)。

curlEscapeの呼び出しをcurlPercentEncodeに置き換えると、問題が解決します。

@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 に答える