private SyndicationFeed GetFeedFromResponse(RssResponse rssResponse) { var wrapper = new BrowserResponseBodyWrapper(rssResponse); var rss = wrapper.AsString(); var reader = XmlReader.Create(new StringReader(rss)); var feed = SyndicationFeed.Load(reader); return(feed); }
private dynamic GetRecentPostsRss() { var cacheKey = "rss"; var rss = _cache.Get <RssResponse>(cacheKey); if (rss == null) { var recentPosts = _viewProjectionFactory.Get <RecentBlogPostsBindingModel, RecentBlogPostsViewModel>(new RecentBlogPostsBindingModel() { Page = 1, Take = 30 }); rss = new RssResponse(recentPosts.Posts, Settings.WebsiteName, new Uri(AppConfiguration.Current.SiteUrl)); _cache.Add(cacheKey, rss, 60 * 5); } return(rss); }
public Dictionary <string, List <News> > GetNews(List <NewsProvider> providers) { var result = new Dictionary <string, List <News> >(); foreach (NewsProvider provider in providers) { RssResponse response = null; try { var rssLoader = new RssLoader.RssLoader(); response = rssLoader.Load(provider.Url); } catch (Exception ex) { _logger.Error(string.Format("Failed to get info from {0}:", provider.ProviderName), ex); } try { if (response != null && response.Channel != null) { var news = new List <News>(); foreach (var item in response.Channel.Item) { var newsItem = new News { Header = item.Title != null?item.Title.Trim() : item.Title, Description = item.Description != null?item.Description.Trim() : item.Description, Tags = BuildTags(provider.Type.ToString().ToLower(), item.Category) }; DateTime publishDate; if (DateTime.TryParse(item.PubDate, out publishDate)) { newsItem.PublishDateTime = publishDate; } else { newsItem.PublishDateTime = DateTime.UtcNow; } if (!string.IsNullOrEmpty(item.Link) && Uri.IsWellFormedUriString(item.Link, UriKind.Absolute)) { newsItem.SourceLink = item.Link; } else if (!string.IsNullOrEmpty(item.Guid) && Uri.IsWellFormedUriString(item.Guid, UriKind.Absolute)) { newsItem.SourceLink = item.Guid; } else { newsItem.SourceLink = provider.Url; } news.Add(newsItem); } result.Add(provider.ProviderName, news); } } catch (Exception ex) { _logger.Error(string.Format("Failed to save info from {0}:", provider.ProviderName), ex); } } return(result); }