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)); }
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)); }
public static string RssFeedToString(FeedItemList feeItemList) { return(feeItemList.Items.Aggregate(string.Empty, (current, feedItem) => current + (feedItem.Title + " " + feedItem.Link + Environment.NewLine))); }