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}"); } }
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); }
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); }
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); } }
/// <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!"); }
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()]++; } }
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); }
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(); } } }
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; } }