2012-08-31 34 views
5

Tôi đang cố gắng kết nối với api fitbit bằng cách sử dụng httr library.Xác thực Oauth cho Fitbit bằng cách sử dụng httr

Sử dụng các ví dụ cung cấp, tôi đã đưa ra đoạn mã sau:

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 
) 

tôi nhận được xác thực đầy đủ. nhắn từ httr, nhưng cố gắng để truy cập vào api sau đó ném một thông báo lỗi

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>'"}]} 

Bất kỳ manh mối về những gì các vấn đề có thể được?

Trả lời

4

Sự cố đến từ thư viện httr, sử dụng curlEscape để mã hóa paramaters trong khi thông số kỹ thuật OAuth 1.0 yêu cầu mã hóa phần trăm (xem this page).

Thay thế cuộc gọi thành curlEscape with curlPercentEncode giải quyết vấn đề!

nhiều người nhờ vào @ mark-s vì sự giúp đỡ của anh ấy.

+1

Bạn có thể mở rộng câu trả lời bằng cách đưa ra một mã ví dụ về cách thay thế cuộc gọi đến curlEscape bằng curlPercentEncode "? –

+0

Bạn có muốn giải thích điều này có nghĩa là gì không? (Mặc dù tôi không chắc liệu điều đó có liên quan hay không kể từ khi triển khai 'httr' dường như đã thay đổi). –

2

Điều duy nhất tôi nhận thấy là cuộc gọi của bạn để nhận chữ ký hơi khác so với ví dụ về httr. Các ví dụ httr là:

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

Trong khi mã của bạn là:

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

Bạn có cần các "token =" và "token_secret =" trong mã của bạn?

+0

Chỉ cố gắng vì lợi ích của nó, nhưng nó không có sự khác biệt: dù sao, sử dụng đối số được đặt tên không nên tạo sự khác biệt? Nhưng cảm ơn đề nghị của bạn! –

+0

Bạn có thể đăng yêu cầu chi tiết với tiêu đề được bao gồm không? –

+0

Đây là tiêu đề http: OAuth oauth% 5Fconsumer% 5Fkey = \ " \", oauth% 5Fnonce = \ "ImkQ6g3HO0 \", oauth% 5Fsignature = \ " \", oauth% 5Fsignature% 5Fmethod = \ "HMAC% 2DSHA1 \ ", oauth% 5Ftimestamp = \" 1346655744 \ ", oauth% 5Ftoken = \" \ ", oauth% 5Fversion = \" 1% 2E0 \ "việc này có giúp ích gì không? –

Các vấn đề liên quan