📄 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 + -