⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rss.cs

📁 PRR(个性RSS阅读器) PRR是一款全新的快捷实用的RSS阅读器
💻 CS
字号:
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using System.Windows;
using System.Windows.Forms;
using System.Xml;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;


using System.Threading;

namespace 个性rss阅读器
{
    public class RSS
    {   
        List<RSSNews> _NewsList =null;
        public List<RSSNews> NewsList
        {
            set { _NewsList = value; }
            get { return _NewsList; }
        }
        /// <summary>
        /// 获取最新新闻,LinkUrl为RSS地址
        /// </summary>
        /// <param name="LinkUrl"></param>
        public void UpdateNews(string LinkUrl)
        {
            object oo = new object();
            lock (oo)
            {       
                XmlDocument xmlPort = new XmlDocument();
                try
                {                     
                    xmlPort.Load(LinkUrl);
                    XmlNodeList NodeList;
                    NodeList = xmlPort.SelectNodes("//item");
                    _NewsList = new List<RSSNews>();
                    int i = 0;
                    foreach (XmlNode node in NodeList)
                    {                        
                        RSSNews MyRssNew = new RSSNews();
                        #region 获取新闻属性
                        if (node["author"] != null)
                        {
                            MyRssNew.Author = node["author"].InnerText;
                        }
                        if (node["category"] != null)
                        {
                            MyRssNew.Category = node["category"].InnerText;
                        }
                        if (node["title"] != null)
                        {
                            MyRssNew.Title = node["title"].InnerText;
                        }
                        if (node["description"] != null)
                        {
                            MyRssNew.Description = node["description"].InnerText;
                        }
                        else
                        {
                            MyRssNew.Description = MyRssNew.Title;
                        }
                        if (node["link"] != null)
                        {
                            MyRssNew.Link = node["link"].InnerText;
                        }
                        if (node["pubDate"] != null)
                        {
                            MyRssNew.PubDate = node["pubDate"].InnerText;
                        }
                        #endregion
                        _NewsList.Add(MyRssNew);
                        i++;
                       
                    }
                    SaveNews(FormatUrl(LinkUrl));
                }
                catch (Exception e)
                {
                    //MessageBox.Show(e.Message);
                }
            }
        }
        /// <summary>
        /// 格式化新闻文件地址
        /// </summary>
        /// <param name="FileUrl"></param>
        /// <returns></returns>
        public static string FormatUrl(string FileUrl)
        {
            FileUrl = FileUrl.Replace("%", "");
            FileUrl = FileUrl.Replace("?", "");
            FileUrl = FileUrl.Replace("/", "");
            FileUrl = FileUrl.Replace(".", "");
            FileUrl = FileUrl.Replace("http", "");           
            FileUrl = FileUrl.Replace(":", "");
            FileUrl = "DATA/" + FileUrl + ".dat";
            return FileUrl;
        }
        /// <summary>
        /// 保存新闻文件
        /// </summary>
        /// <param name="FileUrl"></param>
        public void SaveNews(string FileUrl)
        {
            FileStream fs = new FileStream(FileUrl, FileMode.Create);
            List<RSSNews> NewsList = new List<RSSNews>();
            int i = 0;
            foreach (RSSNews  MyRssNew in _NewsList)
            {
                NewsList.Add(MyRssNew);
            }
            try
            {
                BinaryFormatter formatter = new BinaryFormatter();
                formatter.Serialize(fs, NewsList);
            }
            catch (SerializationException e)
            {
                MessageBox.Show(e.Message);
            }
            finally
            {
                fs.Close();
            }

        }
        /// <summary>
        /// 读取新闻列表
        /// </summary>
        /// <param name="url"></param>
        /// <returns></returns>
        public List<RSSNews> GetNewsList(string url)
        {
            FileStream fs = new FileStream(url, FileMode.Open);
            List<RSSNews> NewsList = new List<RSSNews>();
            try
            {
                BinaryFormatter formatter = new BinaryFormatter();
                NewsList = (List<RSSNews>)formatter.Deserialize(fs);

                return NewsList;
            }
            catch (SerializationException e)
            {
                MessageBox.Show(e.Message);
                return null;
            }
            finally
            {
                fs.Close();
            }
            

        }
        /// <summary>
        /// 获取菜单文件路径
        /// </summary>
        /// <returns></returns>
        public static string GetMenuFileUrl()
        {
            return "config.xml";
        }    
        public static string GetMode1FileUrl()
        {
            return "Mode1.html";
        }
        public static string GetMode2FileUrl()
        {
            return "Mode2.html";
        }
        /// <summary>
        /// 绑定TreeView控件
        /// </summary>
        /// <param name="Node"></param>
        /// <param name="Xpath"></param>
        /// <param name="ContextMenuStrip"></param>
        public static  void BindNode(TreeNode Node, string Xpath,ContextMenuStrip ContextMenuStrip )
        {            
            XmlDocument xmlPort = new XmlDocument();
            XmlNodeList NodeList;
            xmlPort.Load(GetMenuFileUrl());            
            string xpath1 = Xpath + "/folder";
            NodeList = xmlPort.SelectNodes(xpath1);
            foreach (XmlNode Portnode in NodeList)
            {
                MyTreeNode Node1 = new MyTreeNode(true);
                Node1.Text = Portnode.Attributes["name"].Value;
                Node1.ContextMenuStrip = ContextMenuStrip;               
                Node1.ImageIndex = 0;
                Node.Nodes.Add(Node1);
                BindNode(Node1, xpath1 + "[@name=\"" + Node1.Text + "\"]", ContextMenuStrip);
            }
            xpath1 = Xpath + "/channel";

            NodeList = xmlPort.SelectNodes(xpath1);
            foreach (XmlNode Portnode in NodeList)
            {
                MyTreeNode ChildNode = new MyTreeNode(false);
                ChildNode.MyRssLink = new RSSLink();
                ChildNode.MyRssLink.Name = Portnode["name"].InnerText;
                ChildNode.MyRssLink.Link = Portnode["link"].InnerText;
                ChildNode.Text = Portnode["name"].InnerText;
                ChildNode.ImageIndex = 3;
                ChildNode.SelectedImageIndex = 4;
                ChildNode.ContextMenuStrip = ContextMenuStrip;                
                Node.Nodes.Add(ChildNode);
            }
        }
        /// <summary>
        /// 搜索关键字
        /// </summary>
        /// <param name="word"></param>
        /// <returns></returns>
        public static List<RSSNews> SearchNewsList(string word)
        {
            List<RSSNews> NewsList = new List<RSSNews>();  
            try
            {
                               
                // Only get files that begin with the letter "c."
                string[] dirs = Directory.GetFiles(@"DATA", "*.dat");                
                foreach (string dir in dirs)
                {
                    FileStream fs = new FileStream(dir, FileMode.Open);
                     
                    try
                    {
                        BinaryFormatter formatter = new BinaryFormatter();
                        List<RSSNews> tNewsList = (List<RSSNews>)formatter.Deserialize(fs);
                        foreach (RSSNews news in tNewsList)
                        {
                            if (news.Title.IndexOf(word) >= 0)
                            {
                                NewsList.Add(news);
                            }
                        }
                         
                    }
                    catch (SerializationException e)
                    {
                        MessageBox.Show(e.Message);                       
                    }
                    finally
                    {
                        fs.Close();
                    }
 
                }
                return NewsList;
            }
            catch (Exception e)
            {
                return NewsList;
            }
             


        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -