Ejemplo n.º 1
0
        public TwitterFeedService(
            ILogger <TwitterFeedService> log,
            IConfiguration config,
            IColorLogWriter colorLogWriter,
            ITwitterHelperService twitterHelperService,
            IStringHelper stringHelper
            )
        {
            _log            = log;
            _config         = config;
            _colorLogWriter = colorLogWriter;
            _stringHelper   = stringHelper;

            _twitterHelperService = twitterHelperService;
            twitterTracker        = new TwitterTracker();
        }
        // Log Twitter Stats
        public void LogTwitterStats(TwitterTracker twitterTracker)
        {
            // Log Header Section
            _log.LogInformation(Repeat("*", 90));
            _log.LogInformation($"*** STAT Name " + Repeat(" ", 21) + "| STAT Value ");
            _log.LogInformation(Repeat("*", 90));

            // Log Tweet Total
            _log.LogInformation($"*** Total Tweets Read " + Repeat(" ", 13) + $"| {twitterTracker.TweetTotal.ToString()}");

            // Log Average Tweets Per Second
            _log.LogInformation($"*** Average Tweets Per Second " + Repeat(" ", 5) + $"| {twitterTracker.AverageTweetPerSecond.ToString()}");

            // Log Average Tweets Per Minute
            _log.LogInformation($"*** Average Tweets Per Minute " + Repeat(" ", 5) + $"| {twitterTracker.AverageTweetPerMinute.ToString()}");

            // Log Average Tweets Per Hour
            _log.LogInformation($"*** Average Tweets Per Hour " + Repeat(" ", 7) + $"| {twitterTracker.AverageTweetPerHour.ToString()}");

            // Log Top HashTag
            _log.LogInformation($"*** Top HashTag " + Repeat(" ", 19) + $"| {twitterTracker.TopHashTag}");

            // Log Top Domain
            _log.LogInformation($"*** Top Domain " + Repeat(" ", 20) + $"| {twitterTracker.TopDomain}");

            // Log Perctage of Tweets Containing URLs
            _log.LogInformation($"*** Percent of Tweets with URLs " + Repeat(" ", 3) + $"| {twitterTracker.TweetsContainingUrlsPercentage.ToString()}%");

            // Log Perctage of Tweets Containing Photo URLs either (pic.twitter.com or Instagram)
            _log.LogInformation($"*** Percent of Tweets Pics in URLs " + $"| {twitterTracker.TweetsContainingPhotoUrlPercentage.ToString()}%");

            // Log Footer Line
            _log.LogInformation(Repeat("*", 90));

            // Log Footer Section_log.LogInformation(Repeat("*", 90));
            _log.LogInformation("Application Completed!!!");
        }
Ejemplo n.º 3
0
        public override void PostInitialisation()
        {
            var collection = StaticBase.Database.GetCollection <T>(typeof(T).Name).FindSync <T>(x => true).ToList();

            trackers = collection.ToDictionary(x => x.Name);

            trackers = (trackers == null ? new Dictionary <string, T>() : trackers);

            if (collection.Count > 0)
            {
                int gap = 600000 / collection.Count;

                for (int i = trackers.Count - 1; i >= 0; i--)
                {
                    try
                    {
                        var cur = trackers[trackers.Keys.ElementAt(i)];
                        cur.SetTimer(600000, gap * (i + 1) + 20000);
                        bool save = cur.ChannelConfig.Count == 0;
                        cur.Conversion(trackers.Count - i);
                        cur.PostInitialisation(trackers.Count - i);
                        if (save)
                        {
                            UpdateDBAsync(cur).Wait();
                        }
                        cur.OnMinorEventFired += OnMinorEvent;
                        cur.OnMajorEventFired += OnMajorEvent;
                    }
                    catch (Exception e)
                    {
                        Program.MopsLog(new LogMessage(LogSeverity.Error, "", $"Error on PostInitialisation, {e.Message}", e));
                    }
                }

                //Start Twitter STREAM after all are initialised
                if (typeof(T) == typeof(TwitterTracker))
                {
                    TwitterTracker.STREAM.StreamStopped += (sender, args) => { Program.MopsLog(new LogMessage(LogSeverity.Info, "", $"TwitterSTREAM stopped. {args.DisconnectMessage?.Reason ?? ""}", args.Exception)); TwitterTracker.RestartStream(); };
                    TwitterTracker.STREAM.StreamStarted += (sender, args) => Program.MopsLog(new LogMessage(LogSeverity.Info, "", "TwitterSTREAM started."));
                    TwitterTracker.STREAM.WarningFallingBehindDetected += (sender, args) => Program.MopsLog(new LogMessage(LogSeverity.Warning, "", $"TwitterSTREAM falling behind, {args.WarningMessage.Message} ({args.WarningMessage.PercentFull}%)"));
                    TwitterTracker.STREAM.FilterLevel = Tweetinvi.Streaming.Parameters.StreamFilterLevel.Low;
                    TwitterTracker.STREAM.StartStreamMatchingAllConditionsAsync();
                }
            }
        }
Ejemplo n.º 4
0
        public override void PostInitialisation()
        {
            var collection = StaticBase.Database.GetCollection <T>(typeof(T).Name).FindSync <T>(x => true).ToList();

            IncreaseGraph = StaticBase.Database.GetCollection <DatePlot>("TrackerHandler").FindSync <DatePlot>(x => x.ID.Equals(typeof(T).Name + "Handler")).FirstOrDefault();
            IncreaseGraph?.InitPlot("Date", "Tracker Increase", "dd-MMM", false);

            trackers = collection.ToDictionary(x => x.Name);

            trackers = (trackers == null ? new Dictionary <string, T>() : trackers);

            if (collection.Count > 0)
            {
                int gap = trackerInterval / collection.Count;

                for (int i = trackers.Count - 1; i >= 0; i--)
                {
                    try
                    {
                        var cur = trackers[trackers.Keys.ElementAt(i)];
                        //cur.SetTimer(trackerInterval, gap * (i + 1) + 20000);
                        bool save = cur.ChannelConfig.Count == 0;
                        cur.Conversion(trackers.Count - i);
                        cur.PostInitialisation(trackers.Count - i);
                        if (save)
                        {
                            UpdateDBAsync(cur).Wait();
                        }
                        cur.OnMinorEventFired += OnMinorEvent;
                        cur.OnMajorEventFired += OnMajorEvent;
                    }
                    catch (Exception e)
                    {
                        Program.MopsLog(new LogMessage(LogSeverity.Error, "", $"Error on PostInitialisation, {e.Message}", e));
                    }
                }

                //Start Twitter STREAM after all are initialised
                if (typeof(T) == typeof(TwitterTracker))
                {
                    TwitterTracker.STREAM.StreamStopped += (sender, args) => { Program.MopsLog(new LogMessage(LogSeverity.Info, "", $"TwitterSTREAM stopped. {args.DisconnectMessage?.Reason ?? ""}", args.Exception)); TwitterTracker.RestartStream(); };
                    TwitterTracker.STREAM.StreamStarted += (sender, args) => Program.MopsLog(new LogMessage(LogSeverity.Info, "", "TwitterSTREAM started."));
                    TwitterTracker.STREAM.WarningFallingBehindDetected += (sender, args) => Program.MopsLog(new LogMessage(LogSeverity.Warning, "", $"TwitterSTREAM falling behind, {args.WarningMessage.Message} ({args.WarningMessage.PercentFull}%)"));
                    TwitterTracker.STREAM.FilterLevel = Tweetinvi.Streaming.Parameters.StreamFilterLevel.Low;
                    TwitterTracker.STREAM.StartStreamMatchingAllConditionsAsync();
                }
            }

            nextTracker = new System.Threading.Timer(LoopTrackers);
            loopQueue   = trackers.Values.ToList();
            if (trackers.FirstOrDefault().Value is BaseUpdatingTracker)
            {
                nextUpdate  = new System.Threading.Timer(LoopTrackersUpdate);
                loopQueue   = trackers.Where(x => (x.Value as BaseUpdatingTracker).ToUpdate.Count == 0).Select(x => x.Value).ToList();
                updateQueue = trackers.Where(x => (x.Value as BaseUpdatingTracker).ToUpdate.Count > 0).Select(x => x.Value).ToList();
                nextUpdate.Change(5000, updateInterval / (updateQueue.Count > 0 ? updateQueue.Count : 1));
            }
            nextTracker.Change(5000, trackerInterval / (loopQueue.Count > 0 ? loopQueue.Count : 1));
        }
Ejemplo n.º 5
0
        public void GetTweets(TwitterTracker twitterTracker, string consumerKey, string consumerKeySecret,
                              string accessToken, string accessTokenSecret)
        {
            List <TwitterHashTag> twitterHashTags = new List <TwitterHashTag>();
            List <TwitterUrl>     twitterUrls     = new List <TwitterUrl>();
            var tweet           = "";
            var hashtagCount    = 0;
            var hashTagName     = "";
            var urlAddress      = "";
            var urlCount        = 0;
            var urlTotalCount   = 0;
            var displayUrlCount = 0;

            twitterTracker.ProcessStartTime = DateTime.Now;

            try
            {
                // add your Twitter API credentials here
                Auth.SetUserCredentials(consumerKey, consumerKeySecret, accessToken, accessTokenSecret);

                var sampleStreamV2 = Stream.CreateSampleStream();
                sampleStreamV2.AddTweetLanguageFilter(LanguageFilter.English);
                sampleStreamV2.TweetReceived += (sender, args) =>
                {
                    // Add Tweet to Total Tweets
                    twitterTracker.TweetTotal++;

                    // Add Tweet
                    tweet = args.Tweet.Text;

                    // Check for HashTags
                    if (args.Tweet.Entities.Hashtags.Count > 0)
                    {
                        for (var i = 0; i < args.Tweet.Entities.Hashtags.Count; i++)
                        {
                            hashTagName = args.Tweet.Entities.Hashtags[i].Text;

                            var item = twitterHashTags.FirstOrDefault(x => x.Hashtag == hashTagName);

                            if (item != null)
                            {
                                hashtagCount = item.HashtagCount++;
                            }
                            else
                            {
                                hashtagCount = 1;
                            }

                            twitterHashTags.Add(new TwitterHashTag()
                            {
                                Hashtag = hashTagName, HashtagCount = hashtagCount
                            });

                            var maxObject = twitterHashTags.OrderByDescending(item => item.HashtagCount).First();

                            // Set Top HashTag
                            twitterTracker.TopHashTag = maxObject.Hashtag + "[# Instances: " + maxObject.HashtagCount + "]";
                        }
                    }

                    // Check for URLs
                    if (args.Tweet.Entities.Urls.Count > 0)
                    {
                        urlCount      += args.Tweet.Entities.Urls.Count;
                        urlTotalCount += args.Tweet.Entities.Urls.Count;


                        for (var i = 0; i < args.Tweet.Entities.Urls.Count; i++)
                        {
                            urlAddress = args.Tweet.Entities.Urls[i].ExpandedURL;

                            var item = twitterUrls.FirstOrDefault(x => x.UrlAddress == urlAddress);

                            if (item != null)
                            {
                                urlCount = item.UrlCount++;
                            }
                            else
                            {
                                urlCount = 1;
                            }

                            twitterUrls.Add(new TwitterUrl()
                            {
                                UrlAddress = urlAddress, UrlCount = urlCount
                            });

                            var maxObject = twitterUrls.OrderByDescending(item => item.UrlCount).First();

                            // Set Top Url
                            twitterTracker.TopDomain = maxObject.UrlAddress + "[# Instances: " + maxObject.UrlCount + "]";
                        }

                        if (twitterTracker.TweetTotal > 0 && urlTotalCount > 0)
                        {
                            twitterTracker.TweetsContainingUrlsPercentage = twitterTracker.TweetTotal / urlTotalCount;
                        }
                    }

                    // Check for Pictures with URLs either (pic.twitter.com or Instagram)
                    if (args.Tweet.Entities.Medias.Count > 0)
                    {
                        for (var i = 0; i < args.Tweet.Entities.Medias.Count; i++)
                        {
                            urlAddress = args.Tweet.Entities.Medias[i].DisplayURL;

                            if ((urlAddress.Contains("pic.twitter.com") == true) || (urlAddress.Contains("instagram") == true))
                            {
                                urlCount = displayUrlCount++;
                            }
                        }
                    }
                    // Log tweet
                    _colorLogWriter.LogColorLine(tweet, "Cyan", null);
                };

                sampleStreamV2.StartStream();
            }
            catch (Exception ex)
            {
                _colorLogWriter.LogColorLine(ex.Message, "Red", null);
                throw;
            }
        }