Click here to Skip to main content
Click here to Skip to main content

Twitter API v1.1 with OAuth

, 27 Jan 2014
Rate this:
Please Sign up or sign in to vote.
Twitter API v1.1 with OAuth.

Introduction   

The OAuth protocol enables websites or applications (Consumers) to access Protected Resources from a web service (Service Provider) via an API, without requiring Users to disclose their Service Provider credentials to the Consumers. More generally, OAuth creates a freely-implementable and generic methodology for API authentication. 

OAuth aims to unify the experience and implementation of delegated web service authentication into a single, community-driven protocol. OAuth builds on existing protocols and best practices that have been independently implemented by various websites. An open standard, supported by large and small providers alike, promotes a consistent and trusted experience for both application developers and the users of those applications.

Recently twitter announced API v1.1 and also deprecated v1.0 API support.

In v1.1 twitter is very strict in terms of authentication. We need to create an application for accessing the Twitters API. 

Application creation  

For creating an application we need to login with our twitters credentials on https://dev.twitter.com/.

After successfully logged-in click on "Create a new application" to create an application.

After that fill the below shown form to create an application.

Provide Application name,description,website URL and call-back URL.



Accept the twitter mentioned rule and regulation and click on "Create your Twitter application" to proceed further and we will see the below screen.

Now we have our Consumer Key and Consumer Secret  but we don't have any kind of Access Token and Access Token Secret.

So for generating/creating the access token and access token secret click on "Create Access Token" as shown in below image

We will see below screen with the confirmation

Cheers guys we have successfully created an application for Twitter.

Now its time to write some code for accessing Twitter API.

Using the code 

Twitter provides many API if we want we can check here.

We will look into code now.

  1. Verify_Credentials API: We can have a look at the description of this API over here.
  2. public void Verify_Credentials()
    {
        string oauthconsumerkey = "your consumerkey";
        string oauthconsumersecret = "your consumer secret key";
        string oauthsignaturemethod = "HMAC-SHA1";
        string oauthversion = "1.0";
        string oauthtoken = "your oauth token";
        string oauthtokensecret = "your oauth token secret";
        string oauthnonce = Convert.ToBase64String(new ASCIIEncoding().GetBytes(DateTime.Now.Ticks.ToString()));
        TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
        string oauthtimestamp = Convert.ToInt64(ts.TotalSeconds).ToString();
        SortedDictionary<string, string> sd = new SortedDictionary<string, string>();
        sd.Add("oauth_version", "1.0");
        sd.Add("oauth_consumer_key", oauthconsumerkey);
        sd.Add("oauth_nonce", oauthnonce);
        sd.Add("oauth_signature_method", "HMAC-SHA1");
        sd.Add("oauth_timestamp", oauthtimestamp);
        sd.Add("oauth_token", oauthtoken);
        //GS - Build the signature string
        string baseString = String.Empty;
        baseString += "GET" + "&";
        baseString += Uri.EscapeDataString(
          "https://api.twitter.com/1.1/account/verify_credentials.json") + "&";
        foreach (KeyValuePair<string, string> entry in sd)
        {
            baseString += Uri.EscapeDataString(entry.Key + "=" + entry.Value + "&");
        }
    
        //Remove the trailing ambersand char(last 3 chars - %26)
        baseString = baseString.Substring(0, baseString.Length - 3);
    
        //Build the signing key
        string signingKey = Uri.EscapeDataString(oauthconsumersecret) + 
          "&" + Uri.EscapeDataString(oauthtokensecret);
    
        //Sign the request
        HMACSHA1 hasher = new HMACSHA1(new ASCIIEncoding().GetBytes(signingKey));
        string oauthsignature = Convert.ToBase64String(
          hasher.ComputeHash(new ASCIIEncoding().GetBytes(baseString)));
    
        //Tell Twitter we don't do the 100 continue thing
        ServicePointManager.Expect100Continue = false;
    
        //authorization header
        HttpWebRequest hwr = (HttpWebRequest)WebRequest.Create(
          @"https://api.twitter.com/1.1/account/verify_credentials.json");
        string authorizationHeaderParams = String.Empty;
        authorizationHeaderParams += "OAuth ";
        authorizationHeaderParams += "oauth_nonce=" + "\"" + 
          Uri.EscapeDataString(oauthnonce) + "\",";
        authorizationHeaderParams += "oauth_signature_method=" + "\"" + 
          Uri.EscapeDataString(oauthsignaturemethod) + "\",";
        authorizationHeaderParams += "oauth_timestamp=" + "\"" + 
          Uri.EscapeDataString(oauthtimestamp) + "\",";
        authorizationHeaderParams += "oauth_consumer_key=" + "\"" + 
          Uri.EscapeDataString(oauthconsumerkey) + "\",";
        authorizationHeaderParams += "oauth_token=" + "\"" + 
          Uri.EscapeDataString(oauthtoken) + "\",";
        authorizationHeaderParams += "oauth_signature=" + "\"" + 
          Uri.EscapeDataString(oauthsignature) + "\",";
        authorizationHeaderParams += "oauth_version=" + "\"" + 
          Uri.EscapeDataString(oauthversion) + "\"";
        hwr.Headers.Add("Authorization", authorizationHeaderParams);
        hwr.Method = "GET";
        hwr.ContentType = "application/x-www-form-urlencoded";
    
        //Allow us a reasonable timeout in case Twitter's busy
        hwr.Timeout = 3 * 60 * 1000;
        try
        {
            hwr.Proxy = new WebProxy("enter proxy details/address");
            HttpWebResponse rsp = hwr.GetResponse() as HttpWebResponse;
            Stream dataStream = rsp.GetResponseStream();
            //Open the stream using a StreamReader for easy access.
            StreamReader reader = new StreamReader(dataStream);
            //Read the content.
            string responseFromServer = reader.ReadToEnd();
        }
        catch (Exception ex)
        {
           
        }
    }
  3. Search API:
  4. We can have a look at the description of this API over here

    public void Search()
    {
        string url = "https://api.twitter.com/1.1/search/tweets.json?q=your search query";
        string oauthconsumerkey = "your consumer key";
        string oauthtoken = "your oauth token";
        string oauthconsumersecret = "your consumer secret";
        string oauthtokensecret = "your oauth token secret";
        string oauthsignaturemethod = "HMAC-SHA1";
        string oauthversion = "1.0";
        string oauthnonce = Convert.ToBase64String(
          new ASCIIEncoding().GetBytes(DateTime.Now.Ticks.ToString()));
        TimeSpan timeSpan = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
        string oauthtimestamp = Convert.ToInt64(timeSpan.TotalSeconds).ToString();
        SortedDictionary<string, string> basestringParameters = new SortedDictionary<string, string>();
        basestringParameters.Add("q", "your search query");
        basestringParameters.Add("oauth_version", oauthversion);
        basestringParameters.Add("oauth_consumer_key", oauthconsumerkey);
        basestringParameters.Add("oauth_nonce", oauthnonce);
        basestringParameters.Add("oauth_signature_method", oauthsignaturemethod);
        basestringParameters.Add("oauth_timestamp", oauthtimestamp);
        basestringParameters.Add("oauth_token", oauthtoken);
        //Build the signature string
        string baseString = String.Empty;
        baseString += "GET" + "&";
        baseString += Uri.EscapeDataString(url.Split('?')[0]) + "&";
        foreach (KeyValuePair<string, string> entry in basestringParameters)
        {
            baseString += Uri.EscapeDataString(entry.Key + "=" + entry.Value + "&");
        }
    
        //Remove the trailing ambersand char last 3 chars - %26
        baseString = baseString.Substring(0, baseString.Length - 3);
    
        //Build the signing key
        string signingKey = Uri.EscapeDataString(oauthconsumersecret) + 
          "&" + Uri.EscapeDataString(oauthtokensecret);
    
        //Sign the request
        HMACSHA1 hasher = new HMACSHA1(new ASCIIEncoding().GetBytes(signingKey));
        string oauthsignature = Convert.ToBase64String(
          hasher.ComputeHash(new ASCIIEncoding().GetBytes(baseString)));
    
        //Tell Twitter we don't do the 100 continue thing
        ServicePointManager.Expect100Continue = false;
    
        //authorization header
        HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(@url);
        string authorizationHeaderParams = String.Empty;
        authorizationHeaderParams += "OAuth ";
        authorizationHeaderParams += "oauth_nonce=" + "\"" + 
          Uri.EscapeDataString(oauthnonce) + "\",";
        authorizationHeaderParams += "oauth_signature_method=" + "\"" + 
          Uri.EscapeDataString(oauthsignaturemethod) + "\",";
        authorizationHeaderParams += "oauth_timestamp=" + "\"" + 
          Uri.EscapeDataString(oauthtimestamp) + "\",";
        authorizationHeaderParams += "oauth_consumer_key=" + "\"" + 
          Uri.EscapeDataString(oauthconsumerkey) + "\",";
        authorizationHeaderParams += "oauth_token=" + "\"" + 
          Uri.EscapeDataString(oauthtoken) + "\",";
        authorizationHeaderParams += "oauth_signature=" + "\"" + 
          Uri.EscapeDataString(oauthsignature) + "\",";
        authorizationHeaderParams += "oauth_version=" + "\"" + 
          Uri.EscapeDataString(oauthversion) + "\"";
        webRequest.Headers.Add("Authorization", authorizationHeaderParams);
    
        webRequest.Method = "GET";
        webRequest.ContentType = "application/x-www-form-urlencoded";
    
        //Allow us a reasonable timeout in case Twitter's busy
        webRequest.Timeout = 3 * 60 * 1000;
        try
        {
            //Proxy settings
            webRequest.Proxy = new WebProxy("enter proxy details/address");
            HttpWebResponse webResponse = webRequest.GetResponse() as HttpWebResponse;
            Stream dataStream = webResponse.GetResponseStream();
            // Open the stream using a StreamReader for easy access.
            StreamReader reader = new StreamReader(dataStream);
            // Read the content.
            string responseFromServer = reader.ReadToEnd();
        }
        catch (Exception ex)
        {
        }
    }
  5. Statuses/Update API:
  6. We can have a look at the description of this API over here.

    public void SendReply()
    {
        //If you want to reply to particular tweet then use @screenname along
        //with the status you need to update and status id of that particular
        //tweet to which you want to reply.
        //If you want to update status only then just post the message.
        string status = "@screenname Good day";
        string postBody = "status=" + Uri.EscapeDataString(status);
        string oauth_consumer_key = "your consumerkey";
        string oauth_consumerSecret = "your consumer secret";
        string oauth_signature_method = "HMAC-SHA1";
        string oauth_version = "1.0";
        string oauth_token = "your aouth token";
        string oauth_token_secret = "your oauth token secret";
        string oauth_nonce = Convert.ToBase64String(new ASCIIEncoding().GetBytes(DateTime.Now.Ticks.ToString()));
        TimeSpan timeSpan = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);
        string oauth_timestamp = Convert.ToInt64(timeSpan.TotalSeconds).ToString();
                
        SortedDictionary<string, string> basestringParameters = new SortedDictionary<string, string>();
        //include the "in_reply_to_status_id" parameter if you need to reply to particular tweet.
        basestringParameters.Add("in_reply_to_status_id", 
          "status id of the post to which we are going to reply");
        basestringParameters.Add("status", Uri.EscapeDataString(status));
        basestringParameters.Add("oauth_version", oauth_version);
        basestringParameters.Add("oauth_consumer_key", oauth_consumer_key);
        basestringParameters.Add("oauth_nonce", oauth_nonce);
        basestringParameters.Add("oauth_signature_method", oauth_signature_method);
        basestringParameters.Add("oauth_timestamp", oauth_timestamp);
        basestringParameters.Add("oauth_token", oauth_token);
    
        //Build the signature string
        string baseString = String.Empty;
        baseString += "POST" + "&";
        baseString += Uri.EscapeDataString("https://api.twitter.com/1.1/statuses/update.json") + "&";
        foreach (KeyValuePair<string, string> entry in basestringParameters)
        {
            baseString += Uri.EscapeDataString(entry.Key + "=" + entry.Value + "&");
        }
    
        //GS - Remove the trailing ambersand char, remember 
        //it's been urlEncoded so you have to remove the 
        //last 3 chars - %26
        baseString = baseString.Substring(0, baseString.Length - 3);
    
        //Build the signing key    
        string signingKey = Uri.EscapeDataString(oauth_consumerSecret) + 
          "&" + Uri.EscapeDataString(oauth_token_secret);
    
        //Sign the request
        HMACSHA1 hasher = new HMACSHA1(new ASCIIEncoding().GetBytes(signingKey));
        string signatureString = Convert.ToBase64String(hasher.ComputeHash(new ASCIIEncoding().GetBytes(baseString)));
    
        //Tell Twitter we don't do the 100 continue thing
        ServicePointManager.Expect100Continue = false;
    
        HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(
          @"https://api.twitter.com/1.1/statuses/update.json?in_reply_to_status_id=status id");
    
        string authorizationHeaderParams = String.Empty;
        authorizationHeaderParams += "OAuth ";
        authorizationHeaderParams += "oauth_nonce=" + "\"" + 
          Uri.EscapeDataString(oauth_nonce) + "\",";
        authorizationHeaderParams += "oauth_signature_method=" + 
          "\"" + Uri.EscapeDataString(oauth_signature_method) + "\",";
        authorizationHeaderParams += "oauth_timestamp=" + "\"" + 
          Uri.EscapeDataString(oauth_timestamp) + "\",";
        authorizationHeaderParams += "oauth_consumer_key=" + "\"" + 
          Uri.EscapeDataString(oauth_consumer_key) + "\",";
        authorizationHeaderParams += "oauth_token=" + "\"" + 
          Uri.EscapeDataString(oauth_token) + "\",";
        authorizationHeaderParams += "oauth_signature=" + "\"" + 
          Uri.EscapeDataString(signatureString) + "\",";
        authorizationHeaderParams += "oauth_version=" + "\"" + 
          Uri.EscapeDataString(oauth_version) + "\"";
        webRequest.Headers.Add("Authorization", authorizationHeaderParams);
    
        webRequest.Method = "POST";
        webRequest.ContentType = "application/x-www-form-urlencoded";
        Stream stream = webRequest.GetRequestStream();
        byte[] bodyBytes = new ASCIIEncoding().GetBytes(postBody);
        stream.Write(bodyBytes, 0, bodyBytes.Length);
        stream.Flush();
        stream.Close();
    
        //Allow us a reasonable timeout in case Twitter's busy
        webRequest.Timeout = 3 * 60 * 1000;
        try
        {
            webRequest.Proxy = new WebProxy("enter proxy details/address");
            HttpWebResponse webResponse = webRequest.GetResponse() as HttpWebResponse;
            Stream dataStream = webResponse.GetResponseStream();
            // Open the stream using a StreamReader for easy access.
            StreamReader reader = new StreamReader(dataStream);
            // Read the content.
            string responseFromServer = reader.ReadToEnd();
        }
        catch (Exception ex)
        {
    
        }
    }
  7. Request_Token API:
  8. We can have a look at the description of this API over here.

    public void RequestToken()
    {
        string oauthcallback = "your callback URL";
        string oauthconsumerkey = "your consumer key";
        string oauthconsumersecret = "your consumer secret";
        string oauthtokensecret = string.Empty;
        string oauthtoken = string.Empty;
        string oauthsignaturemethod = "HMAC-SHA1";
        string oauthversion = "1.0";
        string oauthnonce = Convert.ToBase64String(new ASCIIEncoding().GetBytes(DateTime.Now.Ticks.ToString()));
        TimeSpan timeSpan = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
        string oauthtimestamp = Convert.ToInt64(timeSpan.TotalSeconds).ToString();
        string url = "https://api.twitter.com/oauth/request_token?oauth_callback=" + oauthcallback;
        SortedDictionary<string, string> basestringParameters = new SortedDictionary<string, string>();
        basestringParameters.Add("oauth_version", oauthversion);
        basestringParameters.Add("oauth_consumer_key", oauthconsumerkey);
        basestringParameters.Add("oauth_nonce", oauthnonce);
        basestringParameters.Add("oauth_signature_method", oauthsignaturemethod);
        basestringParameters.Add("oauth_timestamp", oauthtimestamp);
        basestringParameters.Add("oauth_callback", Uri.EscapeDataString(oauthcallback));
    
        //Build the signature string
        string baseString = String.Empty;
        baseString += "POST" + "&";
        baseString += Uri.EscapeDataString(url.Split('?')[0]) + "&";
        foreach (KeyValuePair<string, string> entry in basestringParameters)
        {
            baseString += Uri.EscapeDataString(entry.Key + "=" + entry.Value + "&");
        }
    
        //Remove the trailing ambersand char last 3 chars - %26
        baseString = baseString.Substring(0, baseString.Length - 3);
    
        //Build the signing key
        string signingKey = Uri.EscapeDataString(oauthconsumersecret) + 
          "&" + Uri.EscapeDataString(oauthtokensecret);
    
        //Sign the request
        HMACSHA1 hasher = new HMACSHA1(new ASCIIEncoding().GetBytes(signingKey));
        string oauthsignature = Convert.ToBase64String(
          hasher.ComputeHash(new ASCIIEncoding().GetBytes(baseString)));
    
        //Tell Twitter we don't do the 100 continue thing
        ServicePointManager.Expect100Continue = false;
        HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(@url);
    
        string authorizationHeaderParams = String.Empty;
        authorizationHeaderParams += "OAuth ";
        authorizationHeaderParams += "oauth_nonce=" + "\"" + 
          Uri.EscapeDataString(oauthnonce) + "\",";
        authorizationHeaderParams += "oauth_signature_method=" + "\"" + 
          Uri.EscapeDataString(oauthsignaturemethod) + "\",";
        authorizationHeaderParams += "oauth_timestamp=" + "\"" + 
          Uri.EscapeDataString(oauthtimestamp) + "\",";
        authorizationHeaderParams += "oauth_consumer_key=" + "\"" + 
          Uri.EscapeDataString(oauthconsumerkey) + "\",";
        authorizationHeaderParams += "oauth_signature=" + "\"" + 
          Uri.EscapeDataString(oauthsignature) + "\",";
        authorizationHeaderParams += "oauth_version=" + "\"" + 
          Uri.EscapeDataString(oauthversion) + "\"";
        webRequest.Headers.Add("Authorization", authorizationHeaderParams);
    
        webRequest.Method = "POST";
        webRequest.ContentType = "application/x-www-form-urlencoded";
    
        //Allow us a reasonable timeout in case Twitter's busy
        webRequest.Timeout = 3 * 60 * 1000;
    
        try
        {
            webRequest.Proxy = new WebProxy("enter proxy details/address");
            HttpWebResponse webResponse = webRequest.GetResponse() as HttpWebResponse;
            Stream dataStream = webResponse.GetResponseStream();
            // Open the stream using a StreamReader for easy access.
            StreamReader reader = new StreamReader(dataStream);
            // Read the content.
            string responseFromServer = reader.ReadToEnd();
        }
        catch (Exception ex)
        {
        }
    }
  9. Authorize API:
  10. We can have a look at the description of this API over here.

    public void Authorize()
    {
        string oauthconsumerkey = "your consumer key";
        string oauthconsumersecret = "your consumer secret";
        string oauthtokensecret = 
          "Use the oauth_token_secret you receieved as the result of Request_Token API";
        string oauthsignaturemethod = "HMAC-SHA1";
        string oauthversion = "1.0";
        string oauthtoken = "Use the oauth_token you receieved as the result of Request_Token API";
        string url = "https://api.twitter.com/oauth/authorize?oauth_token=" + oauthtoken;
        string oauthnonce = Convert.ToBase64String(new ASCIIEncoding().GetBytes(DateTime.Now.Ticks.ToString()));
        TimeSpan timeSpan = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
        string oauthtimestamp = Convert.ToInt64(timeSpan.TotalSeconds).ToString();
        SortedDictionary<string, string> basestringParameters = new SortedDictionary<string, string>();
        basestringParameters.Add("oauth_version", oauthversion);
        basestringParameters.Add("oauth_consumer_key", oauthconsumerkey);
        basestringParameters.Add("oauth_nonce", oauthnonce);
        basestringParameters.Add("oauth_signature_method", oauthsignaturemethod);
        basestringParameters.Add("oauth_timestamp", oauthtimestamp);
    
        //Build the signature string
        string baseString = String.Empty;
        baseString += "GET" + "&";
        baseString += Uri.EscapeDataString(url.Split('?')[0]) + "&";
        foreach (KeyValuePair<string, string> entry in basestringParameters)
        {
            baseString += Uri.EscapeDataString(entry.Key + "=" + entry.Value + "&");
        }
    
        //Remove the trailing ambersand char last 3 chars - %26
        baseString = baseString.Substring(0, baseString.Length - 3);
    
        //Build the signing key
        string signingKey = Uri.EscapeDataString(oauthconsumersecret) + 
          "&" + Uri.EscapeDataString(oauthtokensecret);
    
        //Sign the request
        HMACSHA1 hasher = new HMACSHA1(new ASCIIEncoding().GetBytes(signingKey));
        string oauthsignature = 
          Convert.ToBase64String(hasher.ComputeHash(new ASCIIEncoding().GetBytes(baseString)));
    
    
        //Tell Twitter we don't do the 100 continue thing
        ServicePointManager.Expect100Continue = false;
    
        HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(@url);
    
        string authorizationHeaderParams = String.Empty;
        authorizationHeaderParams += "OAuth ";
        authorizationHeaderParams += "oauth_nonce=" + "\"" + 
          Uri.EscapeDataString(oauthnonce) + "\",";
        authorizationHeaderParams += "oauth_signature_method=" + "\"" + 
          Uri.EscapeDataString(oauthsignaturemethod) + "\",";
        authorizationHeaderParams += "oauth_timestamp=" + "\"" + 
          Uri.EscapeDataString(oauthtimestamp) + "\",";
        authorizationHeaderParams += "oauth_consumer_key=" + "\"" + 
          Uri.EscapeDataString(oauthconsumerkey) + "\",";
        authorizationHeaderParams += "oauth_signature=" + "\"" + 
          Uri.EscapeDataString(oauthsignature) + "\",";
        authorizationHeaderParams += "oauth_token=" + "\"" + 
          Uri.EscapeDataString(oauthtoken) + "\",";
        authorizationHeaderParams += "oauth_version=" + "\"" + 
          Uri.EscapeDataString(oauthversion) + "\"";
        webRequest.Headers.Add("Authorization", authorizationHeaderParams);
    
        webRequest.Method = "GET";
        webRequest.ContentType = "application/x-www-form-urlencoded";
    
        //Allow us a reasonable timeout in case Twitter's busy
        webRequest.Timeout = 3 * 60 * 1000;
        try
        {
            webRequest.Proxy = new WebProxy("enter proxy details/address");
            HttpWebResponse webResponse = webRequest.GetResponse() as HttpWebResponse;
            Stream dataStream = webResponse.GetResponseStream();
            // Open the stream using a StreamReader for easy access.
            StreamReader reader = new StreamReader(dataStream);
            // Read the content.
            string responseFromServer = reader.ReadToEnd();
        }
        catch (Exception ex)
        {
        }
    }

Useful Trick

Check the oauth tool for the basestring.It gives us the option to check whether code generated basestring and tool generated basestring are same or not. If it is same then good to go but if code generated basestring is different from tool's basestring then we need to look at our code to make it equal.

As per OAuth Core 1.0, Characters in the unreserved character set MUST NOT be encoded and rest of the characters must be encoded.
unreserved = ALPHA, DIGIT, '-', '.', '_', '~'

References

I am not smart enough to write this article on my own. So here is the list of references: 

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

Rajan Patekar
Software Developer
India India
Rajan, ASP.NET Developer at CMMI Level 5 version 1.3 company in Pune, India, is a radiant and rationalist person.
Other than coding he is having his interest in playing chess, pool and reading novels. Google+
Follow on   LinkedIn

Comments and Discussions

 
QuestionGetting 401 with RequestToken() PinmemberRealComander2-May-14 11:22 
AnswerRe: Getting 401 with RequestToken() PinprofessionalRajan Patekar5-May-14 2:58 
QuestionCan't post twitter comment from c# windows application, PinmemberSathish011731-Mar-14 21:23 
AnswerRe: Can't post twitter comment from c# windows application, PinprofessionalRajan Patekar5-Apr-14 23:39 
Questionstupid question Pinmember4554n21-Feb-14 14:25 
AnswerRe: stupid question PinprofessionalRajan Patekar26-Feb-14 19:54 
GeneralRe: stupid question Pinmember4554n27-Feb-14 2:07 
GeneralRe: stupid question PinprofessionalRajan Patekar16-Mar-14 3:03 
GeneralRe: stupid question Pinmembernotclear4-Jun-14 23:52 
GeneralRe: stupid question PinprofessionalRajan Patekar12-Jun-14 22:18 
Question401 error PinmemberMember 836024729-Jan-14 9:55 
AnswerRe: 401 error PinprofessionalRajan Patekar29-Jan-14 18:22 
GeneralRe: 401 error PinmemberMember 836024730-Jan-14 4:09 
GeneralRe: 401 error PinprofessionalRajan Patekar30-Jan-14 19:19 
GeneralRe: 401 error PinmemberCodeArgie3-Feb-14 2:14 
GeneralRe: 401 error PinprofessionalRajan Patekar3-Feb-14 2:18 
QuestionVOTE OF 5 PinmemberThe Onslaught12-Jan-14 18:42 
AnswerRe: VOTE OF 5 PinprofessionalRajan Patekar27-Jan-14 2:52 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Mobile
Web03 | 2.8.140718.1 | Last Updated 27 Jan 2014
Article Copyright 2013 by Rajan Patekar
Everything else Copyright © CodeProject, 1999-2014
Terms of Service
Layout: fixed | fluid