C#组件

【V芯:yd7527】

    首先了解一下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的用户可以通过这个地址获取到这个RSS了,至于他们怎么用,这个就不管了。对于使用RSS的人来说,可以找一个自己喜欢的RSS阅读器订阅自己的喜欢的RSS,如果是自己编码实现RSS阅读的话,大致做法就是通过代码去把自己喜欢的RSS从指定地址读取下来,然后按照RSS格式去解析它(读取到的是一个xml字符串),要怎么显示就看个人喜欢了^_^

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


    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;

}


    以上!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值