Example #1
0
        public IActionResult Index(int id)
        {
            List <Hashtag>      hashtagsAll               = context.Hashtags.ToList();
            Hashtag             hashtag                   = hashtagsAll.Single(h => h.ID == id);
            List <TweetHashtag> tweetHashtags             = context.TweetHashtags.Where(th => th.HashtagID == id).ToList();
            List <TweetHashtag> tweethHashtagsPast24Hours = tweetHashtags.Where(th => UnixTimeStampToDateTime(th.UnixTimeStamp) > dateTimeNow.AddDays(-1)).ToList();
            List <Tweet>        tweetsPast24Hours         = context.Tweets.Where(t => UnixTimeStampToDateTime(t.UnixTimeStamp) > dateTimeNow.AddDays(-1)).ToList();
            List <Language>     languages                 = context.Languages.ToList();

            List <Tweet> tweets = new List <Tweet>();

            // Count the number of times the Hashtag has been used in the past 24 hours
            foreach (TweetHashtag th in tweethHashtagsPast24Hours)
            {
                Tweet tweet = tweetsPast24Hours.Single(t => t.ID == th.TweetID);
                tweets.Add(tweet);
            }
            // Muliply total by 100 to account for 1% stream
            int totalTweets = tweets.Count * 100;

            // Keep track of which languages have already been used
            List <int> languagesIdsUsed = new List <int>();

            // languageCounts are created for each different language
            // then used to keep track of how many times the language is used
            List <LanguageCount> languageCounts = new List <LanguageCount>();

            // Keep track of hashtags that have been used in combination with primary hashtag
            List <String> hashtagStrings = new List <string>();

            // hashtagStringCounts are created for each different hashtag
            // then used to keep track of how many times the hashtag is used in conjunction with the primary hashtag
            List <HashtagStringCount> hashtagStringCounts = new List <HashtagStringCount>();

            // Create array to hold number of tweets in each hour
            int[] tweetsPerHour = new int[24];

            foreach (Tweet tweet in tweets)
            {
                // determine the hour the tweet was created and add 100 to the tweetsPerHour array
                int hour = UnixTimeStampToDateTime(tweet.UnixTimeStamp).Hour;
                tweetsPerHour[hour] += 100;

                // Retrieve the language of the tweet and keep track of the times that language has been used
                if (languagesIdsUsed != null && languagesIdsUsed.Contains(tweet.LanguageID))
                {
                    LanguageCount languageCount = languageCounts.Single(lc => lc.Language.ID == tweet.LanguageID);
                    languageCount.TimesUsed += 100;
                }
                else
                {
                    // If it is the first time the language has been used create a new languageCount
                    LanguageCount newLanguageCount = new LanguageCount
                    {
                        Language  = languages.Single(l => l.ID == tweet.LanguageID),
                        TimesUsed = 100
                    };
                    languagesIdsUsed.Add(tweet.LanguageID);
                    languageCounts.Add(newLanguageCount);
                }

                // Hashtags are saved as a single string
                // each hashtag is seperated by a "/"
                // Split single hashtag string into substrings

                String   value      = tweet.Hashtags;
                Char     delimiter  = '/';
                String[] substrings = value.Split(delimiter);

                // Look at each hashtag in the tweet
                // if the hashtag is new create a hashtagStringCount object for it
                // keep track of the number of times each hashtag has been used
                // Using the HashtagString here to limit having to go back to the database to retrieve each Hashtag object
                // Will retrieve hashtag object once the top ten have been found

                foreach (String hashtagString in substrings)
                {
                    if (hashtagStrings != null && hashtagStrings.Contains(hashtagString))
                    {
                        HashtagStringCount hashtagStringCount = hashtagStringCounts.Single(hsc => hsc.HashtagString == hashtagString);
                        hashtagStringCount.TimesUsed += 100;
                    }
                    else
                    {
                        HashtagStringCount newHashtagStringCount = new HashtagStringCount
                        {
                            HashtagString = hashtagString,
                            TimesUsed     = 100
                        };
                        hashtagStrings.Add(hashtagString);
                        hashtagStringCounts.Add(newHashtagStringCount);
                    }
                }
            }

            // Sort HashtagStringCounts by TimesUsed
            hashtagStringCounts.Sort(new HashtagStringCountComparer());

            if (hashtagStringCounts.Count > 11)
            {
                // Drop all but Top 10 Hashtags
                hashtagStringCounts.RemoveRange(11, hashtagStringCounts.Count - 11);
            }

            // Create a HashtagCount object for each  of the Top Ten HashtagStringCount objects
            // HashtagCount contains instance of hashtag object rather than just the string

            List <HashtagCount> hashtagCounts = new List <HashtagCount>();

            foreach (var hashtagStringCount in hashtagStringCounts)
            {
                Hashtag      newHashtag      = context.Hashtags.Single(ht => ht.Name == hashtagStringCount.HashtagString);
                HashtagCount newHashtagCount = new HashtagCount
                {
                    Hashtag   = newHashtag,
                    TimesUsed = hashtagStringCount.TimesUsed
                };
                hashtagCounts.Add(newHashtagCount);
            }
            // Sort HashtagCounts by TimesUsed
            hashtagCounts.Sort(new HashtagCountComparer());
            languageCounts.Sort(new LanguageCountComparer());

            int    totalLanguages = languagesIdsUsed.Count;
            int    totalHashtags  = hashtagStrings.Count - 1;
            string hashtagName    = hashtag.Name;


            HashtagViewModel hashtagViewModel = new HashtagViewModel(languageCounts, hashtagCounts, tweetsPerHour,
                                                                     totalTweets, totalLanguages, totalHashtags, hashtagName, hashtagsAll);

            return(View(hashtagViewModel));
        }
Example #2
0
 public void SetVM(HashtagViewModel model)
 {
     HashtagVM = model;
 }
Example #3
0
        public IActionResult Index(string name)
        {
            List <Hashtag> hashtagsAll = context.Hashtags.ToList();
            Hashtag        userHashtag = hashtagsAll.SingleOrDefault(h => h.Name == name);

            // If name string is not found it redirect to Home controller and reload the home page with an error message
            if (userHashtag == null)
            {
                return(RedirectToAction("HashtagNotFound", "Home"));
            }

            Hashtag             hashtag                   = hashtagsAll.Single(h => h.Name == name);
            List <TweetHashtag> tweetHashtags             = context.TweetHashtags.Where(th => th.HashtagID == hashtag.ID).ToList();
            List <TweetHashtag> tweethHashtagsPast24Hours = tweetHashtags.Where(th => UnixTimeStampToDateTime(th.UnixTimeStamp) > dateTimeNow.AddDays(-1)).ToList();
            List <Tweet>        tweetsPast24Hours         = context.Tweets.Where(t => UnixTimeStampToDateTime(t.UnixTimeStamp) > dateTimeNow.AddDays(-1)).ToList();
            List <Language>     languages                 = context.Languages.ToList();

            List <Tweet> tweets = new List <Tweet>();

            foreach (TweetHashtag th in tweethHashtagsPast24Hours)
            {
                Tweet tweet = tweetsPast24Hours.Single(t => t.ID == th.TweetID);
                tweets.Add(tweet);
            }

            int totalTweets = tweets.Count * 100;

            List <int>           languagesIdsUsed = new List <int>();
            List <LanguageCount> languageCounts   = new List <LanguageCount>();

            List <String>             hashtagStrings      = new List <string>();
            List <HashtagStringCount> hashtagStringCounts = new List <HashtagStringCount>();

            // Create array to hold number of tweets in each hour
            int[] tweetsPerHour = new int[24];

            foreach (Tweet tweet in tweets)
            {
                // determine the hour the tweet was created and add 100 to the tweetsPerHour array
                int hour = UnixTimeStampToDateTime(tweet.UnixTimeStamp).Hour;
                tweetsPerHour[hour] += 100;

                // Retrieve the language of the tweet and keep track of the times that language has been used
                if (languagesIdsUsed != null && languagesIdsUsed.Contains(tweet.LanguageID))
                {
                    LanguageCount languageCount = languageCounts.Single(lc => lc.Language.ID == tweet.LanguageID);
                    languageCount.TimesUsed += 100;
                }
                else
                {
                    LanguageCount newLanguageCount = new LanguageCount
                    {
                        Language  = languages.Single(l => l.ID == tweet.LanguageID),
                        TimesUsed = 100
                    };
                    languagesIdsUsed.Add(tweet.LanguageID);
                    languageCounts.Add(newLanguageCount);
                }

                // Hashtags are saved as a single string
                // each hashtag is seperated by a "/"
                // Split single hashtag string into substrings

                String   value      = tweet.Hashtags;
                Char     delimiter  = '/';
                String[] substrings = value.Split(delimiter);

                // Look at each hashtag in the tweet
                // if the hashtag is new create a hashtagStringCount object for it
                // keep track of the number of times each hashtag has been used
                // Using the HashtagString here to limit having to go back to the database to retrieve each Hashtag object
                // Will retrieve hashtag object once the top ten have been found

                foreach (String hashtagString in substrings)
                {
                    if (hashtagStrings != null && hashtagStrings.Contains(hashtagString))
                    {
                        HashtagStringCount hashtagStringCount = hashtagStringCounts.Single(hsc => hsc.HashtagString == hashtagString);
                        hashtagStringCount.TimesUsed += 100;
                    }
                    else
                    {
                        HashtagStringCount newHashtagStringCount = new HashtagStringCount
                        {
                            HashtagString = hashtagString,
                            TimesUsed     = 100
                        };
                        hashtagStrings.Add(hashtagString);
                        hashtagStringCounts.Add(newHashtagStringCount);
                    }
                }
            }

            // Sort HashtagStringCounts by TimesUsed
            hashtagStringCounts.Sort(new HashtagStringCountComparer());

            if (hashtagStringCounts.Count > 11)
            {
                // Drop all but Top 10 Hashtags
                hashtagStringCounts.RemoveRange(11, hashtagStringCounts.Count - 11);
            }

            // Create a HashtagCount object for each  of the Top Ten HashtagStringCount objects
            // HashtagCount contains instance of hashtag object rather than just the string

            List <HashtagCount> hashtagCounts = new List <HashtagCount>();

            foreach (var hashtagStringCount in hashtagStringCounts)
            {
                Hashtag      newHashtag      = context.Hashtags.Single(ht => ht.Name == hashtagStringCount.HashtagString);
                HashtagCount newHashtagCount = new HashtagCount
                {
                    Hashtag   = newHashtag,
                    TimesUsed = hashtagStringCount.TimesUsed
                };
                hashtagCounts.Add(newHashtagCount);
            }
            // Sort HashtagCounts by TimesUsed
            hashtagCounts.Sort(new HashtagCountComparer());
            languageCounts.Sort(new LanguageCountComparer());

            int    totalLanguages = languagesIdsUsed.Count;
            int    totalHashtags  = hashtagStrings.Count - 1;
            string hashtagName    = hashtag.Name;


            HashtagViewModel hashtagViewModel = new HashtagViewModel(languageCounts, hashtagCounts, tweetsPerHour,
                                                                     totalTweets, totalLanguages, totalHashtags, hashtagName, hashtagsAll);

            return(View(hashtagViewModel));
        }