Beispiel #1
0
        public async Task ProcessTweetsAsync()
        {
            List <TweetModel> tweetsToProcess = new List <TweetModel>();

            try
            {
                if (this.GetStreamStateAsync().Result == StreamStateEnum.Running)
                {
                    tweetsToProcess = TweetMapper.MapTweets(Tweets.GetRange(0, Tweets.Count));
                    if (tweetsToProcess != null && tweetsToProcess.Count > 0)
                    {
                        Tweets.RemoveRange(0, tweetsToProcess.Count);
                        List <Task> tasks = new List <Task>();

                        tasks.Add(ProcessEmojisAsync(tweetsToProcess));
                        tasks.Add(ProcessHashTagsAsync(tweetsToProcess));
                        tasks.Add(SaveStatisticsAsync(tweetsToProcess));
                        tasks.Add(SaveTweetsAsync(tweetsToProcess));
                        tasks.Add(PrintStatisticsAsync());

                        Task.WaitAll(tasks.ToArray());
                    }
                }
            }
            catch (Exception ex)
            {
                Logger.LogError(ex, "Error at ProcessTweets", null);
            }
        }
Beispiel #2
0
        public async Task Handle(StartCatchUp message, IMessageHandlerContext context)
        {
            ColorConsole.WriteLine(
                "Catching up on".Gray(),
                " ",
                $" {message.Track} ".DarkCyan().OnWhite(),
                " ",
                "tweets since tweet".Gray(),
                " ",
                $"{message.TweetId}".White());

            var count = 0;

            foreach (var analyzeTweet in
                     this.tweetService.Get(message.Track, message.TweetId).Select(tweet => TweetMapper.Map(tweet, message.Track)))
            {
                ++count;
                Writer.Write(analyzeTweet.Tweet);
                await context.Send(analyzeTweet)
                .ConfigureAwait(false);
            }

            ColorConsole.WriteLine(
                "Found".Gray(),
                " ",
                $"{count:N0}".White(),
                " ",
                $" {message.Track} ".DarkCyan().OnWhite(),
                " ",
                $"tweet{(count == 1 ? "" : "s")} since tweet".Gray(),
                " ",
                $"{message.TweetId}".White());
        }
Beispiel #3
0
        public static async Task StartAsync(
            IEndpointInstance endpointInstance,
            string track,
            string consumerKey,
            string consumerSecret,
            string accessToken,
            string accessTokenSecret)
        {
            var credentials = new TwitterCredentials(consumerKey, consumerSecret, accessToken, accessTokenSecret);

            while (true)
            {
                try
                {
                    var stream = Stream.CreateFilteredStream(credentials);
                    stream.AddTrack(track);

                    var sessionId = Guid.NewGuid();
                    stream.StreamStarted += (sender, args) =>
                    {
                        sessionId = Guid.NewGuid();
                        ColorConsole.WriteLine(
                            $"{DateTime.UtcNow.ToLocalTime()}".DarkGray(),
                            " ",
                            $" {track} ".DarkCyan().OnWhite(),
                            " ",
                            "stream started with session ID".Gray(),
                            " ",
                            $"{sessionId}".White());
                    };

                    stream.StreamStopped += (sender, args) => ColorConsole.WriteLine(
                        $"{DateTime.UtcNow.ToLocalTime()} ".DarkGray(),
                        $" {track} ".DarkCyan().OnWhite(),
                        " stream stopped.".Red(),
                        args.Exception == null ? string.Empty : $" {args.Exception.Message}".DarkRed());

                    stream.MatchingTweetReceived += async(sender, e) =>
                    {
                        var analyzeTweet = TweetMapper.Map(e.Tweet, track);
                        Writer.Write(analyzeTweet.Tweet);
                        await endpointInstance.Send(analyzeTweet)
                        .ConfigureAwait(false);

                        var tweetReceived = new TweetReceived()
                        {
                            SessionId = sessionId,
                            Track     = track,
                            TweetId   = e.Tweet.Id
                        };
                        await endpointInstance.Publish(tweetReceived)
                        .ConfigureAwait(false);
                    };

                    await stream.StartStreamMatchingAnyConditionAsync();
                }
                catch (Exception ex)
                {
                    ColorConsole.WriteLine($"{DateTime.UtcNow.ToLocalTime()} ".DarkGray(), "Error listening to Twitter stream.".Red(), $" {ex.Message}".DarkRed());
                    Thread.Sleep(1000);
                }
            }
        }