add brietbart
This commit is contained in:
@@ -18,6 +18,8 @@ namespace jezebel.Controllers
|
||||
IMemoryCache cache;
|
||||
const string jezCache = "jezebelRss";
|
||||
HashSet<string> urls = new HashSet<string>() { "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<string> breitbartUrls = new HashSet<string>() { "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<IActionResult> Get(bool bypassCache)
|
||||
{
|
||||
using (var httpClient = new HttpClient())
|
||||
{
|
||||
|
||||
var result = cache.Get<List<Item>>(jezCache);
|
||||
if(result == null || bypassCache)
|
||||
{
|
||||
var lst = new System.Collections.Concurrent.ConcurrentBag<Item>();
|
||||
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));
|
||||
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<IActionResult> GetBreit(bool bypassCache)
|
||||
{
|
||||
var result = cache.Get<List<Item>>(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<List<Item>> GetRssItems(IEnumerable<string> urls)
|
||||
{
|
||||
using(var httpClient = new HttpClient())
|
||||
{
|
||||
var lst = new System.Collections.Concurrent.ConcurrentBag<Item>();
|
||||
var tasks = urls.Select(url => httpClient.GetStreamAsync(url).ContinueWith(result =>
|
||||
{
|
||||
var xmlReader = new XmlSerializer(typeof(Rss));
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user