From bfbb97b287682934e24c668ed7a11468ffe82e8f Mon Sep 17 00:00:00 2001 From: Tommy Parnell Date: Sun, 24 Sep 2017 15:07:27 -0400 Subject: [PATCH] add brietbart --- Controllers/ValuesController.cs | 66 +++++++++++++++++++-------------- 1 file changed, 39 insertions(+), 27 deletions(-) diff --git a/Controllers/ValuesController.cs b/Controllers/ValuesController.cs index d6c5ea6..d01f55a 100644 --- a/Controllers/ValuesController.cs +++ b/Controllers/ValuesController.cs @@ -18,6 +18,8 @@ namespace jezebel.Controllers IMemoryCache cache; const string jezCache = "jezebelRss"; HashSet urls = new HashSet() { "http://jezebel.com/rss", "http://pictorial.jezebel.com/rss", "http://themuse.jezebel.com/rss", "http://thatswhatshesaid.jezebel.com/rss", "http://theslot.jezebel.com/rss" }; + const string breitbartCache = "breitRss"; + HashSet breitbartUrls = new HashSet() { "http://www.breitbart.com/california/feed/", "http://www.breitbart.com/texas/feed/", "http://www.breitbart.com/jerusalem/feed/", "http://www.breitbart.com/london/feed/" }; public ValuesController(IMemoryCache cache) { @@ -27,36 +29,46 @@ namespace jezebel.Controllers [HttpGet] public async Task Get(bool bypassCache) { - using (var httpClient = new HttpClient()) + var result = cache.Get>(jezCache); + if(result == null || bypassCache) { - - var result = cache.Get>(jezCache); - if(result == null || bypassCache) + result = await GetRssItems(urls); + } + var rng = new Random(); + var randomArticleNumber = rng.Next(0, result.Count); + var randomArticle = result[randomArticleNumber]; + var resultString = $"{randomArticle.Title} by {randomArticle.Creator} {randomArticle.Link}"; + return new ContentResult() { Content = resultString, ContentType = "text", StatusCode = 200 }; + } + [Route("breitbartme")] + [HttpGet] + public async Task GetBreit(bool bypassCache) + { + var result = cache.Get>(breitbartCache); + if(result == null || bypassCache) + { + result = await GetRssItems(breitbartUrls); + } + var rng = new Random(); + var randomArticleNumber = rng.Next(0, result.Count); + var randomArticle = result[randomArticleNumber]; + var resultString = $"{randomArticle.Title} by {randomArticle.Creator} {randomArticle.Link}"; + return new ContentResult() { Content = resultString, ContentType = "text", StatusCode = 200 }; + } + + private async Task> GetRssItems(IEnumerable urls) + { + using(var httpClient = new HttpClient()) + { + var lst = new System.Collections.Concurrent.ConcurrentBag(); + var tasks = urls.Select(url => httpClient.GetStreamAsync(url).ContinueWith(result => { - var lst = new System.Collections.Concurrent.ConcurrentBag(); - Parallel.ForEach(urls, url => - { - var rssRaw = httpClient.GetStreamAsync(url).Result; var xmlReader = new XmlSerializer(typeof(Rss)); - var rssDeserialized = (Rss)xmlReader.Deserialize(rssRaw); - rssDeserialized.Channel.Items.ForEach(a => lst.Add(a)); - }); - - result = lst.Where(a => !a.Category.Any(b => b.Text.Contains("deals"))).Distinct(new Item()).ToList(); - using (var entry = cache.CreateEntry(jezCache)) - { - entry.SetValue(result); - entry.SetAbsoluteExpiration(DateTimeOffset.Now.AddHours(1)); - } - - } - - var rng = new Random(); - var randomArticleNumber = rng.Next(0, result.Count); - var randomArticle = result[randomArticleNumber]; - var resultString = $"{randomArticle.Title} by {randomArticle.Creator} {randomArticle.Link}"; - return new ContentResult() { Content = resultString, ContentType = "text", StatusCode = 200 }; - + var rssDeserialized = (Rss)xmlReader.Deserialize(result.Result); + rssDeserialized.Channel.Items.ForEach(a=>lst.Add(a)); + })); + await Task.WhenAll(tasks); + return lst.Where(a => !a.Category.Any(b => b.Text.Contains("deals"))).Distinct(new Item()).ToList(); } } }