示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#3
0
        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);
        }