2012-08-31 5 views
5

Ich versuche, die fitbit api mit der httr library verbinden.Oauth Authentifizierung zu Fitbit mit HTR

die Beispiele Verwendung zur Verfügung gestellt, kam ich mit dem folgenden Code auf:

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 
) 

ich die Authentifizierung vollständig erhalten. Nachricht von HTTR, aber die api dann zuzugreifen versuchen, wirft eine Fehlermeldung

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

keine Ahnung, was das Problem sein könnte?

Antwort

4

Das Problem kommt von der HTTR Bibliothek, die für die Codierung curlEscape paramaters verwendet, während die OAuth 1.0 Spezifikationen Prozent Codierung erfordert (siehe this page).

Ersetzen von Aufrufen von curlEscape mit curlPercentEncode löst das Problem!

vielen dank @ mark-s für seine hilfe.

+1

Könnten Sie bitte die Antwort, indem sie ein Beispiel-Code, wie man „ersetzen Anruf mit curlPercentEncode curlEscape erweitern "? –

+0

Möchten Sie erklären, was das bedeutet? (Obwohl ich mir nicht sicher bin, ob das noch relevant ist, da sich die Implementierung von 'httr' anscheinend geändert hat). –

2

Das einzige, was ich bemerke, ist, dass Ihr Aufruf, die Signatur zu bekommen, etwas anders ist als die HTT-Beispiele. Die HTTR Beispiele sind:

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

Während Ihr Code:

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

Benötigen Sie die "token =" und "token_secret =" im Code?

+0

Nur versucht, um es zu tun, aber es machte keinen Unterschied: Wie auch immer, benannte Argumente sollten keinen Unterschied machen? Aber danke für deinen Vorschlag! –

+0

Können Sie die ausführliche Anfrage mit den enthaltenen Kopfzeilen posten? –

+0

Hier ist der HTTP-Header: OAuth oauth% 5Fconsumer% 5Fkey = \ " \", oauth% 5Fnonce = \ "ImkQ6g3HO0 \", oauth% 5Fsignature = \ " \", oauth% 5Fsignature% 5Fmethod = \ "HMAC% 2DSHA1 \ "oauth% 5Ftimestamp = \ "1346655744 \", oauth% 5Ftoken = \" \“, oauth% 5Fversion = \ "1% 2E0 \" tut diese Hilfe? –

Verwandte Themen