public Tweeter FilterTweet(ITweet tweet)
        {
            ITweetEntities media = tweet.Entities;

            if (media.Medias.Count != 0)
            {
                return(null);
            }

            List <IHashtagEntity> hashTags = tweet.Hashtags;

            if (hashTags.Count == 0)
            {
                return(null);
            }

            List <IUrlEntity> urls = tweet.Urls;

            if (urls.Count > 0)
            {
                return(null);
            }

            string cleanText = Regex.Replace(tweet.FullText, @"[^\u0020,^\u0030-\u0039,^\u0041-\u005A,^\u0061-\u007A]+", string.Empty);

            //need to figureout what the difference is between text and full text
            Tweeter ourTweeter = new Tweeter(cleanText, tweet.Hashtags);

            return(ourTweeter);
        }
        public async Task <IActionResult> PutTweeter(int id, Tweeter tweeter)
        {
            if (id != tweeter.Postid)
            {
                return(BadRequest());
            }

            _context.Entry(tweeter).State = EntityState.Modified;

            try
            {
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!TweeterExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(NoContent());
        }
        public async Task <ActionResult <Tweeter> > PostTweeter(Tweeter tweeter)
        {
            _context.Tweeter.Add(tweeter);
            await _context.SaveChangesAsync();

            return(CreatedAtAction("GetTweeter", new { id = tweeter.Postid }, tweeter));
        }
        public static void Run(
            [BlobTrigger("ectower-cookeast/raw/Flux/{name}",
                         Connection = "CookEastFluxConnectionString")] System.IO.Stream inBlob,
            string name,
            TraceWriter log)
        {
            string content;

            using (var reader = new StreamReader(inBlob, true))
            {
                content = reader.ReadToEnd();
            }

            TOA5Extractor extractor = new TOA5Extractor(name, content, -8);
            Tweeter       tweeter   = new Tweeter(
                ConfigurationManager.AppSettings["TwitterConsumerKey"],
                ConfigurationManager.AppSettings["TwitterConsumerSecret"],
                ConfigurationManager.AppSettings["TwitterAccessToken"],
                ConfigurationManager.AppSettings["TwitterAccessTokenSecret"]);

            StatusChecker statusChecker = new StatusChecker(
                extractor, tweeter);

            string alert = statusChecker.BroadcastStatus();

            if (!string.IsNullOrEmpty(alert))
            {
                log.Info($"Alert: {alert}");
            }
        }
Exemple #5
0
        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            ServiceCollection serviceCollection = new ServiceCollection();

            ConfigureServices(serviceCollection);

            String DbConn = Configuration.GetConnectionString("DataConnection");

            Boolean actuallyTweeting = false;

            while (!stoppingToken.IsCancellationRequested)
            {
                _logger.LogInformation("Worker running at: {time}", DateTime.Now);

                _logger.LogInformation("(Not actually) sending a tweet at: {time}", DateTime.Now);
                DatabaseAccess dbAccess  = new DatabaseAccess(DbConn);
                string         tweetText = dbAccess.GetRandomQuote();
                _logger.LogInformation($"Quote to (not actually) tweet: {tweetText}");

                var tweeter = new Tweeter();
                tweeter.MaybeTweet(tweetText, actuallyTweeting);

                await Task.Delay(10000, stoppingToken);
            }
        }
        static void Main(string[] args)
        {
            try
            {
                Logger.Instance.Write("Starting...");

                teletype = new TeletypeViaAtmega();
                teletype.Connect(new SerialTeletypeConnectPort());

                Logger.Instance.Write("Printing welcome message");
                teletype.SwitchOn();
                teletype.CRLF();
                teletype.Print(Settings.Default.WelcomeMessage);
                teletype.CRLF();
                teletype.SwitchOff();

                printer = new TweetPrinter(teletype);

                Logger.Instance.Write(Environment.NewLine + "Starting Twitter polling");
                tweeter           = new Tweeter();
                tweeter.NewTweet += new EventHandler <NewTweetEventArgs>(tweeter_NewTweet);
                tweeter.StartSearch(Settings.Default.TwitterSearchTerm);

                Logger.Instance.Write(Environment.NewLine + "Startup complete.  Waiting for tweets");

                bool quit = false;
                do
                {
                    Logger.Instance.Write(Environment.NewLine + ">> Press 'e' to turn on, 'd' to turn off, 'q' to exit");

                    var key = System.Console.ReadKey(true);

                    switch (key.KeyChar)
                    {
                    case 'q':
                        quit = true;
                        break;

                    case 'e':
                        teletype.SwitchOn();
                        break;

                    case 'd':
                        teletype.SwitchOff();
                        break;
                    }
                }while (!quit);

                Logger.Instance.Write(Environment.NewLine + "Exiting...");

                teletype.SwitchOff();
                teletype.Disconnect();
            }
            catch (Exception ex)
            {
                Logger.Instance.Error("General Failure", ex);
                System.Console.ReadLine();
            }
        }
        /// <summary>
        /// This takes the tweet and starts to check to see if each string input has any useless words.
        /// </summary>
        /// <param name="tweeter">
        /// tweeter;
        /// ICollection<string> wordSet;
        /// ICollection<string> HashTagSet;
        /// </param>
        /// <returns>
        /// Tweeter: with the removed words;
        /// </returns>
        public Tweeter Trim(Tweeter tweeter)
        {
            Tweeter nuTweeter = new Tweeter
            {
                WordSet    = Validate(Remove(tweeter.WordSet, StopList), ValidWords),
                HashtagSet = tweeter.HashtagSet
            };

            return(nuTweeter);
        }
Exemple #8
0
        public static void Main()
        {
            ITweet         tweet  = new Tweeter();
            IServer        server = new Server();
            IConsoleWriter writer = new ConsoleWriter();

            IClient microwaveoven = new MicrowaveOven(server, writer);

            microwaveoven.ProcessTweet(tweet);
        }
Exemple #9
0
        private void ProcessTweet(ITweet tweet)
        {
            if (tweet == null)
            {
                return;
            }

            Tweeter tweeter = _tweetFilter.FilterTweet(tweet);

            if (tweeter == null)
            {
                return;
            }

            Tweeter trimmedTweeter = _tweetTrimmer.Trim(tweeter);

            TweetsAccepted++;

            try
            {
                // Todo: Make sure to remove duplicate words and hashtags
                ICollection <WordHashtagPair> wordHashPairs = _hashPairGenerator.GenerateHashPairs(trimmedTweeter);
                if (wordHashPairs.Count != 0)
                {
                    PersistWordHashPairs(wordHashPairs);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }

            try
            {
                PersistTuples(trimmedTweeter, 3);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }

            try
            {
                _repo.AddTweet();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
Exemple #10
0
        /// <summary>
        /// A simple function that takes a string and does a ToUpper
        /// </summary>
        /// <param name="input"></param>
        /// <param name="context"></param>
        /// <returns></returns>
        public string FunctionHandler(InputEvent input, ILambdaContext context)
        {
            LambdaLogger.Log($"input: {input.Key1}\n");

            String ApiKey            = Environment.GetEnvironmentVariable("ApiKey");
            String ApiSecretKey      = Environment.GetEnvironmentVariable("ApiSecretKey");
            String AccessToken       = Environment.GetEnvironmentVariable("AccessToken");
            String AccessTokenSecret = Environment.GetEnvironmentVariable("AccessTokenSecret");

            var db      = new DBAccess();
            var tweeter = new Tweeter(ApiKey, ApiSecretKey, AccessToken, AccessTokenSecret);

            TweetWisdom(db, tweeter);
            ReplyToMentions(db, tweeter);
            return("Done!");
        }
Exemple #11
0
        private void PersistTuples(Tweeter tweeter, int maxTupleLength = 1)
        {
            var allWords = tweeter.WordSet.Distinct();

            // make sure we arent trying to make combinations longer than the original
            maxTupleLength = maxTupleLength > allWords.Count() ? allWords.Count() : maxTupleLength;

            IEnumerable <IOrderedEnumerable <string> > nWordSets = allWords.Combinations(1).Select(set => set.OrderBy(s => s));

            for (int i = 2; i <= maxTupleLength; i++)
            {
                var combos = allWords.Combinations(i).Select(set => set.OrderBy(s => s));
                nWordSets = nWordSets.Union(combos);
            }

            foreach (var set in nWordSets)
            {
                _repo.InsertNTuple(set.ToArray());
                WordSetsStored[set.Count()]++;
            }
        }
Exemple #12
0
        private void TweetWisdom(DBAccess db, Tweeter tweeter)
        {
            List <Quote> statementsList = db.GetAllStatements().Result;
            Int32        count          = statementsList.Count;

            // If this is the last statement, reset all the 'tweeted' values
            if (count <= 1)
            {
                LambdaLogger.Log($"Published all statements, time to reset\n");
                db.ResetTweetedValues();
            }

            Int32 quoteIndex = new Random().Next(count);
            Quote statement  = statementsList[quoteIndex];

            LambdaLogger.Log($"Quote {quoteIndex}: {statement.quoteText}\n");

            String tweet = DecideTweetText(statement);
            UInt64 id    = tweeter.MaybeTweet(tweet, ActuallyTweet);

            db.SetTweeted(statement);
        }
        public ICollection <WordHashtagPair> GenerateHashPairs(Tweeter tweet)
        {
            //we should decide if we want to store the text as a string or an array of words
            //What would Word set look like at this point?

            var words    = tweet.WordSet;
            var hashTags = tweet.HashtagSet;

            ICollection <WordHashtagPair> list = new Collection <WordHashtagPair>();

            foreach (var word in words)
            {
                foreach (var hashtag in hashTags)
                {
                    list.Add(new WordHashtagPair
                    {
                        HashTag = hashtag,
                        Word    = word
                    });
                }
            }

            return(list);
        }
        public Tweeter CreateTweeter(TweeterDTO tweeter)
        {
            if (tweeter == null)
            {
                throw new ArgumentNullException("Tweeter cannot be null!");
            }

            Tweeter newTweeter = new Tweeter
            {
                Id              = tweeter.Id,
                Name            = tweeter.Name,
                ScreenName      = tweeter.ScreenName,
                Location        = tweeter.Location,
                Description     = tweeter.Description,
                ProfileImageUrl = tweeter.ProfileImageUrl,
                FollowersCount  = tweeter.FollowersCount,
                StatusesCount   = tweeter.StatusesCount
            };

            this.UnitOfWork.TweeterRepository.Add(newTweeter);
            this.UnitOfWork.SaveChanges();

            return(newTweeter);
        }
Exemple #15
0
        public void ShowMenu()
        {
            Int32   numberOfTweets  = 20;
            Boolean keyValueSuccess = false;

            Console.ForegroundColor = ConsoleColor.Yellow;
            Console.BackgroundColor = ConsoleColor.DarkBlue;

            var tweeter = new Tweeter();

            while (true)
            {
                Console.Clear();

                Console.WriteLine("Wisdom of Avasarala");
                Console.WriteLine();
                Console.WriteLine("Options:");
                Console.WriteLine($"1: Check {tweeter.AVASARALA_ID} mentions");
                Console.WriteLine($"2: Search for {tweeter.AVASARALA_NAME}");
                Console.WriteLine($"3: Search for {tweeter.AVASARALA_TAG}");
                Console.WriteLine($"4: Get last {numberOfTweets} tweets from {tweeter.AVASARALA_ID}");
                Console.WriteLine("5: Test tweet some wisdom");
                Console.WriteLine("6: Tweet some wisdom");
                Console.WriteLine();
                Console.WriteLine("<ESC>: Quit");

                ConsoleKeyInfo keyInfo = Console.ReadKey(false);
                if (keyInfo.Key == ConsoleKey.Escape)
                {
                    return;
                }

                var   keyChar = keyInfo.KeyChar;
                Int32 keyValue;
                keyValueSuccess = Int32.TryParse(keyChar.ToString(), out keyValue);

                if (keyValue == 1)
                {
                    tweeter.GetTweets(tweeter.AVASARALA_ID);
                    PressAKey();
                }
                else if (keyValue == 2)
                {
                    tweeter.GetTweets(tweeter.AVASARALA_NAME);
                    PressAKey();
                }
                else if (keyValue == 3)
                {
                    tweeter.GetTweets(tweeter.AVASARALA_TAG);
                    PressAKey();
                }
                else if (keyValue == 4)
                {
                    tweeter.GetTweetsFrom(tweeter.AVASARALA_ID, numberOfTweets);
                    PressAKey();
                }
                else if (keyValue == 5)
                {
                    DatabaseAccess dbAccess  = new DatabaseAccess(DatabaseConnectionString);
                    string         tweetText = dbAccess.GetRandomQuote();
                    tweeter.MaybeTweet(tweetText, false);
                    PressAKey();
                }
                else if (keyValue == 6)
                {
                    DatabaseAccess dbAccess  = new DatabaseAccess(DatabaseConnectionString);
                    string         tweetText = dbAccess.GetRandomQuote();
                    tweeter.MaybeTweet(tweetText, true);
                    PressAKey();
                }
            }
        }
Exemple #16
0
        private void ReplyToMentions(DBAccess db, Tweeter tweeter)
        {
            List <Quote> responsesList = db.GetAllResponses().Result;
            Int32        count         = responsesList.Count;

            DateTime lastReplyTime = db.GetLastReplyTime().Result;

            LambdaLogger.Log($"Last reply time: {lastReplyTime}\n");

            //List<Status> tweets = tweeter.GetTweets(SearchText, lastReplyTime, MaxTweetsToReturn);
            List <Status> tweets = tweeter.GetMentions(SearchText, lastReplyTime, MaxTweetsToReturn);

            //List<Status> tweets = tweeter.GetTweetsFrom(SearchText, MaxTweetsToReturn);
            foreach (Status tweeted in tweets)
            {
                LambdaLogger.Log($"TweetID: {tweeted.StatusID}\n");

                LambdaLogger.Log($"    Created at: {tweeted.CreatedAt}\n");
                LambdaLogger.Log($"    User: {tweeted.User.ScreenNameResponse}\n");
                LambdaLogger.Log($"    Text: {tweeted.FullText}\n");
                LambdaLogger.Log($"    In Reply to tweet: {tweeted.InReplyToStatusID}\n");
                LambdaLogger.Log($"    In Reply to user: {tweeted.InReplyToUserID}\n");
                LambdaLogger.Log($"    User Mentions count: {tweeted.Entities.UserMentionEntities.Count}\n");
                foreach (UserMentionEntity ume in tweeted.Entities.UserMentionEntities)
                {
                    LambdaLogger.Log($"    User Mention: {ume.Id}, {ume.Name}, {ume.ScreenName}\n");
                }
                LambdaLogger.Log($"    Contributors count: {tweeted.Contributors.Count}\n");
                foreach (Contributor contrib in tweeted.Contributors)
                {
                    LambdaLogger.Log($"    Contributor: {contrib.ID}, {contrib.ScreenName}\n");
                }
                LambdaLogger.Log($"    User count: {tweeted.Users.Count}\n");
                foreach (ulong user in tweeted.Users)
                {
                    LambdaLogger.Log($"    User: {user}\n");
                }

                // Screen out retweets (GetMentions does this automatically)

                if (tweeted.InReplyToStatusID != 0)
                {
                    // This should screen out replies to replies - only reply to initiating tweets
                    LambdaLogger.Log($"Filtering out non-initiating tweet to reply to: {tweeted.StatusID}\n");
                    continue;
                }

                if (tweeted.InReplyToUserID != AvasaralaBotUserId)
                {
                    // This should filter out non-@s, or we will spam every person who replies to our reply
                    LambdaLogger.Log($"Filtering out tweetID as a reply: {tweeted.StatusID}\n");
                    continue;
                }

                Int32 responsesIndex = new Random().Next(count) + 1;
                Quote response       = responsesList[responsesIndex];
                LambdaLogger.Log($"Response {responsesIndex}: {response.quoteText}\n");

                // Add username as prefix to tweet
                response.quoteText = $"@{tweeted.User.ScreenNameResponse} {response.quoteText}";
                String tweet = DecideTweetText(response);
                UInt64 id    = tweeter.MaybeReply(tweet, tweeted.StatusID, ActuallyTweet);
            }

            if (tweets.Count > 0)
            {
                var          timeUtc     = DateTime.UtcNow;
                TimeZoneInfo easternZone = TimeZoneInfo.FindSystemTimeZoneById("America/New_York");
                DateTime     easternTime = TimeZoneInfo.ConvertTimeFromUtc(timeUtc, easternZone);
                LambdaLogger.Log($"New York: {easternTime}\n");
                Boolean isWritten = db.SetLastReplyTime(easternTime, tweets.Count).Result;
            }
        }