public async Task Aggregate() { var query = new GetRssSourceByIdQuery(null); var rssSources = await _mediator.Send(query); var newsList = new ConcurrentBag <NewsDto>(); var currentNewsUrls = await _mediator.Send(new GetOwnNewsUrlQuery()); Parallel.ForEach(rssSources, (rssSource) => { using (var reader = XmlReader.Create(rssSource.Url)) { var feed = SyndicationFeed.Load(reader); reader.Close(); var feedUrls = feed.Items.Select(i => i.Id).ToList(); Log.Information($"News count in DB: {currentNewsUrls.Count}"); foreach (var feedItem in feed.Items) { if (!currentNewsUrls.Any(url => url.Equals(feedItem.Id))) { var newsDto = new NewsDto() { Id = Guid.NewGuid(), RssSourceId = rssSource.Id, Url = feedItem.Id, Title = feedItem.Title.Text, Summary = SyndicationHelper.GetSyndicationItemSummary(feedItem), NewsDate = feedItem.PublishDate.UtcDateTime, DateCollect = DateTime.UtcNow }; newsList.Add(newsDto); } } } }); //return newsList; }
public async Task <IEnumerable <NewsDto> > GetNewsFromRssSource(RssSourceDto rssSource) { var newsList = new List <NewsDto>(); using (var reader = XmlReader.Create(rssSource.Url)) { var feed = SyndicationFeed.Load(reader); reader.Close(); var feedUrls = feed.Items.Select(i => i.Id).ToList(); var currentNewsUrls = await _unitOfWork.News .FindBy(news => news.RssSourceId == rssSource.Id) .ToListAsync(); Log.Information($"News count in DB: {currentNewsUrls.Count}"); foreach (var feedItem in feed.Items) { if (!currentNewsUrls.Any(news => news.Url.Equals(feedItem.Id))) { var newsDto = new NewsDto() { Id = Guid.NewGuid(), RssSourceId = rssSource.Id, Url = feedItem.Id, Title = feedItem.Title.Text, Summary = SyndicationHelper.GetSyndicationItemSummary(feedItem), NewsDate = feedItem.PublishDate.UtcDateTime, DateCollect = DateTime.UtcNow }; newsList.Add(newsDto); } } } return(newsList); }
private Task <string> GetLatestYouTubeVideoAsync(params string[] youtubeFeedUrls) { return(Task.Run(async() => { var syndicationItems = new List <SyndicationItem>(); var tasks = new List <Task <SyndicationFeed> >(); foreach (var url in youtubeFeedUrls) { Tracer.Info($"Retrieving latest youtube videos from {url}"); tasks.Add(SyndicationHelper.GetFeedAsync(url)); } await Task.WhenAll(tasks); foreach (var feed in tasks.Select(t => t.Result)) { syndicationItems.AddRange(feed.Items); } var ordered = syndicationItems.OrderByDescending(i => i.PublishDate); var latestFeed = ordered.FirstOrDefault(); if (latestFeed == null) { return string.Empty; } var link = latestFeed.Links[0].Uri.ToString(); var result = link.Replace("watch?v=", "embed/") + "?rel=0&disablekb=1&fs=0&modestbranding=1"; Tracer.Info($"Found video {link}"); return result; })); }