2011-09-22 18 views
7

私は今日InstapaperのXAuth APIを実装しようとしました。私はまだoauthトークンを手に入れることができませんでした。Instapaper APIとJavascript XAuth

私が間違っていることは何ですか?

私はnode.jsとoauthモジュールを使用しています。余分なパラメータとしてユーザ名、パスワード、amdモードを渡す必要があることは私の理解です。また、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ののAPIはAuthorizationヘッダを解析で厳しすぎる場合はエラーであるかどうかわかりません、ヘッダー区切り文字のコンマの後にスペースを追加する必要がありました。とにかく、これはすべての問題(400エラー)を引き起こしているようです。私はこれを反映するoauth.jsファイルを修正

oauth_consumer_key=SomeKey, oauth_consumer_secret=SomeSecret... 

にする必要

oauth_consumer_key=SomeKey,oauth_consumer_secret=SomeSecret... 

:として

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

Paul(と私がそうだったのと同じ問題に直面している他の人)は、代わりに 'getOAuthRequestToken(x_auth_params、callback)'を使うことができます(node-oauth v0.9.8でテスト済み)。 Authorizationヘッダーにスペースがない場合の修正はまだ必要です。ただし、(https:// www.instapaper.com/api/1/oauth/access_token'に)新しいOAuthインスタンスを作成するときには必ずrequestUrlを設定してください。 –

1

欠けているスペースについては、デレクの答えが問題ですが、oauth.jsを編集する必要はありません。

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

私はまだこれに対して私の頭を叩いてる