Sameeh Harfoush
Sameeh Harfoush

Reputation: 610

twitter request_token 401 unauthorized

ok after two days of tryouts i still cant my titanium application to play well with twitter request_token api 1.1, i am always getting 401 unauthorized error .below is my code. i am blocked so any help is appreciated.

var httpClient = Ti.Network.createHTTPClient({
                onerror : function(e) {
                    alert(this.status + ":" + e.error);
                },
                onload : function(e) {
                    alert(this.responseText);
                    if (this.readyState == 4) {
                        var resposeText = this.responseText;
                    }

                }
            });
httpClient.open('POST', "https://api.twitter.com/oauth/request_token");
httpClient.setRequestHeader("content-type", "application/x-www-form-urlencoded; charset=UTF-8");

var now = new Date().getTime();

var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz";
var nonce = "";
for (var i = 0; i < 10; ++i) {
    var rnum = Math.floor(Math.random() * chars.length);
    nonce += chars.substring(rnum, rnum + 1);
}
var parameters = "oauth_callback=" + Ti.Network.encodeURIComponent("http://apicallback.stc.com.sa");

var signature = "POST&" + Ti.Network.encodeURIComponent("https://api.twitter.com/oauth/request_token") + "&" + Ti.Network.encodeURIComponent(parameters);
var header = "OAuth oauth_callback=\"" + Ti.Network.encodeURIComponent("http://apicallback.stc.com.sa") + "\",oauth_consumer_key=\"wPdlchopdYaqHhab8H8jMA\",oauth_nonce=\"" + nonce + "\",oauth_signature=\"" + signature + "\",oauth_signature_method=\"HMAC-SHA1\",oauth_timestamp=\"" + now + "\",oauth_version=\"1.0\"";
httpClient.setRequestHeader("Authorization", header);
httpClient.send(parameters);

Upvotes: 0

Views: 1220

Answers (3)

Aaron Saunders
Aaron Saunders

Reputation: 33335

There are multiple twitter libraries out there for appcelerator that already work, I would suggest starting with one of them.

http://www.clearlyinnovative.com/blog/post/33810421717/titanium-appcelerator-quickie-posting-images-to-twitter-with-social_plus-js

see link to github repo at bottom of posting

Upvotes: 0

air-dex
air-dex

Reputation: 4180

There were several errors :

  • Your nonce seems to be built incorrectly. Generate a string with 32 letters and encode it with Base 64.
  • Your signature is not built correctly too. Refer to the Twitter Developers documentation about making signatures. Here are your errors :
    • All the OAuth arguments are missing but oauth_callback. The OAuth arguments which are used in the Authorize header have to be included in the parameters for the signature
    • You do not build the key to sign datas.
    • You do not use the signature method (oauth_signature_method which is set to "HMAC-SHA1") to sign your datas.
  • Your timestamp is too big. It is the number of seconds since the Unix Epoch time, not the milliseconds. Add a "/1000" :

    var now = new Date().getTime() / 1000

More generally have a look at Twitter Developers documentation about authorizing requests : https://dev.twitter.com/docs/auth/authorizing-request

Upvotes: 1

Sameeh Harfoush
Sameeh Harfoush

Reputation: 610

by chance i found javascript library posted in twitter list of libraries. check it out jsOAuth. there is also API doc for the library :). now i am able to get the authorization token but when i perform search by posting to https://api.twitter.com/1.1/search/tweets.json i get 401 (unauthorized) error. now i am stuck again. any idea what might be the problem...

Upvotes: 0

Related Questions