【问题标题】:Rss Feed reader: SyndicationFeed way of programmingRss Feed 阅读器:SyndicationFeed 编程方式
【发布时间】:2014-03-24 13:34:19
【问题描述】:

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

当前的方法是使用 Syndication 库读取 XML 文件,虽然它不支持所有的提要类型,而且我不知道如何将 SyndicationFeed 实体添加到我的数据库(MSSQL 2012)由于一个关键问题而进行了代码优先迁移(已经问了一个关于它的问题但没有答案:Syndication keys missing MVC)所以我刚刚制作了一个从 Syndication 项目中获取其内容的提要模型。 关于我如何或应该继续使用它甚至切换到不同的工作方式有什么建议吗?

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

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 提要方法已经快要死了,我应该使用一些更好、更有用且不断增长的替代方法来阅读提要(推特例如列表)...

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

提前致谢!

【问题讨论】:

    标签: xml asp.net-mvc rss syndication


    【解决方案1】:

    我目前正处于与您相同的旅程中,尝试通过 SyndicationFeed 方法阅读 RSS 0.92、0.95、2.0 格式,并探索将这些“旧”标准与日益流行的 Twitter 格式集成以构建新闻的挑战聚合器。因此,我不自称是专家。但是,我的研究表明,您的 SyndicationFeed 实体方法构建您自己的中间 Syndication 对象和数据读取器(而不是尝试通过 CodeFirst 迁移来做到这一点)是正确的方法。将对象放置到位后,您也可以将 Twitter 提要塞入这些对象中。

    【讨论】:

    • 您的回答实际上让我对自己的方法更有信心,谢谢 :) 只是这种方式并未涵盖所有提要类型,而且我发现自己添加的案例越来越多,这会减慢我的网站速度(我是一名 IT 工程师,它确实磨砺了我的装备)。没有一个涵盖所有类型的“全方位”库,真是太可惜了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-06
    • 1970-01-01
    • 2015-02-24
    • 1970-01-01
    • 2011-08-31
    • 1970-01-01
    相关资源
    最近更新 更多