RSS 订阅功能的实现

 很多站点多会用到RSS订阅功能,今天写了个,留个笔记。

 我们可以用.aspx,.ashx文件构建xml文件,输出xml 可以通过 XmlTextWriter实例化来输出,也可以直接输出。

1.利用XmlTextWriter输出

  

代码
    public String uid = "461";
    
public String UserInfo = String.Empty;
    
protected void Page_Load(object sender, EventArgs e)
    {
        
if (Request.QueryString["id"!= null && Request.QueryString["id"].ToString() != "")
        {
            uid 
= Request.QueryString["id"].ToString();
        }
        Response.ContentType 
= "application/rss+xml";
        Response.ContentEncoding 
= Encoding.UTF8;
        XmlTextWriter rsswriter 
= new XmlTextWriter(Response.OutputStream, Encoding.UTF8);

        WriteRssOpening(rsswriter);
        WriteRssBody(rsswriter);
        WriteRssEnding(rsswriter);
        rsswriter.Flush();
        Response.End();
    }


    
/// <summary>
    
///  信息标题
    
/// </summary>
    
/// <param name="rsswriter"></param>
    private void WriteRssOpening(XmlTextWriter rsswriter)
    {
        UserBasicModelInfo info 
= UserBasic.GetBasicList(uid);
        rsswriter.WriteStartElement(
"rss");
        rsswriter.WriteAttributeString(
"version""2.0");
        rsswriter.WriteStartElement(
"channel");
        rsswriter.WriteElementString(
"title", info.TrueName+"的官方博客");
        rsswriter.WriteElementString(
"link", Application["Url"+ "/Rss.aspx?id=" + uid + "");
        rsswriter.WriteElementString(
"description", info.TrueName + "的官方博客");
    }

    
/// <summary>
    
///  信息整体
    
/// </summary>
    
/// <param name="rsswriter"></param>
    private void WriteRssBody(XmlTextWriter rsswriter)
    {
        DataTable GetDate 
= wdxt_Common.GetSomeData.GetDataNum("VW_NEWLOG""*""LOGSEECOMPETENCE=1 and userinfoid=" + uid + """addtime desc "100).Tables[0];

        
foreach (DataRow rssitem in GetDate.Rows)
        {
            rsswriter.WriteStartElement(
"item");
            rsswriter.WriteElementString(
"title", rssitem["logtitle"].ToString());
            rsswriter.WriteElementString(
"author", rssitem["TRUENAME"].ToString());
            rsswriter.WriteElementString(
"link"""+Application["Url"]+"/Log/show_" + rssitem["logid"].ToString() + "_6");
            rsswriter.WriteElementString(
"description", rssitem["logcontent"].ToString());
            rsswriter.WriteElementString(
"pubDate", rssitem["addtime"].ToString());
            rsswriter.WriteEndElement();
        }
    }

    
private void WriteRssEnding(XmlTextWriter rsswriter)
    {
        rsswriter.WriteEndElement();
        rsswriter.WriteEndElement();
    }   


2. 直接输出XML

  

代码
protected String uid = String.Empty;
    
protected void Page_Load(object sender, EventArgs e)
    {
        Response.Clear();
        uid 
= HttpContext.Current.Request.QueryString["id"].ToString();
       
        Response.ContentType 
= "text/xml";
        Response.Charset 
= "GB2312";
        Response.Write(GetRSS());
    }

    
#region
    
/// <summary>
    
/// 取得聚合文章
    
/// </summary>
    public string GetRSS()
    {
        UserBasicModelInfo info 
= UserBasic.GetBasicList(uid);

        DataSet ds 
=  wdxt_Common.GetSomeData.GetDataNum("VW_NEWLOG""*""LOGSEECOMPETENCE=1 and userinfoid=" + uid + """addtime desc "100);
        String strRSS 
= "<?xml version=\"1.0\" encoding=\"gb2312\" ?><rss version=\"2.0\">";
        strRSS 
+= "<channel>";
        strRSS 
+= "<title>" + info.TrueName + "的博客</title>";
        strRSS 
+= "<link>" + Application["Url"+ "/Myspace/Space/Rss1.aspx?id=" + uid + "</link>";
        strRSS 
+= "<description></description>";
        
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
        {
            
string Logid = ds.Tables[0].Rows[i]["logid"].ToString();
            
string LogContent = ds.Tables[0].Rows[i]["LogContent"].ToString();
            
string Title = ds.Tables[0].Rows[i]["logtitle"].ToString();
            String LogAddTime 
= ds.Tables[0].Rows[i]["Addtime"].ToString();
            
string truename = ds.Tables[0].Rows[i]["TrueName"].ToString();

            strRSS 
+= "<item>";
            strRSS 
+= "<title>" + Title + "</title>";
            strRSS 
+= "<link>" + Application["Url"+ "/Blog/info/" + Logid + "</link>";
            strRSS 
+= "<pubDate>" + LogAddTime + "</pubDate>";
            strRSS 
+= "<copyright>" + truename + "</copyright>";
            strRSS 
+= "<description><![CDATA[" + LogContent + "]]></description>";
            strRSS 
+= "</item>";
        }
        strRSS 
+= "</channel>";
        strRSS 
+= "</rss>";
        
return strRSS;
    }
    
#endregion


参考:1.  微软的CSASPNETRssFeeds

        2.  我的源码

        3. 可能还要为站点添加到别的网站的RRS链接,可以看看博客园的。
原文地址:https://www.cnblogs.com/dooom/p/1676640.html