/*
* Author:Chris Shao
* Date:2007-7-18
* Mail:rungoo@126.com
* */
using System;
using System.Collections.Generic;
using System.Text;
using System.Xml;
namespace LionBridge.ClassLibrary
{
/// <summary>
/// RSS读取器.支持RSS 2.0
/// </summary>
public class RssRead
{
private string m_path = "";
private XmlDocument m_rssdom;
/// <summary>
/// RSS路径
/// </summary>
public string Path
{
get { return m_path; }
set { m_path = value; }
}
public RssRead()
{
}
public RssRead(string path)
{
m_path = path;
}
public bool Read()
{
try
{
System.Net.WebRequest myRequest = System.Net.WebRequest.Create(m_path);
//这个请求的响应将会被放到一个WebResponse对象里:
System.Net.WebResponse myResponse = myRequest.GetResponse();
// 然后这个WebResponse对象被用来建立一个流来取出XML的值:
System.IO.Stream rssStream = myResponse.GetResponseStream();
// 然后可以使用一个XmlDocument对象来存储流中的XML内容。XmlDocument对象用来调入XML的内容:
m_rssdom = new System.Xml.XmlDocument();
m_rssdom.Load(rssStream);
myResponse.Close();
myRequest.Abort();
return true;
}
catch (Exception ex)
{
throw ex;
return false;
}
}
public string Link
{
get {
if (m_rssdom == null)
return "";
else
{
System.Xml.XmlNodeList rssItems = m_rssdom.SelectNodes("rss/channel/link");
if (rssItems.Count > 0)
return rssItems[0].InnerText;
return "";
}
}
}
public string Description
{
get
{
if (m_rssdom == null)
return "";
else
{
System.Xml.XmlNodeList rssItems = m_rssdom.SelectNodes("rss/channel/description");
if (rssItems.Count > 0)
return rssItems[0].InnerText;
return "";
}
}
}
public string Language
{
get
{
if (m_rssdom == null)
return "";
else
{
System.Xml.XmlNodeList rssItems = m_rssdom.SelectNodes("rss/channel/language");
if (rssItems.Count > 0)
return rssItems[0].InnerText;
return "";
}
}
}
public string Copyright
{
get
{
if (m_rssdom == null)
return "";
else
{
System.Xml.XmlNodeList rssItems = m_rssdom.SelectNodes("rss/channel/copyright");
if (rssItems.Count > 0)
return rssItems[0].InnerText;
return "";
}
}
}
public string pubDate
{
get
{
if (m_rssdom == null)
return "";
else
{
System.Xml.XmlNodeList rssItems = m_rssdom.SelectNodes("rss/channel/pubDate");
if (rssItems.Count > 0)
return rssItems[0].InnerText;
return "";
}
}
}
public string lastBuildDate
{
get
{
if (m_rssdom == null)
return "";
else
{
System.Xml.XmlNodeList rssItems = m_rssdom.SelectNodes("rss/channel/lastBuildDate");
if (rssItems.Count > 0)
return rssItems[0].InnerText;
return "";
}
}
}
public string Docs
{
get
{
if (m_rssdom == null)
return "";
else
{
System.Xml.XmlNodeList rssItems = m_rssdom.SelectNodes("rss/channel/docs");
if (rssItems.Count > 0)
return rssItems[0].InnerText;
return "";
}
}
}
public string Generator
{
get
{
if (m_rssdom == null)
return "";
else
{
System.Xml.XmlNodeList rssItems = m_rssdom.SelectNodes("rss/channel/generator");
if (rssItems.Count > 0)
return rssItems[0].InnerText;
return "";
}
}
}
public string Here
{
get
{
if (m_rssdom == null)
return "";
else
{
System.Xml.XmlNodeList rssItems = m_rssdom.SelectNodes("rss/channel/here");
if (rssItems.Count > 0)
return rssItems[0].InnerText;
return "";
}
}
}
public string Category
{
get
{
if (m_rssdom == null)
return "";
else
{
System.Xml.XmlNodeList rssItems = m_rssdom.SelectNodes("rss/channel/category");
if (rssItems.Count > 0)
return rssItems[0].InnerText;
return "";
}
}
}
public string Image
{
get
{
if (m_rssdom == null)
return "";
else
{
System.Xml.XmlNodeList rssItems = m_rssdom.SelectNodes("rss/channel/image");
if (rssItems.Count > 0)
{
return "<a href='" + rssItems[0].SelectSingleNode("link").InnerText + "'><img border='0' src='" + rssItems[0].SelectSingleNode("url").InnerText + "' alt='" + rssItems[0].SelectSingleNode("title").InnerText + "'/></a>";
}
return "";
}
}
}
public string Title
{
get
{
if (m_rssdom == null)
return "";
else
{
System.Xml.XmlNodeList rssItems = m_rssdom.SelectNodes("rss/channel/title");
if (rssItems.Count > 0)
return rssItems[0].InnerText;
return "";
}
}
}
public System.Data.DataTable ConvertoDB()
{
if (m_rssdom == null)
return null;
System.Data.DataTable dt = new System.Data.DataTable();
dt.Columns.Add("title");
dt.Columns.Add("link");
dt.Columns.Add("description");
dt.Columns.Add("author");
dt.Columns.Add("category");
dt.Columns.Add("comments");
dt.Columns.Add("pubDate");
dt.Columns.Add("guid");
System.Xml.XmlNodeList rssItems = m_rssdom.SelectNodes("rss/channel/item");
if (rssItems.Count > 0)
{
System.Xml.XmlNode rssDetail,rssLink,rssDescription,rssauthor,rsscategory,rsscomments,rsspubDate,rssguid;
for (int i = 0; i < rssItems.Count; i++)
{
rssDetail = rssItems.Item(i).SelectSingleNode("title");
rssLink = rssItems.Item(i).SelectSingleNode("link");
rssDescription = rssItems.Item(i).SelectSingleNode("description");
rssauthor = rssItems.Item(i).SelectSingleNode("author");
rsscategory = rssItems.Item(i).SelectSingleNode("category");
rsscomments = rssItems.Item(i).SelectSingleNode("comments");
rsspubDate = rssItems.Item(i).SelectSingleNode("pubDate");
rssguid = rssItems.Item(i).SelectSingleNode("guid");
string title, link, description, author, category, comments, pubdate, guid;
if (rssDetail != null)
{
title = rssDetail.InnerText;
}
else
{
title = "";
}
if (rssLink != null)
{
link = rssLink.InnerText;
}
else
{
link = "";
}
if (rssDescription != null)
{
description = rssDescription.InnerText;
}
else
{
description = "";
}
if (rssauthor != null)
{
author = rssauthor.InnerText;
}
else
{
author = "";
}
if (rsscategory != null)
{
category = rsscategory.InnerText;
}
else
{
category = "";
}
if (rsscomments != null)
{
comments = rsscomments.InnerText;
}
else
{
comments = "";
}
if (rsspubDate != null)
{
pubdate = rsspubDate.InnerText;
}
else
{
pubdate = "";
}
if (rssguid != null)
{
guid = rssguid.InnerText;
}
else
{
guid = "";
}
dt.Rows.Add(title, link, description, author, category, comments, pubdate, guid);
}
}
return dt;
}
public string ConvertToHTML()
{
System.Data.DataTable dt = ConvertoDB();
if (dt == null || dt.Rows.Count <= 0)
return "";
else
{
StringBuilder sb = new StringBuilder();
sb.Append(Image + Title);
sb.Append("<UL>\n");
foreach (System.Data.DataRow r in dt.Rows)
{
sb.Append(string.Format("<li><span class='title'><a href='{1}' target='_blank'>{0}</a></span><span class='pubdate'>{2}</span></li>\n", r["title"], r["link"], r["pubdate"]));
}
sb.Append("</UL>\n");
return sb.ToString();
}
}
}
}