您的位置:首页 > 编程语言 > C#

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

2012-12-15 11:53 447 查看
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());
}

}
}


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐