zoukankan      html  css  js  c++  java
  • 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链接,可以看看博客园的。
  • 相关阅读:
    ANDROID_MARS学习笔记_S04_004_用HTTPCLENT发带参数的get和post请求
    ANDROID_MARS学习笔记_S04_003_用HttpClent发http请求
    ANDROID_MARS学习笔记_S04_002_用AsyncTask实现异步操作
    ANDROID_MARS学习笔记_S04_001_OAUTH获取request_token
    ANDROID_MARS学习笔记_S04_001_OAuth简介
    ANDROID_MARS学习笔记_S03_009_GOOGLEMAP3
    ANDROID_MARS学习笔记_S03_008_GOOGLEMAP2
    ANDROID_MARS学习笔记_S03_007_GoogleMap1
    适配ios9出现的问题:-canOpenURL: failed for URL
    使用第三方SDK出现: duplicate symbol _llvm.cmdline in:
  • 原文地址:https://www.cnblogs.com/dooom/p/1676640.html
Copyright © 2011-2022 走看看