C# Rss 操作类 C#获取Rss数据 C#生成Rss文件

         RSS(简易信息聚合,也叫聚合内容)是一种描述和同步网站内容的格式。RSS可以是以下三个解释的其中一个: Really Simple
Syndication;RDF (Resource Description Framework) Site Summary; Rich Site
Summary。但其实这三个解释都是指同一种Syndication的技术。RSS目前广泛用于网上新闻频道,blog和wiki,主要的版本有0.91, 1.0,
2.0。使用RSS订阅能更快地获取信息,网站提供RSS输出,有利于让用户获取网站内容的最新更新。网络用户可以在客户端借助于支持RSS的聚合工具软件,在不打开网站内容页面的情况下阅读支持RSS输出的网站内容。

using System;

namespace RssOperator
{
    /**/

    /// <summary>
    /// rssItem 的摘要说明。
    /// </summary>
    public class Item
    {
        private string _title = "";
        private string _link = "";
        private string _description = "";
        private string _pubDate = "";

        #region 属性

        /**/

        /// <summary>
        /// 标题
        /// </summary>
        public string title
        {
            get
            {
                if (_title.Length > 21)
                {
                    return _title.Substring(0, 21) + "...";

                }
                else
                {
                    return _title;
                }


            }
            set { _title = value.ToString(); }
        }

        /**/

        /// <summary>
        /// 链接
        /// </summary>
        public string link
        {
            get { return _link; }
            set { _link = value.ToString(); }
        }

        /**/

        /// <summary>
        /// 描述
        /// </summary>
        public string description
        {
            get { return _description; }
            set
            {
                if (value != null)
                {
                    _description = value;
                }
                else
                {
                    _description = "";
                }
            }
        }

        /**/

        /// <summary>
        /// 频道内容发布日期
        /// </summary>
        public string pubDate
        {
            get { return _pubDate; }
            set { _pubDate = C_Date(value); }
        }

        #endregion

        public Item()
        {
        }

        private string C_Date(string input)
        {
            System.DateTime dt;
            try
            {
                dt = Convert.ToDateTime(input);
            }
            catch
            {
                dt = System.DateTime.Now;
            }
            return dt.ToString();
        }

        private string GetDate(DateTime dt)
        {
            string House = dt.ToString("HH");
            int hour = int.Parse(House);
            int mine = dt.Minute;
            int second = dt.Second;
            string AP = "";

            if (hour > 12)
            {
                AP = "下午";
                hour = hour - 12;
            }
            else
            {
                AP = "上午";
            }

            return string.Format("{0} {1} {2}", dt.ToString("yyyy/MM/dd"), AP, hour + ":" + mine + ":" + second);
        }

        public string DateString
        {
            get
            {
                DateTime time = Convert.ToDateTime(pubDate);

                return GetDate(time);
            }
        }

        public DateTime PuDate
        {
            get { return Convert.ToDateTime(pubDate); }

        }

    }
}

  

using System.Collections.Generic;

namespace RssOperator
{
    
   
    public class Channel
    {
        private string _title;
        private string _link;
        private string _description;
        private List<Item> items = new List<Item>();

        #region 属性
        /**//// <summary>
        /// 标题
        /// </summary>
        public string title
        {
            get{return _title;}
            set{_title = value.ToString();}
        }
        /**//// <summary>
        /// 链接
        /// </summary>
        public string link
       {
            get{return _link;}
            set{_link = value.ToString();}
        }
        /**//// <summary>
        /// 描述
        /// </summary>
        public string description
       {
            get{return _description;}
            set{_description = value.ToString();}
        }
        public List <Item > Items
       {
            get { return items; }
        }
        #endregion

        public Channel(){}


    }//
}//

  

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
using System.Net;
using System.IO;
using System.Collections;
using System.Collections.ObjectModel;

namespace RssOperator
{
    public class Operator
    {

        public Operator(Uri url)
        {
            this.Url = url;
        }

        private DateTime _BeginDate = new DateTime(1900, 1, 1);
        private DateTime _EndDate = DateTime.Now;
        private Uri _Url = new Uri("http://news.163.com/special/00011K6L/rss_gn.xml", UriKind.RelativeOrAbsolute);


        public DateTime BeginData
        {
            get { return _BeginDate; }
            set { _BeginDate = value; }
        }

        public DateTime EndData
        {
            get { return _EndDate; }
            set { _EndDate = value; }
        }

        public Uri Url
        {
            get { return _Url; }
            set { _Url = value; }
        }

        public Operator(Uri url, DateTime begindate, DateTime enddate)
        {
            this.BeginData = begindate;
            this.EndData = enddate;
            this.Url = url;

        }


        public Channel GetRssData()
        {
            Channel channel = new Channel();

            XmlDocument xDoc = new XmlDocument();
            HttpWebRequest request = (HttpWebRequest) WebRequest.Create(Url);
            request.Timeout = 15000;
            request.UserAgent =
                @"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.40607; .NET CLR 1.1.4322)";

            HttpWebResponse response = (HttpWebResponse) request.GetResponse();
            Stream stream = response.GetResponseStream();
            StreamReader sr;
            //System.Xml.XmlReader = new XmlReader();
            //stream=Encoding.Convert(Encoding.GetEncoding("GBK"),Encoding.GetEncoding("gb2312"),Convert.ToSByte(stream));
            if (response.Headers["Content-Type"].ToString() == "GBK")
            {
                sr = new StreamReader(stream, System.Text.Encoding.GetEncoding("GB2312"));
                xDoc.Load(sr);
            }
            else
            {

                xDoc.Load(stream);
            }

            if (xDoc != null)
            {

                var items = xDoc.DocumentElement["channel"].SelectNodes("item");
                channel.title = xDoc.DocumentElement["channel"].SelectSingleNode("title").InnerText;
                channel.link = xDoc.DocumentElement["channel"].SelectSingleNode("link").InnerText;
                channel.description = xDoc.DocumentElement["channel"].SelectSingleNode("description").InnerText;
                foreach (XmlNode item in items)
                {
                    Item rt = new Item();
                    rt.title = item.SelectSingleNode("title").InnerText.Replace("'", "''");
                    rt.link = item.SelectSingleNode("link").InnerText.Replace("'", "''");
                    try
                    {
                        rt.description = item.SelectSingleNode("description").InnerText.Replace("'", "''");
                    }
                    catch
                    {
                    }
                    try
                    {
                        rt.pubDate = item.SelectSingleNode("pubDate").InnerText;
                    }
                    catch
                    {

                    }
                    channel.Items.Add(rt);


                }

            }




            return channel;
        }


        public void CreateRssData(Channel c)
        {
            StringBuilder stringBuilder = new StringBuilder();
            stringBuilder.AppendLine(
                "<?xml version=\"1.0\"  encoding=\"UTF-8\"?><?xml-stylesheet type=\"text/xsl\" href=\"http://163.dynamic.feedsportal.com/xsl/eng/rss.xsl\" ");
            stringBuilder.AppendLine(
                " <rss xmlns:itunes=\"http://www.itunes.com/dtds/podcast-1.0.dtd\"  xmlns:dc=\"http://purl.org/dc/elements/1.1/\"  ");
            stringBuilder.AppendLine(
                "      xmlns:taxo=\"http://purl.org/rss/1.0/modules/taxonomy/\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" version=\"2.0\">");

            stringBuilder.AppendLine(@"<channel><title>" + c.title + "</title><link>" + c.link + "</link><description>" +
                                     c.description + "</description>");
            foreach (var item in c.Items)
            {

                stringBuilder.AppendLine(String.Format(@"<title>{0}</title>", item.title));
                stringBuilder.AppendLine(String.Format(@"<link>{0}</link>", item.link));
                stringBuilder.AppendLine(String.Format(@"<description>{0}</description>", item.description));
                stringBuilder.AppendLine(String.Format(@"<pubDate>{0}</pubDate>", item.pubDate));

            }

            stringBuilder.AppendLine("</channel></rss>");


            FileStream fs = new FileStream(DateTime.Now.ToString("yyyyMMddhhssmm") + ".xml", FileMode.OpenOrCreate,
                                           FileAccess.Write);
            StreamWriter sw = new StreamWriter(fs);
            sw.WriteLine(stringBuilder.ToString());
        }


    }
}

  

原文地址:https://www.cnblogs.com/zhangxin1989/p/2819107.html