如何实现站点的RSS输出

关于Rss
 
RSS是共享内容的一种简易方式,也称聚合.通常被用于新闻和Blog。网站提供RSS输出,有利于让用户发现网站内容的更新。网站用户可以借助于支持RSS的新闻聚合工具软件或者在线网站(如BLOGLINES),订阅网站的内容并在不打开网站页面的情况下阅读内容。

RSS是基于XML的一种形式,具体规范我就不说了,下面是如何使用ASP.NET实现


通知浏览器网站提供了RSS输出:
把下面的这句放在博客或这站点的<head>标签中

None.gif < link  id ="RSSLink"  title ="RSS"  type ="application/rss+xml"  rel ="alternate"  href ="http://www.cnblogs.com/lbk/rss.aspx"   />


创建RSS.ASPX文件
只留下面这一行,其余的都删掉。

ExpandedBlockStart.gif ContractedBlock.gif <% dot.gif @ Page language="c#" Codebehind="Rss.aspx.cs" AutoEventWireup="false" Inherits="Test.Rss"  %>


后台代码;Rss.aspx.cs
这里XML文件内容的输出是采用直接输出字符串的形式,在我看来前者比较简单,你也可以使用 XmlTextWriter来实现。

None.gif private   void  Page_Load( object  sender, System.EventArgs e)
ExpandedBlockStart.gifContractedBlock.gif  
dot.gif {    
InBlock.gif    Response.ContentType
="text/xml";
InBlock.gif    Response.Charset 
= "UTF-8";
InBlock.gif    Response.Write(
"<?xml version=\"1.0\" encoding=\"UTF-8\" ?>");
InBlock.gif    Response.Write(
"<rss version=\"2.0\"><channel>");
InBlock.gif
InBlock.gif    Response.Write(GetUserRSS());   
InBlock.gif    GetItemsRss();
InBlock.gif 
InBlock.gif    Response.Write(
"</channel></rss>");   
ExpandedBlockEnd.gif}

None.gif
// 此RSS的一些信息
None.gif
private   string  GetUserRSS(Model.Users user)
ExpandedBlockStart.gifContractedBlock.gif    
dot.gif {
InBlock.gif        StringBuilder strRss 
= new StringBuilder();
InBlock.gif        strRss.Append(
"<title>lbk</title>");
InBlock.gif        strRss.Append(
"<link>lbk.cnblogs.com</link> ");
InBlock.gif        strRss.Append(
"<description>呵呵,就是我</description> ");
InBlock.gif        strRss.Append(
"<language>zh-cn</language>");
InBlock.gif        strRss.Append(
"<generator>
lbk.cnblogs.com </generator>");
InBlock.gif        
return strRss.ToString();
ExpandedBlockEnd.gif    }

None.gif
// 循环读取RSS中的每个ITEM的内容
None.gif
private   string  getRss(IList < Model.Info >  listInfo)
ExpandedBlockStart.gifContractedBlock.gif    
dot.gif {
InBlock.gif        StringBuilder strRss 
= new StringBuilder();
InBlock.gif        
foreach (Model.Info var in listInfo)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
string nickname = DAL.Users.instance.GetModelBasic(var.Author).NickName;
InBlock.gif           
string content = var.Content;
InBlock.gif            string link = Function.getConfig("MyUrl"+ nickname + "/blog/item/" + var.id;
InBlock.gif
InBlock.gif            strRss.Append(
"<item>");
InBlock.gif            strRss.Append(
"<title>" + Function.ReplaceXml(var.Title) + "</title>");
InBlock.gif            strRss.Append(
"<author>" + nickname + "</author>");
InBlock.gif            strRss.Append(
"<description><![CDATA[" + content + "<p><a href='" + link + "'>查看全文</a>" + "]]></description>");
InBlock.gif            strRss.Append(
"<pubDate>" + var.Adddate.ToString() + "</pubDate>");
InBlock.gif            strRss.Append(
"<link>" + link + "/</link>");
InBlock.gif            strRss.Append(
"</item>");
ExpandedSubBlockEnd.gif        }

InBlock.gif        
return strRss.ToString();
ExpandedBlockEnd.gif    }


XML中的特殊字符的过滤(否则生成的XML文件会出错):
None.gif public   static   string  ReplaceXml( string  msg)
ExpandedBlockStart.gifContractedBlock.gif    
dot.gif {
InBlock.gif        
if (msg != "" && msg != null)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            msg 
= msg.Replace("&""%26");
InBlock.gif            msg 
= msg.Replace(">""&gt;");
InBlock.gif            msg 
= msg.Replace("<""&lt;");
InBlock.gif            msg 
= msg.Replace("\"""&quot;");
InBlock.gif
            msg = msg.Replace("'""&apos;");
ExpandedSubBlockEnd.gif        }

InBlock.gif        
return msg;
ExpandedBlockEnd.gif    }

另外要注意的是,如果你的RSS输出的链接中又中文字符的话,
如: cnblogs.com/你好/rss.aspx,
最好能使用Server.UrlEncode("你好"),编码之后才能使用抓虾等订阅


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值