public static async System.Threading.Tasks.Task Main(string[] args) { // Connect to twitter string consumerKey = ConfigurationManager.AppSettings.Get("ConsumerKey"); string consumerSecret = ConfigurationManager.AppSettings.Get("ConsumerSecret"); string accessToken = ConfigurationManager.AppSettings.Get("AccessToken"); string accessTokenSecret = ConfigurationManager.AppSettings.Get("AccessTokenSecret"); string bearerToken = ConfigurationManager.AppSettings.Get("BearerToken"); var consumerOnlyCredentials = new TwitterCredentials(consumerKey, consumerSecret, accessToken, accessTokenSecret); var appClient = new TwitterClient(consumerOnlyCredentials); await appClient.Auth.InitializeClientBearerTokenAsync(); // Setup a rate limiter var limiter = new Throttle(1, TimeSpan.FromSeconds(5)); long elapsedSeconds = 0; // Using the sample stream var stream = appClient.Streams.CreateSampleStream(); stream.TweetMode = TweetMode.Extended; var tweetMetrics = new TweetMetricModel(); stream.FilterLevel = Tweetinvi.Streaming.Parameters.StreamFilterLevel.Low; stream.TweetReceived += async(sender, t) => { elapsedSeconds = (long)_stopwatch.Elapsed.TotalSeconds; tweetMetrics = ProcessTweets.GenerateMetrics(elapsedSeconds, t.Tweet, tweetMetrics); //if ((elapsed % 5) == 0) //{ var ct = new CancellationToken(); limiter.Enqueue(async() => { UpdateConsole(tweetMetrics); }, ct); //} }; // Start _stopwatch.Start(); try { await stream.StartAsync(); } catch (Exception ex) { // ignored } }
public async Task StartTwitterStreamAsync(System.IO.Stream hyConnection) { _streamWriter = new System.IO.StreamWriter(hyConnection) { AutoFlush = true }; var limiter = new Throttle(1, TimeSpan.FromMilliseconds(THROTTLE_MILLISECONDS)); _stream = Stream.CreateFilteredStream(); AddFiltersStream(_filterOptions); _stream.MatchingTweetReceived += (sender, t) => { var ct = new CancellationToken(); limiter.Enqueue(async() => { await _streamWriter.WriteLineAsync(JsonConvert.SerializeObject(t.Tweet.ToTweetInfo())); }, ct); }; await _stream.StartStreamMatchingAnyConditionAsync(); }