C#RSS共通クラスの生成
主にいくつかのクラスファイルを使用しました.
Channel.cs 、ChannelCollection.cs 、 Feed.cs 、 Item.cs 、 ItemCollection.cs
各クラスのソースファイルを次に示します.
1、Channel.csクラス
2、ChannelCollection.csクラス
3、Feed.csクラス
4、Item.csクラス
5、ItemCollection.csクラス
「C#中解析Rss実現構想及び汎用類」アプリケーションの例:
Channel.cs 、ChannelCollection.cs 、 Feed.cs 、 Item.cs 、 ItemCollection.cs
各クラスのソースファイルを次に示します.
1、Channel.csクラス
using System;
namespace Utility.Rss
{
/// <summary>
/// channel
/// </summary>
[Serializable()]
public class Channel
{
private string _title;
private string _link;
private string _description;
private ItemCollection items = new ItemCollection();
#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 ItemCollection Items
{
get { return items; }
}
#endregion
public Channel(){}
}//
}//
2、ChannelCollection.csクラス
using System;
namespace Utility.Rss
{
/// <summary>
/// rssChannelCollection 。
/// </summary>
public class ChannelCollection : System.Collections.CollectionBase
{
public Channel this[int index]
{
get
{
return ((Channel)(List[index]));
}
set
{
List[index] = value;
}
}
public int Add(Channel item)
{
return List.Add(item);
}
public ChannelCollection()
{
}
}//
}//
3、Feed.csクラス
using System;
using System.Xml;
using System.IO;
using System.Net;
using System.Text;
namespace Utility.Rss
{
/// <summary>
/// rssFeed 。
/// </summary>
public class Feed
{
private string _url;
private System.DateTime _lastModified;
private System.DateTime _lastRssDate;
private Channel channel = new Channel();
#region
public string url
{
get{return _url;}
set{_url=value;}
}
public System.DateTime lastModified
{
get{return _lastModified;}
}
public System.DateTime lstRssDate
{
set{_lastRssDate=value;}
}
public Channel Channel
{
get { return channel; }
}
#endregion
public Feed()
{
}
public Feed(string url,System.DateTime dt)
{
this._url=url;
this._lastRssDate=dt;
}
public void Read()
{
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)";
Stream stream;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
this._lastModified = response.LastModified;
stream = response.GetResponseStream();
StreamReader sr;
//System.Xml.XmlReader = new XmlReader();
//stream=Encoding.Convert(Encoding.GetEncoding("GBK"),Encoding.GetEncoding("gb2312"),Convert.ToSByte(stream));
if(this.Get_CH(response.Headers["Content-Type"].ToString())=="GBK")
{
sr= new StreamReader(stream,System.Text.Encoding.GetEncoding("GB2312"));
xDoc.Load(sr);
}
else
{
// sr= new StreamReader(stream,System.Text.Encoding.UTF8);
xDoc.Load(stream);
}
if(this._lastRssDate<this._lastModified)
{
XmlNodeList xnList=xDoc.DocumentElement["channel"].SelectNodes("item");
// XmlNodeList xnList=xDoc.SelectNodes("items");
int a= xnList.Count;
foreach(XmlNode xNode in xnList)
{
Item rt=new Item();
rt.title=xNode.SelectSingleNode("title").InnerText.Replace("'","''");
rt.link=xNode.SelectSingleNode("link").InnerText.Replace("'","''");
rt.description=xNode.SelectSingleNode("description").InnerText.Replace("'","''");
try
{
rt.pubDate=xNode.SelectSingleNode("pubDate").InnerText;
}
catch
{
rt.pubDate=this._lastModified.ToString();
}
channel.Items.Add(rt);
}
}
}
public string Create()
{
return "";
}
private string Get_CH(string s)
{
int l=s.IndexOf("charset=")+8;
return s.Substring(l,s.Length-l);
}
}//
}//
4、Item.csクラス
using System;
namespace Utility.Rss
{
/// <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{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();}
}
/// <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();
}
}//
}//
5、ItemCollection.csクラス
using System;
namespace Utility.Rss
{
/// <summary>
/// rssChannelCollection 。
/// </summary>
public class ItemCollection : System.Collections.CollectionBase
{
public Item this[int index]
{
get { return ((Item)(List[index])); }
set
{
List[index] = value;
}
}
public int Add(Item item)
{
return List.Add(item);
}
public ItemCollection()
{
}
}//
}//
「C#中解析Rss実現構想及び汎用類」アプリケーションの例:
string strHtml = "";
string url = "http://rss.xinhuanet.com/rss/native.xml";
Utility.Rss.Feed feed = new Utility.Rss.Feed(url,DateTime.Parse(System.DateTime.Now.AddDays(-1).ToShortDateString()));
feed.Read();
strHtml += "[ :"+feed.Channel.Items.Count+"]<br><br>";
for(int i=0;i<feed.Channel.Items.Count;i++)
{
// arr = feed.Channel.Items[i].title.Split(cSplit);
strHtml +=" <a href="+feed.Channel.Items[i].link+" target=_blank><B>"+ feed.Channel.Items[i].title + "</B></a><br>";
strHtml +=" <font color=red>"+feed.Channel.Items[i].pubDate + "</font><br>";
strHtml +=" "+feed.Channel.Items[i].description + "<br>";
}
Response.Write(strHtml);