public IActionResult GetFilteredFeed(string feedUrl, string tags)
        {
            var request = (HttpWebRequest)WebRequest.Create($"https://localhost:44352/api/v1/feed?feedUrl={feedUrl}");

            request.Accept = "application/xml";

            var response = request.GetResponse();

            using var streamReader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);

            var xmlSerializer = new XmlSerializer(typeof(FeedItemList));
            var feedItemList  = (FeedItemList)xmlSerializer.Deserialize(new StringReader(streamReader.ReadToEnd()));

            var listOfTags = tags?.Split(';');

            var filteredFeedItemList = new FeedItemList();

            if (listOfTags != null && listOfTags.Any())
            {
                if (feedItemList != null)
                {
                    foreach (var feedItem in feedItemList.Items.Where(feedItem =>
                                                                      listOfTags.Any(tag => feedItem.Summary.ToUpper().Contains(tag.ToUpper()))))
                    {
                        filteredFeedItemList.Items.Add(feedItem);
                    }
                }

                return(Ok(filteredFeedItemList));
            }

            return(Ok(feedItemList));
        }
        public Task <FeedItemList> StartPollingRssSourcesOnSchedule(string feedUrl, string tags, string recipients)
        {
            var          waitHandle   = new ManualResetEvent(false);
            FeedItemList feedItemList = null;

            ThreadPool.QueueUserWorkItem(state =>
            {
                feedItemList = GetFeedItemList(feedUrl, tags).Result;
                waitHandle.Set();
            });

            waitHandle.WaitOne();

            ThreadPool.QueueUserWorkItem(state =>
                                         SendFeedToRecipients(feedUrl, tags, recipients));

            return(Task.FromResult(feedItemList));
        }
Пример #3
0
        public IActionResult GetFeed(string feedUrl)
        {
            var formatter = new Rss20FeedFormatter();

            using var reader = XmlReader.Create(feedUrl);
            formatter.ReadFrom(reader);

            var feedItemList = new FeedItemList();

            foreach (var feedItem in formatter.Feed.Items)
            {
                feedItemList.Items.Add(new FeedItem
                {
                    Title   = feedItem.Title.Text,
                    Link    = feedItem.Links.First().Uri.ToString(),
                    Summary = feedItem.Summary.Text
                });
            }

            return(Ok(feedItemList));
        }
Пример #4
0
 public static string RssFeedToString(FeedItemList feeItemList)
 {
     return(feeItemList.Items.Aggregate(string.Empty,
                                        (current, feedItem) =>
                                        current + (feedItem.Title + " " + feedItem.Link + Environment.NewLine)));
 }