コード例 #1
0
ファイル: NewsCqsService.cs プロジェクト: ItSerzh/GoodNews
        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;
        }
コード例 #2
0
ファイル: NewsService.cs プロジェクト: ItSerzh/GoodNews
        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);
        }
コード例 #3
0
        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;
            }));
        }