Esempio n. 1
0
        public static async Task <OAuthTokens> GetAccessToken(string accessToken, string accessTokenSecret, string oauthVerifier)
        {
            return(await RequestHandler(async() =>
            {
                const string requestTokenUrl = "https://api.twitter.com/oauth/access_token";
                var nonce = OAuth.Nonce();
                var timestamp = OAuth.TimeStamp();
                var parameters = new[] { new[] { "oauth_verifier", oauthVerifier } };
                var signature = OAuth.Signature("POST", requestTokenUrl, nonce, timestamp, accessToken, accessTokenSecret, parameters);
                var authorizationHeader = OAuth.AuthorizationHeader(nonce, timestamp, accessToken, signature, parameters);

                var request = System.Net.WebRequest.Create(new Uri(requestTokenUrl));
                request.Method = "POST";
                request.Headers.Add("Authorization", authorizationHeader);

                using (var response = await request.GetResponseAsync())
                    using (var stream = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
                    {
                        var tokens = stream.ReadToEnd().Split('&');
                        var oauthTokens = new OAuthTokens
                        {
                            OAuthToken = Token(tokens[0]),
                            OAuthSecret = Token(tokens[1]),
                            UserId = Token(tokens[2]),
                            ScreenName = Token(tokens[3])
                        };
                        return oauthTokens;
                    }
            }));
        }
Esempio n. 2
0
        public static async Task <OAuthTokens> GetRequestToken()
        {
            return(await RequestHandler(async() =>
            {
                const string requestTokenUrl = "https://api.twitter.com/oauth/request_token";
                var nonce = OAuth.Nonce();
                var timestamp = OAuth.TimeStamp();
                var parameters = new[] { new[] { "oauth_callback", "oob" } };
                var signature = OAuth.Signature("POST", requestTokenUrl, nonce, timestamp, "", "", parameters);
                var authorizationHeader = OAuth.AuthorizationHeader(nonce, timestamp, null, signature, parameters);

                var request = System.Net.WebRequest.Create(new Uri(requestTokenUrl));
                request.Method = "POST";
                request.Headers.Add("Authorization", authorizationHeader);
                using (var response = await request.GetResponseAsync())
                    using (var stream = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
                    {
                        var body = stream.ReadToEnd();
                        var tokens = body.Split('&');
                        var oauthToken = Token(tokens[0]);
                        var oauthSecret = Token(tokens[1]);
                        var callbackConfirmed = Token(tokens[2]);

                        if (callbackConfirmed != "true")
                        {
                            throw new InvalidProgramException("callback token not confirmed");
                        }
                        return new OAuthTokens {
                            OAuthToken = oauthToken, OAuthSecret = oauthSecret
                        };
                    }
            }));
        }
Esempio n. 3
0
        private string CreateAuthorizationHeader(string accessToken, string accessTokenSecret)
        {
            var oauth     = new OAuth(_twitterConsumerKey, _twitterConsumerSecret);
            var nonce     = oauth.Nonce();
            var timestamp = oauth.TimeStamp();
            var signature = oauth.Signature("GET", _twitterFeedUrl, nonce, timestamp, accessToken, accessTokenSecret,
                                            parameters: Enumerable.Empty <string[]>());
            var authorizeHeader = oauth.AuthorizationHeader(nonce, timestamp, accessToken, signature);

            return(authorizeHeader);
        }
Esempio n. 4
0
        public void AuthorizationHeaderIsCorrectFormat()
        {
            const string header = "OAuth oauth_consumer_key=\"ZScn2AEIQrfC48Zlw\"," +
                                  "oauth_nonce=\"123\"," +
                                  "oauth_signature=\"signature\"," +
                                  "oauth_signature_method=\"HMAC-SHA1\"," +
                                  "oauth_timestamp=\"345\"," +
                                  "oauth_token=\"s8I\"," +
                                  "oauth_version=\"1.0\"";

            OAuth.AuthorizationHeader("123", "345", "s8I", "signature").Should().Be(header);
        }
Esempio n. 5
0
        public static async Task <string> UpdateStatusWithMedia(string message, string filename)
        {
            return(await RequestHandler(async() =>
            {
                var media = File.ReadAllBytes(filename);
                var mediaName = Path.GetFileName(filename);

                const string url = "https://api.twitter.com/1.1/statuses/update_with_media.json";
                var oauth = new OAuth();
                var nonce = OAuth.Nonce();
                var timestamp = OAuth.TimeStamp();
                var signature = OAuth.Signature("POST", url, nonce, timestamp, oauth.AccessToken, oauth.AccessTokenSecret, null);
                var authorizeHeader = OAuth.AuthorizationHeader(nonce, timestamp, oauth.AccessToken, signature);

                var request = System.Net.WebRequest.Create(new Uri(url));
                request.Headers.Add("Authorization", authorizeHeader);
                request.Method = "POST";

                var formDataBoundary = $"{Guid.NewGuid():N}";
                var contentType = "multipart/form-data; boundary=" + formDataBoundary;
                request.ContentType = contentType;

                using (var requestStream = request.GetRequestStream())
                {
                    var header = $"--{formDataBoundary}\r\nContent-Disposition: form-data; name=\"status\"\r\n\r\n";
                    var footer = $"\r\n--{formDataBoundary}--\r\n";
                    WriteStream(requestStream, header);
                    WriteStream(requestStream, message);

                    header = $"\r\n--{formDataBoundary}\r\nContent-Type: application/octet-stream\r\n"
                             + $"Content-Disposition: form-data; name=\"media[]\"; filename=\"{mediaName}\"\r\n\r\n";
                    WriteStream(requestStream, header);
                    requestStream.Write(media, 0, media.Length);
                    WriteStream(requestStream, footer);
                }

                using (var response = await request.GetResponseAsync())
                {
                    using (var stream = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
                    {
                        var result = stream.ReadToEnd();
                        return result;
                    }
                }
            }, () => string.Empty));
        }
Esempio n. 6
0
        private static async Task <string> WebRequest(string url, IEnumerable <string[]> parameters, bool post = false)
        {
            var oauth            = new OAuth();
            var nonce            = OAuth.Nonce();
            var timestamp        = OAuth.TimeStamp();
            var signature        = OAuth.Signature(post ? "POST" : "GET", url, nonce, timestamp, oauth.AccessToken, oauth.AccessTokenSecret, parameters);
            var authorizeHeader  = OAuth.AuthorizationHeader(nonce, timestamp, oauth.AccessToken, signature);
            var parameterStrings = parameters.Select(p => $"{OAuth.UrlEncode(p[0])}={OAuth.UrlEncode(p[1])}").ToList();

            if (!post)
            {
                url += "?" + string.Join("&", parameterStrings);
            }

            var request = WebRequestWrapper.Create(new Uri(url));

            request.Headers.Add("Authorization", authorizeHeader);
            request.Method = post ? "POST" : "GET";

            if (post)
            {
                Trace.TraceInformation(string.Join("&", parameterStrings));
                request.ContentType = "application/x-www-form-urlencoded";
                if (parameters != null)
                {
                    using (var requestStream = request.GetRequestStream())
                    {
                        WriteStream(requestStream, string.Join("&", parameterStrings));
                    }
                }
            }

            using (var response = await request.GetResponseAsync())
            {
                using (var stream = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
                {
                    var result = stream.ReadToEnd();
                    return(result);
                }
            }
        }
Esempio n. 7
0
        public void User(CancellationToken cancelationToken)
        {
            Task.Run(() =>
            {
                while (cancelationToken.IsCancellationRequested == false)
                {
                    //var delay = Task.Delay(30*1000, cancelationToken);
                    //delay.Wait(cancelationToken);
                    //if (delay.IsCanceled || delay.IsFaulted) break;

                    Trace.TraceInformation("{ Start Twitter User Stream }");
                    const string url    = "https://userstream.twitter.com/1.1/user.json";
                    var oauth           = new OAuth();
                    var nonce           = OAuth.Nonce();
                    var timestamp       = OAuth.TimeStamp();
                    var signature       = OAuth.Signature("GET", url, nonce, timestamp, oauth.AccessToken, oauth.AccessTokenSecret, null);
                    var authorizeHeader = OAuth.AuthorizationHeader(nonce, timestamp, oauth.AccessToken, signature);

                    var request = WebRequestWrapper.Create(new Uri(url));
                    request.Headers.Add("Authorization", authorizeHeader);

                    try
                    {
                        using (var response = request.GetResponse())
                            using (var stream = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
                            {
                                stream.BaseStream.ReadTimeout = 60 * 1000;
                                while (true)
                                {
                                    var json = stream.ReadLine();
                                    if (json == null)
                                    {
                                        Trace.TraceInformation("{ null }");
                                        break;
                                    }
                                    if (cancelationToken.IsCancellationRequested)
                                    {
                                        break;
                                    }
                                    Trace.TraceInformation(string.IsNullOrWhiteSpace(json) ? "{ Blankline }" : json);

                                    var serializer = new JavaScriptSerializer();
                                    var reply      = serializer.Deserialize <Dictionary <string, object> >(json);
                                    if (reply != null && reply.ContainsKey("user"))
                                    {
                                        Trace.TraceInformation("{ tweet identified }");
                                        var statuses = Status.ParseJson("[" + json + "]");
                                        Application.Current.Dispatcher.InvokeAsync(() =>
                                        {
                                            UpdateTimelines(statuses, TweetClassification.Home);
                                        });
                                        //Application.Current.Dispatcher.InvokeAsync
                                        //    (() => UpdateStatusHomeTimelineCommand.Command.Execute(statuses, Application.Current.MainWindow));
                                    }
                                }
                            }
                    }

                    catch (WebException ex)
                    {
                        Trace.TraceError(ex.ToString());
                    }

                    catch (ArgumentNullException ex)
                    {
                        Trace.TraceError(ex.ToString());
                    }

                    catch (ArgumentException ex)
                    {
                        Trace.TraceError(ex.ToString());
                    }

                    catch (InvalidOperationException ex)
                    {
                        Trace.TraceError(ex.ToString());
                    }

                    catch (IOException ex)
                    {
                        Trace.TraceError(ex.ToString());
                    }
                }

                Trace.TraceInformation("{ Stream task ends }");
            }, cancelationToken);
        }