Twitter OAuth Request_Token с Javascript, возможно, не вовремя? - PullRequest
1 голос
/ 08 января 2012

Так что я пытаюсь и не могу получить токен из твиттера.Я получаю следующую ошибку: «Не удалось проверить подпись и токен oauth».Я читал, что это может быть из-за неправильной работы системных часов.В 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)

Это дало мне год 2012 и 17 дней. 1972 1976 1980 1984 1988 1992 1996 2000 2004 2008 _ _ =10 високосных дней.Сегодня восьмое, так что, забирая високосные дни, кажется, что мои системные часы на седьмом?Или я здесь ошибся?Если это проблема, как я могу исправить свои часы?

В cmd, когда я делаю дату, cmd выдает мне сегодняшнюю дату, то есть 8-е.

Вот мой запрос и код сообщенияв случае, если проблема заключается в коде, а не в часах.

Мой пост запрос:

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 

, который получает 401 (Несанкционированный)

Вот мой код JavaScript.

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("&")
}

Есть идеи?

1 Ответ

0 голосов
/ 01 февраля 2013

Я использовал библиотеку под названием «jsOAuth-1.3.3», которая была найдена в списке твиттерных библиотек, совместимых с JavaScript, но ее больше нет.

2 опции javascript, которые они перечисляют сейчас:

  • user-stream от @AivisSilins - простой клиент Node.js для пользовательских потоков и
  • codebird-js от @mynetx - библиотеки Twitter на JScript.

как найдено на https://dev.twitter.com/docs/twitter-libraries

Если у кого-то есть проблема, когда он не может заставить работать ни одно из этих решений, я могу попробовать найти в Интернете или загрузить библиотеку, которую я где-то использовал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...