예제 #1
0
        public ActionResult TwitterStream()
        {
            var person = (PersonModel)TempData["Person"];
            var tweet  = (int?)TempData["Tweet"];
            var users  = (List <PersonModel>)TempData["UserList"];
            TwitterStreamModel model = new TwitterStreamModel();

            if (tweet != null)
            {
                model.CurrentTweet = BL.GetTweetById(tweet.Value);
            }
            if (users != null)
            {
                model.PersonList = users;
            }
            if (person != null)
            {
                model.Person = (PersonModel)TempData["Person"];
            }
            else if (UserContext.Person != null)
            {
                model.Person = UserContext.Person;
            }
            model.TweetList  = BL.GetTweet(model.Person);
            model.PersonList = BL.GetPerson(UserContext.Person.UserId, model.SearchText);
            return(View(model));
        }
예제 #2
0
 public ActionResult TwitterStream(TwitterStreamModel model)
 {
     if (!string.IsNullOrEmpty(model.CurrentTweet.Message))
     {
         model.CurrentTweet.UserId = model.Person.UserId;
         BL.AddTweet(model.CurrentTweet);
     }
     else
     {
         TempData["UserList"] = BL.GetPerson(model.Person.UserId, model.SearchText);
     }
     return(RedirectToAction("TwitterStream"));
 }
예제 #3
0
        private async void DoWork(object state)
        {
            _logger.LogInformation("===========> TwitterStreamCountUpdate Service is working.");

            await Task.Delay(Config.Parameter.TwitterStreamCountTaskDelay *1000);

            try
            {
                using (var db = new LiteDatabase("TwitterData.db"))
                {
                    // Get Datbase Connection
                    var colTS = db.GetCollection <TwitterStreamModel>("TwitterStream");

                    //Breaks why? - - If there is nothing to update?
                    var willBeUpdated = colTS.FindAll().Where(s => s.TweetCreatedAt > DateTime.Now.AddHours(Config.Parameter.TwitterStreamCountUpdateLastHours));

                    if (willBeUpdated != null)
                    {
                        foreach (var x in willBeUpdated)
                        {
                            var tweet = Tweetinvi.Tweet.GetTweet(x.TweetID);

                            if (tweet != null)
                            {
                                var tweetModel = new TwitterStreamModel
                                {
                                    TweetID            = tweet.Id,
                                    TweetUserID        = tweet.CreatedBy.Id,
                                    TweetUser          = tweet.CreatedBy.ScreenName,
                                    TweetUserName      = tweet.CreatedBy.Name,
                                    TweetUserDesc      = tweet.CreatedBy.Description,
                                    TweetUserPicture   = tweet.CreatedBy.ProfileImageUrlHttps,
                                    TweetCreatedAt     = tweet.CreatedAt,
                                    TweetText          = tweet.Text,
                                    TweetHashtags      = tweet.Hashtags,
                                    TweetReTweetCount  = tweet.RetweetCount,
                                    TweetFavoriteCount = tweet.FavoriteCount,
                                    TweetUrl           = tweet.Url
                                };

                                _logger.LogInformation(">> Updated Counts for " + x.TweetID);
                                colTS.Update(tweetModel);
                            }

                            await Task.Delay(Config.Parameter.TwitterStreamCountWriteDelay * 1000);
                        }
                    }
                }
            }
            catch (TwitterException ex)
            {
                _logger.LogInformation("Twitter has problems..." + ex);
            }
            catch (ArgumentException ex)
            {
                _logger.LogInformation("ArgumentException..." + ex);
            }
            catch (LiteException ex)
            {
                _logger.LogInformation("LiteDB Exception..." + ex);
            }
            catch (Exception ex)
            {
                _logger.LogInformation("Exception..." + ex);
            }
        }
예제 #4
0
        private static void InsertNewUserDaily()
        {
            IEnumerable <TwitterUserDailyModel> update;
            IEnumerable <TwitterStreamModel>    update2;

            try
            {
                Console.WriteLine("How many past days do you want to Input...?");
                var days = Convert.ToInt16(Console.ReadLine());

                Console.WriteLine("Which Data Collection do you want to use...?\n1 - TwitterUserDaily\n2 - TwitterStream ");
                var collection = Convert.ToInt16(Console.ReadLine());

                try
                {
                    using (var db2 = new LiteDatabase("TwitterData2.db"))
                        using (var db1 = new LiteDatabase("TwitterData.db"))
                        {
                            if (collection == 1)
                            {
                                var from = db2.GetCollection <TwitterUserDailyModel>("TwitterUserDaily");
                                update = from.FindAll().Where(s => s.DateToday == DateTime.Today.AddDays(-days));
                                var updatecheck = from.FindAll();
                                Console.WriteLine("Do you want to update... " + "\n" + update.Count() + "\t" + DateTime.Today.AddDays(-1) + "\n" + updatecheck.Count() + "\t" + DateTime.Today + "\n Press enter if YES!");
                                Console.ReadKey();

                                var to = db1.GetCollection <TwitterUserDailyModel>("TwitterUserDaily");

                                foreach (var x in update)
                                {
                                    Console.WriteLine("Insert>" + x.Id);

                                    var twitterUserDaily = new TwitterUserDailyModel
                                    {
                                        Id               = x.Id,
                                        Screen_name      = x.Screen_name,
                                        Statuses_count   = x.Statuses_count,
                                        Followers_count  = x.Followers_count,
                                        Friends_count    = x.Friends_count,
                                        Favourites_count = x.Favourites_count,
                                        Listed_count     = x.Listed_count,
                                        DateToday        = x.DateToday,
                                        TwitterId        = x.Id,
                                        TwitterName      = x.TwitterName
                                    };

                                    to.Upsert(twitterUserDaily);
                                }
                            }
                            if (collection == 2)
                            {
                                var from = db2.GetCollection <TwitterStreamModel>("TwitterStream");
                                update2 = from.FindAll().Where(s => s.TweetCreatedAt > DateTime.Now.AddDays(-days));
                                var updatecheck = from.FindAll();
                                Console.WriteLine("Do you want to update... " + "\n" + update2.Count() + "\t" + DateTime.Today.AddDays(-1) + "\n" + updatecheck.Count() + "\t" + DateTime.Today + "\n Press enter if YES!");
                                Console.ReadKey();

                                var to = db1.GetCollection <TwitterStreamModel>("TwitterStream");

                                foreach (var x in update2)
                                {
                                    Console.WriteLine("Insert>" + x.TweetID);

                                    var twitterStream = new TwitterStreamModel
                                    {
                                        TweetID            = x.TweetID,
                                        TweetUser          = x.TweetUser,
                                        TweetUserName      = x.TweetUserName,
                                        TweetUserID        = x.TweetUserID,
                                        TweetUserPicture   = x.TweetUserPicture,
                                        TweetUserDesc      = x.TweetUserDesc,
                                        TweetText          = x.TweetText,
                                        TweetHashtags      = x.TweetHashtags,
                                        TweetReTweetCount  = x.TweetReTweetCount,
                                        TweetFavoriteCount = x.TweetFavoriteCount,
                                        TweetCreatedAt     = x.TweetCreatedAt,
                                        TweetUrl           = x.TweetUrl
                                    };

                                    to.Upsert(twitterStream);
                                }
                            }

                            Console.WriteLine("=>>>> DB updated....");
                        }
                }
                catch (LiteException ex)
                {
                    Console.WriteLine("=>>> fixing Lite DB error", ex);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("=>>> error", ex);
            }

            Console.ReadKey();
            return;
        }
예제 #5
0
        private void DoWork(object state)
        {
            _logger.LogInformation("===========> TwitterUserData Service - " + DateTime.Now.ToString("dd.MM.yy - hh:mm"));

            try
            {
                using (var db = new LiteDatabase("TwitterData.db"))
                {
                    // Get Datbase Connection
                    var colTS = db.GetCollection <TwitterStreamModel>("TwitterStream");

                    //Check for Rate Limits
                    RateLimit.RateLimitTrackerMode = RateLimitTrackerMode.TrackAndAwait;

                    RateLimit.QueryAwaitingForRateLimit += (sender, args) =>
                    {
                        _logger.LogInformation("===========> Is awaiting for rate limits... " + args.Query);
                    };

                    //Get TwitterList
                    var list = Tweetinvi.TwitterList.GetExistingList(Config.Parameter.ListName, Config.Parameter.ScreenName);

                    //Sometimes Null Reference - - find way to catch and restart stream
                    //Make own Method?!?
                    //What the f**k...
                    if (list.GetMembers(list.MemberCount) != null)
                    {
                        var AllMembers = list.GetMembers(list.MemberCount);
                        AllListMembers = AllMembers;
                        _logger.LogInformation("===========> Member to Follow: " + AllListMembers.Count());
                    }
                    else
                    {
                        _logger.LogInformation("!!!> Problem with Tweetinvi ");
                        //Do something
                    }

                    //Create new Stream
                    var stream = Tweetinvi.Stream.CreateFilteredStream();

                    _logger.LogInformation("===========> Start UserStreams");

                    //Foreach Member in List addfollow stream
                    foreach (var item in AllListMembers.Select((value, index) => new { value, index }))
                    {
                        stream.AddFollow(item.value.UserIdentifier);
                        //_logger.LogInformation("{1} Added User {0} to stream...", item.value.UserIdentifier, item.index);
                    }

                    // Get notfified about shutdown of the stream
                    stream.StallWarnings = true;

                    //Only Match the addfollows
                    stream.MatchOn = MatchOn.Follower;

                    #region

                    stream.KeepAliveReceived += async(sender, args) =>
                    {
                        Config.Parameter.StreamState = Convert.ToString(stream.StreamState);
                        await Task.Delay(1);
                    };

                    //Check if this is firing
                    stream.StreamStarted += async(sender, args) =>
                    {
                        _logger.LogWarning("===========> Stream has started...");

                        Config.Parameter.StreamState = Convert.ToString(stream.StreamState);
                        _logger.LogInformation("#### StreamState #### => " + stream.StreamState);
                        await Task.Delay(1);
                    };

                    stream.StreamResumed += async(sender, args) =>
                    {
                        _logger.LogWarning("===========> Resumded to stream...");

                        Config.Parameter.StreamState = Convert.ToString(stream.StreamState);
                        _logger.LogInformation("#### StreamState #### => " + stream.StreamState);

                        await Task.Delay(1);
                    };

                    stream.StreamStopped += async(sender, args) =>
                    {
                        var exceptionThatCausedTheStreamToStop = args.Exception;
                        var twitterDisconnectMessage           = args.DisconnectMessage;
                        _logger.LogWarning("===========> Stream has stopped unexpectedly..." + exceptionThatCausedTheStreamToStop + "\n" + twitterDisconnectMessage);

                        Config.Parameter.StreamState = Convert.ToString(stream.StreamState);
                        _logger.LogInformation("#### StreamState #### => " + stream.StreamState);

                        await Task.Delay(1);

                        _logger.LogInformation("===========> Restarting stream in 20 sec. ");

                        await Task.Delay(20 * 1000);

                        stream.StartStreamMatchingAllConditions();

                        Config.Parameter.StreamState = Convert.ToString(stream.StreamState);
                        _logger.LogInformation("#### StreamState #### => " + stream.StreamState);
                    };

                    stream.WarningFallingBehindDetected += async(sender, args) =>
                    {
                        _logger.LogWarning("===========> Stream Warning... " + args.WarningMessage);
                        Config.Parameter.StreamState = Convert.ToString(stream.StreamState);

                        await Task.Delay(1);
                    };

                    stream.UnmanagedEventReceived += async(sender, args) =>
                    {
                        _logger.LogWarning("===========> Stream UnmanagedEventReceived... " + args.JsonMessageReceived);
                        Config.Parameter.StreamState = Convert.ToString(stream.StreamState);

                        await Task.Delay(1);
                    };

                    stream.LimitReached += async(sender, args) =>
                    {
                        _logger.LogWarning("===========> Stream Warning... " + args.NumberOfTweetsNotReceived);
                        Config.Parameter.StreamState = Convert.ToString(stream.StreamState);

                        await Task.Delay(1);
                    };

                    stream.DisconnectMessageReceived += async(sender, args) =>
                    {
                        _logger.LogWarning("===========> Stream got disconnected... " + args.DisconnectMessage);

                        stream.StopStream();
                        await Task.Delay(5 * 60 * 1000);

                        stream.StartStreamMatchingAllConditions();
                        _logger.LogWarning("!RESTART!===========> Stream restarted at " + DateTime.Now);
                        Config.Parameter.StreamState = Convert.ToString(stream.StreamState);

                        await Task.Delay(1);
                    };
                    #endregion


                    stream.MatchingTweetReceived += async(sender, args) =>
                    {
                        if (args.MatchOn == stream.MatchOn)
                        {
                            if (args.Tweet.IsRetweet == true)
                            {
                                _logger.LogInformation(">> Skipped ReTweet...");

                                Config.Parameter.StreamState = Convert.ToString(stream.StreamState);
                            }
                            else
                            {
                                var tweet = Tweet.GetTweet(args.Tweet.Id);

                                if (tweet.ExtendedTweet != null)
                                {
                                    var tweetDB = new TwitterStreamModel
                                    {
                                        //Tweet Details
                                        TweetID            = tweet.Id,
                                        TweetUserID        = tweet.CreatedBy.Id,
                                        TweetUser          = tweet.CreatedBy.ScreenName,
                                        TweetUserName      = tweet.CreatedBy.Name,
                                        TweetUserDesc      = tweet.CreatedBy.Description,
                                        TweetUserPicture   = tweet.CreatedBy.ProfileImageUrlHttps,
                                        TweetCreatedAt     = tweet.CreatedAt,
                                        TweetText          = tweet.ExtendedTweet.Text,
                                        TweetHashtags      = tweet.ExtendedTweet.LegacyEntities.Hashtags,
                                        TweetReTweetCount  = tweet.RetweetCount,
                                        TweetFavoriteCount = tweet.FavoriteCount,
                                        TweetUrl           = tweet.Url
                                    };

                                    _logger.LogInformation(">> New ExtendedTweet posted..." + tweet.Id);

                                    //Insert Tweet in DB
                                    colTS.Insert(tweetDB);

                                    Config.Parameter.StreamState = Convert.ToString(stream.StreamState);
                                }
                                else
                                {
                                    var tweetDB = new TwitterStreamModel
                                    {
                                        //Tweet Details
                                        TweetID            = tweet.Id,
                                        TweetUserID        = tweet.CreatedBy.Id,
                                        TweetUser          = tweet.CreatedBy.ScreenName,
                                        TweetUserName      = tweet.CreatedBy.Name,
                                        TweetUserDesc      = tweet.CreatedBy.Description,
                                        TweetUserPicture   = tweet.CreatedBy.ProfileImageUrlHttps,
                                        TweetCreatedAt     = tweet.CreatedAt,
                                        TweetText          = tweet.Text,
                                        TweetHashtags      = tweet.Hashtags,
                                        TweetReTweetCount  = tweet.RetweetCount,
                                        TweetFavoriteCount = tweet.FavoriteCount,
                                        TweetUrl           = tweet.Url
                                    };

                                    _logger.LogInformation(">> New Tweet posted..." + tweet.Id);

                                    //Insert Tweet in DB
                                    colTS.Insert(tweetDB);


                                    Config.Parameter.StreamState = Convert.ToString(stream.StreamState);
                                }
                            }
                        }
                        else
                        {
                            _logger.LogInformation(">> Tweet not matched..." + args.Tweet.Id);

                            Config.Parameter.StreamState = Convert.ToString(stream.StreamState);
                        }
                    };

                    stream.StartStreamMatchingAllConditions();
                }
            }
            catch (TwitterException ex)
            {
                _logger.LogInformation("Twitter has problems..." + ex);
            }
            catch (ArgumentException ex)
            {
                _logger.LogInformation("ArgumentException..." + ex);
            }
            catch (LiteException ex)
            {
                _logger.LogInformation("LiteDB Exception..." + ex);
            }
            catch (Exception ex)
            {
                _logger.LogInformation("Exception..." + ex);

                //Do Something
            }
        }