2012-01-08 7 views
1

だから、私はトゥイーターからトークンを取得しようとしていません。 "oauthの署名とトークンの検証に失敗しました"というエラーが表示されます。 システムクロックが間違っていることが原因である可能性があります。私は、これは2012年と17日と年... 2008を私に与えた次のコードTwitter OAuth Request_Token、Javascriptで、おそらく間違った時間?

var minutes=1000*60; 
var hours=minutes*60; 
var days=hours*24; 
var years=days*365; 
var d=new Date(); 
var t=d.getTime(); 
var y=t/years; 
console.log((y+1970) + " year and " + (t%years)/days) 

と私の日付をテストしたJavaScriptで _ _ = 10閏年。今日は8日なので、システムクロックが7日目に現れるような閏年を取っていますか?それとも私はここでミスをしたことがありますか?これが問題ならば、どのように私の時計を修正するのですか?

cmdでは、私は今日の日付、すなわち、私に8日を与える日付のcmdを行う。

私の投稿要求とコードは、問題がコードではなくクロックにある場合です。

私のポスト要求は次のとおりです。

ここでは401(無許可)

を取得し、私のjavascriptのコードである

POST http://api.twitter.com/oauth/request_token?oauth_callback=127.0.0.1&oauth_consumer_key=FFZJrBaPLsiwTDg5159tTQ&oauth_nonce=tWHEEIW8vLS6tMggo3IXe6e449qv1GpE8LunKRsbRF&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1326039495&oauth_version=1.0&oauth_signature=d%2BQqgTzJCjYIp9vKwm%2BCWzVLPvA 

var url = "http://api.twitter.com/oauth/request_token"; 

var params={ 
oauth_callback : "127.0.0.1" 
,oauth_consumer_key : "FFZJrBaPLsiwTDg5159tTQ" 
,oauth_nonce : OAuth.nonce(42) 
,oauth_signature_method : "HMAC-SHA1" 
,oauth_timestamp : OAuth.timestamp() 
,oauth_version: "1.0"} 

//temp is to be the signature base string 
var temp = toSignParams("POST",url,params); 
console.log(temp); 
//This logs the signature base string as "POST&http%3A%2F%2Fapi.twitter.com%2Foauth%2Frequest_token&oauth_callback%3D127.0.0.1%26oauth_consumer_key%3DFFZJrBaPLsiwTDg5159tTQ%26oauth_nonce%3D5gQVIa3WmwD6ARGGQTITl1Ozgxe2t8em5HC7g8wvMi%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1326038871%26oauth_version%3D1.0" 
//which is correct I think. 
//When I use this with the base signature from twitters oauth example page I get the result they got. 
//it hashes the twitter signing key with base signature. 
params.oauth_signature = b64_hmac_sha1("MCD8BKwGdgPHvAuvgvz4EQpqDAtx89grbuNMRd7Eh98&",temp); 


var req = new XMLHttpRequest(); 
req.open("POST",toURIParams(url,params),true); 
req.send(); 

console.log(params) 

req.onreadystatechange=function(){ 
if (req.readyState==4) 
    { 
    console.log(req.responseText); //this is saying "Failed to validate oauth signature and token" 
    } 
} 

//function to convert to Signature paramaters, as indicated on twitter page. 
function toSignParams(method,base,params){ 
    tail=[]; 
    for (var p in params) { 
     if (params.hasOwnProperty(p)) { 
      tail.push(p + "%3D" + encodeURIComponent(params[p])); 
     } 
    } 
    return method + "&" + encodeURIComponent(base) + "&" + tail.join("%26") 
} 

//function to convert to uri encoded parameters. 
function toURIParams(base, params) { 
    tail = []; 
    for (var p in params) { 
    if (params.hasOwnProperty(p)) { 
     tail.push(p + "=" + encodeURIComponent(params[p])); 
    } 
    } 
    return base + "?" + tail.join("&") 
} 

+0

代わりにjavascript twitterライブラリを使用することに決めました。 – James

+1

JSライブラリを回答として投稿し、回答を受け入れます。あなたの質問に遭遇したら、それは他人を助けるでしょう。 – JSuar

+1

"システムクロックが間違っていることが原因である可能性があると読んだことがあります。" ...昨夜のOAuthコードが今朝壊れてしまった理由について、一時間の混乱の末、私の問題を解決しました! –

答えて

0

JavaScriptと互換性のあるライブラリのtwitterリストにあるように、もはや存在しない "jsOAuth-1.3.3"というライブラリを使用しました。

彼らは今、リスト2のJavaScriptオプションは次のとおりです。@AivisSilinsによって

  • ユーザーストリーム - でTwitterの図書館 - シンプルなNode.jsのユーザーは、クライアント と
  • codebird-jsから@mynetxでストリームJScript。誰もが、彼らが動作するように、これらのソリューションのいずれかを得ることができない問題がある場合はhttps://dev.twitter.com/docs/twitter-libraries

    に見られるよう

、私はオンラインで見つける試みるか、私はどこかで使用されるライブラリをアップロードすることができます。

関連する問題