当前位置: 首页 > news >正文

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/archive/2012/12/15/2819107.html

相关文章:

  • 运营天猫商城的注意事项
  • Bug多,也别乱来,别被Bug主导了开发
  • OpenStack利用puppet构建自动化部署环境
  • 随想,梦幻之笔
  • 關於代碼註釋(一)
  • 文件挂载(mount)命令详解
  • 【读书笔记】《世界上最伟大的推销员》
  • Java画蒙娜丽莎的微笑(记录)
  • [120_移动开发Android]008_android开发之Pull操作xml文件
  • SQL Server 2008 r2 安装过程图解
  • Hadoop配置项整理(hdfs-site.xml)
  • Spring中bean的范围
  • zsh 配置文件
  • linux监控cacti配置教程(6)
  • 【APACHE】如何重启Apache?
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • 【跃迁之路】【735天】程序员高效学习方法论探索系列(实验阶段492-2019.2.25)...
  • Android组件 - 收藏集 - 掘金
  • emacs初体验
  • es6(二):字符串的扩展
  • es6要点
  • HashMap剖析之内部结构
  • HTML中设置input等文本框为不可操作
  • Linux后台研发超实用命令总结
  • overflow: hidden IE7无效
  • PhantomJS 安装
  • SOFAMosn配置模型
  • SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问
  • ViewService——一种保证客户端与服务端同步的方法
  • 订阅Forge Viewer所有的事件
  • 工程优化暨babel升级小记
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 前端代码风格自动化系列(二)之Commitlint
  • 微信如何实现自动跳转到用其他浏览器打开指定页面下载APP
  • 走向全栈之MongoDB的使用
  • ###C语言程序设计-----C语言学习(6)#
  • $$$$GB2312-80区位编码表$$$$
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • (2)Java 简介
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (三)elasticsearch 源码之启动流程分析
  • (一)80c52学习之旅-起始篇
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • (自用)learnOpenGL学习总结-高级OpenGL-抗锯齿
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • .NET MVC第三章、三种传值方式
  • .NET/C# 使用 SpanT 为字符串处理提升性能
  • .net6解除文件上传限制。Multipart body length limit 16384 exceeded
  • @modelattribute注解用postman测试怎么传参_接口测试之问题挖掘
  • [2019.3.20]BZOJ4573 [Zjoi2016]大森林
  • [383] 赎金信 js
  • [acwing周赛复盘] 第 94 场周赛20230311
  • [android] 练习PopupWindow实现对话框