2012-08-31 5 views
5

httr library을 사용하여 fitbit API에 연결하려고합니다. 제공된 예를 사용httt를 사용하여 Fitbit에 Oauth 인증

, 다음 코드를 내놓았다 :

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

OAuth 1.0 사양에 퍼센트 인코딩이 필요한 반면 (curlEscape를 사용하여 매개 변수를 인코딩하는) httr 라이브러리에서 문제가 발생합니다 (this page 참조).

curlEscape로 통화를 바꾸면 curlPercentEncode가 문제를 해결합니다!

많은 도움을 주신 @ mark-s에게 감사드립니다.

+1

"curlEscape에 대한 호출을 curlPercentEncode로 대체하는 방법에 대한 예제 코드를 제공하여 답변을 확장 해주십시오. "? –

+0

이것이 무슨 뜻인지 설명해 주시겠습니까? ('httr'의 구현이 변경된 것 같기 때문에 여전히 관련이 있는지 확신 할 수 없지만). –

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_secret ="을 코드에서?

+0

방금 ​​시도했지만 아무런 차이가 없었습니다. 어쨌든 명명 된 인수를 사용하여 차이를 만들어서는 안됩니까? 그러나 당신의 제안에 감사드립니다! –

+0

머리글이 포함 된 자세한 정보 요청을 게시 할 수 있습니까? –

+0

oauth % 5Fnonce = \ "imkQ6g3HO0 \", oauth % 5Fsignature = \ " \", oauth % 5Fsignature % 5Fmethod = \ "HMAC % 2auth % 5Ftimestamp = \ "1346655744 \", oauth % 5Ftoken = \ " \", oauth % 5Fversion = \ "1 % 2E0 \"이 도움이됩니까? –