Rss Feed阅读器:SyndicationFeed编程方式

时间:2014-03-20 15:11:55

标签: xml asp.net-mvc rss syndication

我目前正在开发一个包含RSS提要阅读器的MVC项目。

当前的方法是使用Syndication库读取XML文件,虽然它不支持所有的Feed类型,但我无法弄清楚如何将 SyndicationFeed 实体添加到我的数据库(MSSQL 2012)由于一个关键问题而导致代码首次迁移(已经问过Q而没有回答:Syndication keys missing MVC)所以我只是创建了一个从Syndication项目获取其内容的feed模型。 关于如何或应该继续使用它甚至改用不同的工作方式的任何建议?

这是我获取和保存Feed的方式:

XmlReader reader = XmlReader.Create(site.RssUrl);
            SyndicationFeed feed = SyndicationFeed.Load(reader);
            var FeedList = feed.Items.ToList();
            foreach (var item in FeedList)
            {
                var dupCheck = db.Feeds.FirstOrDefault(f => f.Title == item.Title.Text);
                if (dupCheck == null)
                {
                    var newFeed = new Feeds() { Date = DateTime.Now.ToString(), SiteId = site.SiteId };

                    if (item.Title != null) newFeed.Title = item.Title.Text;
                    if (item.Summary != null) newFeed.Description = item.Summary.Text;
                    if (item.PublishDate != null) newFeed.PubDate = item.PublishDate.ToString();
                    if (item.Links != null) newFeed.Link = item.Links[0].Uri.ToString();
                    if (feed.ImageUrl != null) newFeed.ImageUrl = feed.ImageUrl.ToString();

                    db.Feeds.Add(newFeed);
                    if (item.Categories.Count != 0)
                        foreach (var category in item.Categories)
                            if (db.Categories.FirstOrDefault(cat => cat.Name == category.Name) == null)
                            {
                                var NewCategory = new Categories() { Name = category.Name };
                                NewCategory.Feeds.Add(newFeed);
                                db.Categories.Add(NewCategory);
                            }
                            else
                                db.Categories.First(cat => cat.Name == category.Name).Feeds.Add(newFeed);
                    db.SaveChanges();
                }

这是Feed模型:

public class Feeds
{
    [Key]
    public int FeedId { get; set; }
    public string ImageUrl { get; set; }
    public string Link { get; set; }
    [DataType(DataType.MultilineText)]
    [AllowHtml]
    public string Title { get; set; }
    [DataType(DataType.MultilineText)]
    [AllowHtml]
    public string Description { get; set; }
    public string PubDate { get; set; }
    public string Date { get; set; }
    public int SiteId { get; set; }
}

在阅读了很多关于它之后,我开始意识到XML feed方法是一个垂死的方法,并且可能会有一些更好,更有用和不断增长的替代方案,我应该用它们来阅读提要(Twitter例如列表)...

所以另一个更普遍的问题是:我应该继续使用XML阅读器吗?或者我应该考虑一种不同的方法,知道XML rss类型可能迟早会死(或者在这种情况下我错了)?

提前致谢!

1 个答案:

答案 0 :(得分:1)

我目前正在尝试通过SyndicationFeed方法阅读RSS 0.92,0.95,2.0格式,并探索整合这些" old"的挑战。标准与越来越流行的Twitter格式,以建立新闻聚合器。因此,我不自称是专家;但是,我的研究表明,您的SyndicationFeed实体方法是构建您自己的中间Syndication对象和数据区域(而不是通过CodeFirst迁移尝试这样做)是正确的方法。一旦你有了这些对象,你就可以将Twitter提要用于这些对象。