之前为了给博客加上RSS功能便了解了一下RSS的相关。小研究了一些RSS是什么、怎么用、有什么规范之后在网上找到很多别人封装的RSS操作类,但是都觉得似乎有点简单了,而且很多代码写得很死,于是打算研究清楚后自己写个RSS组件来完成工作,后来在同事介绍了一个外国的开源RSS组件开源项目,写得实在是好,于是下载了源码来学习,并且使用到自己的博客里面,下载的版本不知道是不是最新的,使用的时候做了点微型的修改。网上有不少文件介绍RSS的,这篇文章我试图用自己的话介绍一下我自己的理解,顺便和大家分享RSS.NET这个优秀的组件 ^_^
    我博客上该文章的地址:http://www.youguanbumen.net/Article.aspx?id=67

首先了解一下RSS是什么,有什么用,然后了解如何用,有什么可以方法可以节省我们的开发和学习成本:

RSS是什么,按照我个人的理解RSS是一个xml格式的字符串,这个字符串通过一个url地址来获取(这个地址可能是一个格式的文本文件、或者是一个动态网页或者能动态生成需要的文本的东东- -!),必须注意的是,xml的格式是被固定下来的,有自己的一套节点和节点属性定义(根据不同的版本会有不同的规范),哪些节点是必须有的,那些可有可无都是被规定下来的。

RSS有什么用,简单来说就是通过RSS阅读器(IE、FF等浏览器本身就是,强力些的可以用outlook)收藏你喜欢的RSS(成为RssFeed),阅读RSS,RSS更新的时候会主动通知你。我发现我试图说明白但是似乎说不明白,下面是在W3CSchool抄下来的:

  • 通过使用 RSS,您可以有选择地浏览您感兴趣的以及与您的工作相关的新闻。
  • 通过使用 RSS,您可以把需要的信息从不需要的信息(兜售信息,垃圾邮件等)中分离出来。
  • 通过使用 RSS,您可以创建自己的新闻频道,并将之发布到因特网。

RSS怎么使用,对于发布RSS的人(准确来说应该是代码人员)需要通过编写代码等途径把网站中希望推送给那些订阅你这个RSS的用户(可能是你网络上的好友、商业上的伙伴甚至是敌人)。所谓推送就是写好一个符合RSS格式的XML文件(当然可以用一个动态页面或者一个asp.net的一般处理程序,都行!),给出一个URL地址来访问这个文件(例如我的网站RSS地址是http://www.youguanbumen.net/Rss/feed.xml),需要订阅你这个RSS的用户可以通过这个地址获取到这个RSS了,至于他们怎么用,这个就不管了。对于使用RSS的人来说,可以找一个自己喜欢的RSS阅读器订阅自己的喜欢的RSS,如果是自己编码实现RSS阅读的话,大致做法就是通过代码去把自己喜欢的RSS从指定地址读取下来,然后按照RSS格式去解析它(读取到的是一个xml字符串),要怎么显示就看个人喜欢了^_^

节省开发和学习成本,学习技术上的东西,最简介的方法是看文档,当然最好是中文的并且翻译得专业点的;减少开发成本的话一般是找现成的东西,不过还是那句话,用别人的东西最好不要拿来就立刻用,特别是开源的东西,最好看一下别人怎么写,整体看一下也好,这对灵活地使用已经日后可能的扩展都是很有帮助的,并且有可能在看的过程中能吸收到一些好的编码技巧。这里我找了RSS.NET这个组件。

RSS.NET组件:

    这个组件主要做的事情其实不多,就是读取和生成RSS,不过是以面向对象的思想把RSS中的各个元素(xml节点)做成对象,在使用的时候我们只需要知道RSS的地址和版本,然后调用这个组件的相关方法读取这个RSS,得到的不是一个需要我们去解析的xml字符串,而是这个组件为我们提供的对象(一个RssFeed类对象),以对象-属性的形式我们可以读取一个RSSChannel,在Channel中读取到RssItem集合,接着很方便地在代码里面读取RSS的各个元素,按照自己的需要对内容进行数据呈现,这一过程和我们在用.NET给我们提供的类(例如和数据库访问有关的类)一样方便。生成RSS是一个逆向的过程,我们要做的是创建需要的对象(这些对象由该组件提供),一般做法是实例化一个RssFeed类对象,给他添加RSSChannel,给RSSChannel添加RssItem,最后调用RssFeed的方法生成一个xml文件或者获取xml字符串然后自己处理(这是个符合RSS格式的xml字符串)。
    下面节选一段我博客里面的代码,完成生成RSS的工作(生成一个xml文件),只是一个代码片段(关于这个组件的时候文章最后给出官方网站的地址和下载地址)

/// <summary>
/// 创建Rss文件
/// </summary>
/// <param name="fileName">文件全路径(物理路径)</param>
/// <param name="isAutoUpdate">是否是系统自动更新</param>
public En_OperResult UpdateRss(string fileName,bool isAutoUpdate)
{
    En_OperResult re = En_OperResult.UpdateRss_Fail;
    try
    {
        // 获取所有文章
        IList<Model.MO_Article> allArticles = GetAllArticle();
        if (allArticles.Count <= 0)
        {
            // 没有文章,直接返回结果(没有内容)
            return En_OperResult.UpdateRss_NoItem;
        }
        // 获取所有用户
        IList<Model.MO_MyUser> allUsers = _userBll.GetAllUser();
        // 获取所有文章分类
        IList<Model.MO_Category> allArticleCates = _categoryBll.GetAllCategories(Model.MO_Category.En_CategoryType.Artical);
        // 创建RssFeed
        Rss.RssFeed feed = new Rss.RssFeed(System.Text.Encoding.UTF8);
        // 创建RssChannel
        Rss.RssChannel channel = CreateRssChannel();
        for (int i = allArticles.Count - 1; i >= 0; i--)
        {
            Model.MO_Article article = allArticles[i];
            channel.Items.Add(CreateRssItem(article, allUsers, allArticleCates));
        }
        // 把RssChannel添加到Feed,生成Rss文件
        feed.Channels.Add(channel);
        feed.Write(fileName);
        re = En_OperResult.UpdateRss_Success;
        if (!isAutoUpdate)
        {
            // 写日志
            WriteOperLog("更新Rss");
        }
    }
    catch (Exception ex)
    {
        WriteErrorLog(ex.Message);
        re = En_OperResult.UpdateRss_Fail;
    }
    return re;
}
/// <summary>
/// 创建Rss条目
/// </summary>
/// <param name="article">文章</param>
/// <param name="allUser">所有用户</param>
/// <param name="articleCategories">所有文章分类</param>
/// <returns></returns>
private Rss.RssItem CreateRssItem(Model.MO_Article article, IList<Model.MO_MyUser> allUser, IList<Model.MO_Category> articleCategories)
{
    string link = string.Format("{0}/{1}?id={2}"
            , Common.CommonTools.GetRootUrl()
            , "Article.aspx"
            , article.ID);
    Uri linkUrl = new Uri(link);
    string comments = string.Format("{0}&temp=#lwfield", link);
    Model.MO_MyUser user = allUser.First(u => u.ID == article.UserID);
    Model.MO_Category articleCate = articleCategories.First(c => c.ID == article.ArticleCategoryID);
    Rss.RssItem item = new Rss.RssItem()
    {
        Title = article.ArticleTitle,
        Link = linkUrl,
        Description = article.ArticleSummary,
        Comments = comments,
        PubDate = article.CreateTime,
        Author = user != null ? user.UserAccount : "Tiu",
        Guid = new Rss.RssGuid() { Name = link }
    };
    item.Categories.Add(new Rss.RssCategory()
    {
        Name = articleCate != null ? articleCate.CategoryName : string.Empty
    });
    return item;
}
/// <summary>
/// 创建Rss频道(所有文章)
/// </summary>
/// <returns></returns>
private Rss.RssChannel CreateRssChannel()
{
    string title = Common.AppSetting.SiteName;
    string desc = title;
    Uri link = new Uri(Common.CommonTools.GetRootUrl());
    string email = Common.AppSetting.MasterEmail;
    DateTime now = DateTime.Now;
    string copyRight = "Serafin.Tiu | All rights reserved";
    Rss.RssChannel channel = new Rss.RssChannel()
    {
        Title = title,
        Link = link,
        Description = desc,
        PubDate = now,
        LastBuildDate = now,
        Language = "zh-cn",
        WebMaster = email,
        ManagingEditor = email,
        Copyright = copyRight
    };
    return channel;
}

以上!

PS:关于RSS的介绍在W3CSchool上面已经介绍的比较详细,以下是本文内容有关的参考资料地址。
        W3CSchool-XML-RSS : http://www.w3school.com.cn/rss/index.asp
        RSS.NET组件官方地址:http://www.rssdotnet.com/
        RSS.NET组件下载地址:http://www.rssdotnet.com/RSS.NET.tar.gz

转载于:https://www.cnblogs.com/serafin/archive/2011/01/09/1931172.html

开源的C#组件——RSS.NET相关推荐

  1. 开源Vue表格组件,表格插件源码

    开源Vue表格组件,表格插件源码 前言: 关于html里面原生的table,通常满足不了程序员的要求.所以开发了一款表格插件,其功 能有: 1 导入json格式数据后,自动填充表格.表格长宽自适应.排 ...

  2. 重磅!GitHub 开源负载均衡组件 GLB Director

    8 日,GitHub 发布了开源负载均衡组件 GitHub Load Balancer Director(GLB) Director,GLB 是 GitHub 针对裸机数据中心的可扩展负载均衡解决方案 ...

  3. 关于Linux开源项目基础组件make编译流程

     关于Linux开源项目基础组件make编译流程 非常多Linux开源项目都会用到编译出可运行文件的make.这个是有一套流程的. 首先,GNU构建系统:https://en.wikipedia. ...

  4. 9个开源的 Vue3 组件库

    作者:ARRON https://juejin.cn/post/7092766235380678687 参考了如下组件库,因为有些设计是多个版本和框架的,这里只讨论 Vue3 版本. element- ...

  5. Java开源网络服务器端组件

    来源于:http://www.open-open.com   QuickServer QuickServer 是一个免费的开源Java库,用于快速创建健壮的多线程.多客户端TCP服务器应用程序.使用Q ...

  6. Facebook开源Linux内核组件和工具:BPF、Btrfs、Netconsd、Cgroup2、PSI、Oomd

    内容摘要: 作者:Tejun Heo(Facebook的软件工程师)和Thomas Connally. Facebook工程文化的一个组成部分始终是我们的开发团队致力于开发开源解决方案,以解决实际的生 ...

  7. java开源网络服务器端组件_OpenNMS - 网络服务器端组件 - 组件类库 - JAVA开源项目 - 开源吧...

    相关开源项目 Jsmtpd:Jsmtpd是一个简洁的Email服务器,完全用Java开发.它基本的功能是可以利用SMTP协议来发送Email.Jsmtpd的其它功能是以插件模块的形式来实现,支持TLS ...

  8. JS组件系列——开源免费图表组件:Chart.js

    前言:最近被开源免费得有点上火了,各种组件首先想到的就是是开源否.是否免费.是否和bootstrap风格一致.想着以后做报表肯定要用到图表组件的,于是在Bootstrap中文网上面找到了Chart.j ...

  9. 重磅!GitHub发布开源负载均衡组件GLB

    https://baijiahao.baidu.com/s?id=1608946032781953161&wfr=spider&for=pc 导读:GitHub GLB directo ...

最新文章

  1. 生成Excle模板,SXSSFWorkbook-2007之后版本不上传服务器
  2. 博易大师 行情服务器文件,博易大师目录
  3. HDOJ 1021-1025
  4. 计算机应用杂志投稿,计算机类杂志 (可网上投稿)
  5. php cms 那个安全,PHPCMS系统安全设置步骤
  6. Listary Pro - 搜索、管理都挺好
  7. idea 安装uml 画图工具
  8. lisp块改色_关于CAD制图的技巧:篇九,快速修改颜色。
  9. OK1028A-C实现路由器功能
  10. 三次握手 resend
  11. html论坛发帖案例
  12. 编译原理逆波兰式实验java_逆波兰式算法的编译原理实验过程.doc
  13. python验证码生成器_用Python实现随机验证码
  14. 简历里的期望薪资应该写多少比较合适呢
  15. Steam教育对儿童在幼儿园阶段概念理解
  16. C语言用数组编程矩阵,二维数组—矩阵求和(C语言)
  17. 认识Base64,看这篇足够了
  18. Himall商城表单数据类、插件类
  19. 平安京服务器维护无法发布新内容,《阴阳师》手游3月6日维护更新公告
  20. jquery.flot 在节点上显示提示

热门文章

  1. Java笔记-对SpringBoot中CommandLineRunner的使用笔记
  2. Qt文档阅读笔记-Q_ASSERT的另外一总用法(大佬用法)
  3. mysql sql select for update_mysql SELECT FOR UPDATE语句使用示例
  4. int指针初始化_C++:变量,指针,引用const,extern,using,typedef,decltype关键字
  5. 山东管理学院计算机二级,山东管理学院有几个校区及校区地址 哪个校区最好...
  6. 统计list里面相同元素个数_LeetCode 第 347 号问题:前 K 个高频元素
  7. 数据结构之查找算法:基本概念
  8. (王道408考研数据结构)第四章串-第二节:串的模式匹配算法(朴素和KMP)
  9. Linux Epoll ET模式EPOLLOUT和EPOLLIN触发时刻
  10. Linux虚拟机重启后无法获取IP的问题(断网、没网)