2011-09-22 8 views
7

मैंने आज अधिकांश खर्च किया है Instapaper के XAuth API को लागू करने का प्रयास करें। मैं अभी तक एक ओथ टोकन पाने में सक्षम नहीं हूं।इंस्टैपर एपीआई और जावास्क्रिप्ट XAuth

कोई विचार क्या मैं गलत कर रहा हूं?

मैं node.js और oauth मॉड्यूल का उपयोग कर रहा हूं। यह मेरी समझ है कि मुझे उपयोगकर्ता नाम, पासवर्ड, एमएमडी मोड को अतिरिक्त पैरामीटर के रूप में पास करने की आवश्यकता है। और oauth मॉड्यूल सभी oauth पैरामीटर का ख्याल रखना चाहिए। लेकिन ऐसा नहीं है। कोड यह रहा:

var OAuth = require('oauth').OAuth; 

var oauth = new OAuth(
 '', 
 'https://www.instapaper.com/api/1/oauth/access_token', 
 'CONSUMER_KEY', 
 'CONSUMER_SECRET', 
 '1.0', 
 null, 
 'HMAC-SHA1', 
 null 
); 

var extra = { 
 'x_auth_username': 'USERNAME', 
 'x_auth_password': 'PASSWORD', 
 'x_auth_mode': 'client_auth' 
}; 
var hello = oauth._prepareParameters('', '', 'POST', 'https://www.instapaper.com/api/1/oauth/access_token', null); 
var url = 'https://www.instapaper.com/api/1/oauth/access_token'; 
var f = true; 
for (var i in hello) { 
 if (f) { 
   url += '?'; 
   f = false; 
 } else { 
   url += '&'; 
 } 
 url += hello[i][0] + '=' + hello[i][1]; 
} 
console.log(url+'&x_auth_mode=client_auth&x_auth_username=&x_auth_password=') 
oauth._performSecureRequest('', '', "POST", url+'&x_auth_mode=client_auth&x_auth_username=&x_auth_password=', null, null, null, function(error, data, response) { 
 console.log(error, data) 
}); 

और यह देता है:

{ statusCode: 401, 
    data: 'oauth_signature [pWRf4W9k9nogID/O90Ng29bR2K0=] does not match expected value [eqJ8zD1bKeUa3InpDyegGDAbSnM=]' } 'oauth_signature [pWRf4W9k9nogID/O90Ng29bR2K0=] does not match expected value [eqJ8zD1bKeUa3InpDyegGDAbSnM=]'} 
+0

मैं अभी भी इस के खिलाफ मेरे सिर पीटने कर रहा हूँ (हाँ, "विभाजक", वहाँ मॉड्यूल के कोड लिखने में कोई गलती है):

OAuth क्लाइंट बनाने के बाद, बस विभाजक स्ट्रिंग सेट । कृपया मदद करे। –

+0

क्या आपको कभी यह काम मिल रहा है? एक समाधान समाधान पोस्ट करना, या सही उत्तर के रूप में समाधान को चिह्नित करना बहुत अच्छा होगा –

उत्तर

5

तो मुझे यकीन है कि क्या यह oauth मॉड्यूल के साथ या यदि Instapaper के एपीआई Authorization हेडर पार्स करने में भी सख्त है एक त्रुटि है नहीं कर रहा हूँ, लेकिन मुझे हेडर डेलीमीटर के लिए अल्पविराम के बाद एक जगह जोड़नी पड़ी। किसी भी दर पर यह सभी मुद्दों (400 त्रुटियों) का कारण बनता प्रतीत होता है।

oauth_consumer_key=SomeKey,oauth_consumer_secret=SomeSecret... 

oauth_consumer_key=SomeKey, oauth_consumer_secret=SomeSecret... 

होने की जरूरत है कि मैं इस प्रतिबिंबित करने के लिए oauth.js फ़ाइल संशोधित:

OAuth वर्तमान के रूप में हेडर बनाता है।

var OAuth = require('oauth').OAuth; 

var consumerKey = 'chill'; 
var consumerSecret = 'duck'; 

var oa = new OAuth(
    null, 
    'https://www.instapaper.com/api/1/oauth/access_token', 
    consumerKey, 
    consumerSecret, 
    '1.0', 
    null, 
    'HMAC-SHA1' 
); 

var x_auth_params = { 
    'x_auth_mode': 'client_auth', 
    'x_auth_password': 'yourpass', 
    'x_auth_username': '[email protected]' 
}; 

oa.getOAuthAccessToken(null, null, null, x_auth_params, function (err, token, tokenSecret, results) { 

    // CAN HAZ TOKENS! 
    console.log(token); 
    console.log(tokenSecret); 

    // ZOMG DATA!!! 
    oa.get("https://www.instapaper.com/api/1/bookmarks/list", token, tokenSecret, function (err, data, response) { 

    console.log(data); 

    }); 

}); 

आशा इस मदद करता है: https://github.com/ciaranj/node-oauth/blob/master/lib/oauth.js#L121

लाइन

authHeader+= "" + this._encodeData(orderedParameters[i][0])+"=\""+ this._encodeData(orderedParameters[i][1])+"\", "; 

यहाँ मेरी काम कर ग्राहक नमूना है के अंत में अल्पविराम के बाद एक अंतरिक्ष जोड़ा गया!

+0

क्या यह अभी भी एक "कामकाजी" नमूना है? ऐसा लगता है कि यह काम नहीं करता है, क्योंकि "getOAuthAccessToken" के हस्ताक्षर तब से बदल गए हैं, जब तक कि कुछ ऐसा न हो जो मुझे याद नहीं है। –

+0

पॉल (और हर कोई जो मुझे एक ही मुद्दे का सामना कर रहा है), आप 'getOAuthRequestToken (x_auth_params, कॉलबैक)' का उपयोग कर सकते हैं (इसके बजाय नोड-ओथ v0.9.8 के साथ परीक्षण किया गया)। प्राधिकरण शीर्षलेख में गायब रिक्त स्थान के साथ ठीक अभी भी आवश्यक है। नया ओएथ इंस्टेंस बनाते समय requestUrl को सेट करना सुनिश्चित करें, हालांकि ('https: // www.instapaper.com/api/1/oauth/access_token') पर। –

1

डेरेक का जवाब लापता स्थान के बारे में सही है, लेकिन आपको oauth.js संपादित करने की आवश्यकता नहीं है।

var OAuth = require('oauth').OAuth; 
var oa = new OAuth({...}); 
oa._oauthParameterSeperator = ', '; 

संबंधित मुद्दे