private string OAuthPostRequest(string url, string postData)
        {
            string responseString = string.Empty;

            WebResponse response = null;
            try
            {
                Uri uri = new Uri(url);

                string outURL = string.Empty;
                string outQueryString = string.Empty;

                OAuthParameters p = new OAuthParameters();
                p.ConsumerKey = m_oAuthConsumerKey;
                p.HttpMethod = HttpMethod.POST;
                p.ConsumerSecret = m_oAuthConsumerSecret;
                p.Nonce = GenerateOAuthNonce();
                p.Status = postData;
                p.SignatureType = SignatureTypes.HMACSHA1;
                p.Timestamp = GenerateOAuthTimestamp();
                p.Token = m_oAuthAccessToken;
                p.TokenSecret = m_oAuthAccessTokenSecret;
                p.Uri = new Uri(url);

                string sig = this.GenerateSignature(p, out outURL, out outQueryString);

                outQueryString += "&oauth_signature=" + Common.UrlEncode(sig);

                if (outQueryString.Length > 0)
                {
                    outURL += "?";
                }

                string newURL = outURL + outQueryString;

                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(newURL);
                request.Method = "POST";
                request.ServicePoint.Expect100Continue = false;

                request.ContentLength = 0;

                request.ContentType = "application/x-www-form-urlencoded";
                //request.Headers.Add("content-length", postData.Length.ToString());

                response = request.GetResponse();

                using (StreamReader reader = new StreamReader(response.GetResponseStream()))
                {
                    responseString = reader.ReadToEnd();
                }

                if (response.Headers["X-RateLimit-Limit"] != null)
                {
                    int limit = int.Parse(response.Headers["X-RateLimit-Limit"]);
                    int remaining = int.Parse(response.Headers["X-RateLimit-Remaining"]);
                    long resetTime = long.Parse(response.Headers["X-RateLimit-Reset"]);

                    m_rateLimit = new RateLimit(limit, remaining, resetTime);
                }
            }
            catch (Exception ex)
            {
                responseString = "***ERROR :: " + ex.Message;
            }

            return responseString;
        }
        private string OAuthWebGetToken(string callbackURL)
        {
            string responseString = string.Empty;

            try
            {
                string outURL = string.Empty;
                string outQueryString = string.Empty;

                OAuthParameters p = new OAuthParameters();
                p.ConsumerKey = m_oAuthConsumerKey;
                p.HttpMethod = HttpMethod.GET;
                p.ConsumerSecret = m_oAuthConsumerSecret;
                p.Nonce = GenerateOAuthNonce();
                p.SignatureType = SignatureTypes.HMACSHA1;
                p.Timestamp = GenerateOAuthTimestamp();
                p.Uri = new Uri("http://api.twitter.com/oauth/request_token");

                string sig = this.GenerateSignature(p, out outURL, out outQueryString);

                outQueryString += "&oauth_signature=" + Common.UrlEncode(sig);

                if (outQueryString.Length > 0)
                    outURL += "?";

                string newURL = outURL + outQueryString + "&" + callbackURL;

                return newURL;
            }
            catch (Exception ex)
            {
                responseString = "***ERROR :: " + ex.Message;
            }

            return responseString;
        }
        private string OAuthGetToken(string PIN)
        {
            string responseString = string.Empty;

            try
            {
                string outURL = string.Empty;
                string outQueryString = string.Empty;

                OAuthParameters p = new OAuthParameters();
                p.ConsumerKey = m_oAuthConsumerKey;
                p.HttpMethod = HttpMethod.GET;
                p.ConsumerSecret = m_oAuthConsumerSecret;
                p.Nonce = GenerateOAuthNonce();
                p.SignatureType = SignatureTypes.HMACSHA1;
                p.Timestamp = GenerateOAuthTimestamp();

                if (!string.IsNullOrEmpty(PIN))
                {
                    p.Token = m_oAuthRequestToken;
                    p.TokenSecret = m_oAuthRequestTokenSecret;
                    p.PIN = PIN;
                    p.Uri = new Uri("http://api.twitter.com/oauth/access_token");
                }
                else
                {
                    p.Uri = new Uri("http://api.twitter.com/oauth/request_token");
                }

                string sig = this.GenerateSignature(p, out outURL, out outQueryString);

                outQueryString += "&oauth_signature=" + Common.UrlEncode(sig);

                if (outQueryString.Length > 0)
                    outURL += "?";

                string newURL = outURL + outQueryString;

                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(newURL);
                request.Method = "GET";
                request.ServicePoint.Expect100Continue = false;
                request.ContentType = "application/x-www-form-urlencoded";

                using (WebResponse response = request.GetResponse())
                {
                    using (StreamReader reader = new StreamReader(response.GetResponseStream()))
                    {
                        responseString = reader.ReadToEnd();
                    }
                }

                if (!string.IsNullOrEmpty(responseString))
                {
                    Dictionary<string, string> nv = Common.ParseQueryString(responseString);
                    if (nv["oauth_token"] != null)
                    {
                        if (string.IsNullOrEmpty(PIN))
                        {
                            m_oAuthRequestToken = nv["oauth_token"];
                            responseString = "http://api.twitter.com/oauth/authorize?oauth_token=" + m_oAuthRequestToken;
                        }
                        else
                        {
                            m_oAuthAccessToken = nv["oauth_token"];
                            m_userName = nv["screen_name"];
                            responseString = m_oAuthAccessToken;
                        }
                    }

                    if (nv["oauth_token_secret"] != null)
                    {
                        if (string.IsNullOrEmpty(PIN))
                            m_oAuthRequestTokenSecret = nv["oauth_token_secret"];
                        else
                            m_oAuthAccessTokenSecret = nv["oauth_token_secret"];
                    }
                }
            }
            catch (Exception ex)
            {
                responseString = "***ERROR :: " + ex.Message;
            }

            return responseString;
        }