RSS应用
RSS是Web 2.0的重要元素。RSS是Really Simple Syndication的简称,它是一种网页内容联合格式(Web Content Sydication Format)。
RSS概述
RSS文档是一种XML文档
<rss version="2.0">
<rss>元素的下一级是名称为<channel>的元素,它包含RSS文档中与频道相关的信息和内容。
<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>CSDN Blog: 焦点</title>
<description>Dorient 内容 RSS 聚合服务</description>
<link>http://blog.csdn.net/feed.aspx?Column=1803f9c1-606f-46c0-a2a8-c55f818d748a
</link>
<copyright>(c) 2007 Dorient.NET</copyright>
<docs>http://backend.userland.com/rss</docs>
<generator>CSDN.CMS.FrontEnd.Alpha</generator>
<item>
<title>谁是真的英雄?Dorient社区专家另类数据挖掘</title>
<link>http://blog.csdn.net/yizia/archive/2007/03/23/1538125.aspx</link>
<pubDate>Fri, 23 Mar 2007 09:23:20 GMT</pubDate>
</item>
<item>
<title>物有本末、事有始终-访 Dorient 总裁</title>
<link>http://blog.csdn.net/marksnow/archive/2007/03/21/1536647.aspx</link>
<pubDate>Thu, 22 Mar 2007 09:37:21 GMT</pubDate>
</item>
</channel>
<rss>
RSS技术规范
1 数据类型
RSS文档可以使用4种数据类型:字符型,时间和日期型,E-mail地址和URL型。其中,字符型使用最为广泛。RSS文档的所有元素都可以使用该类型的数据,即RSS文档的所有元素的值都可以解释为字符型。RSS文档中的时间和日期型数据必须遵循RFC 822文档,如可以使用如下格式的日期和时间:
<pubDate>Mon, 10 Oct 2006 14:10:00 GMT</pubDate>
<lastBuildDate>Mon, 10 Oct 2006 09:10:00 EST</lastBuildDate>
<pubDate>Mon, 10 Oct 2006 08:10:00 -0600</pubDate>
E-mail地址型和URL的数据必须符合给定的格式。其中E-mail地址型必须符合RFC 2822文档指定的电子邮件的格式。URL型必须符合RFC 3987文档指定的URL的格式。如“ftp://”、"http://"、“mailto:”、“news://”等。
2 元素
RSS文档包含的元素比较多,如<rss>、<channel>、<item>等。
<channel>元素(频道)。每一个RSS文档必须有且只有一个<channel>元素,而且该元素必须包含<title>、<link>和<description>元素。其中,<title>元素为频道的名称,它的值往往与网站相关或相同:<link>元素为响应该频道的网站的URL:<description>元素为该频道的描述:<channel>元素除了上述3个必选元素之外,其他元素均为可选元素。具体说明如下:
<category>元素,指定频道所属的一个或多个分类
<cloud>元素,必须所有进程注册一个cloud(用于获得频道的更新通知),并为RSS种子实现一个轻量级的发布订阅协议
<copyright>元素,版权声明
<docs>元素,指向RSS格式文档的URL地址
<generator>元素,生成频道的程序名称
<image>元素,与频道一起显示的图片地址
<language>元素,使用的语言
<lastBuildDate>元素,最后更新时间
<managingEditor>元素,内容负责人的E-mail
<pubDate>元素,内容的发布时间
<rating>元素,该频道的统计图片地址
<skipDays>元素,告诉使用者哪些天是可以忽略的
<skipHours>元素,告诉使用者哪些时段是可以忽略的
<textInput>元素,指定一个textbox控件与该频道一起显示
<ttl>元素,ttl是Time to live的缩写,它指示cache的有效保存时间
<webMaster>元素,技术人员的E-mail
<item>元素,描述频道的一个子项目
<image>元素是<channel>元素的可选子元素,它包含3个必需子元素和3个可选子元素,具体描述如下:
<url>元素(必需),指定GIF、JPEG或PNG图象文件的URL地址。其中,该图象代表整个频道。
<title>元素(必需),用于描述上面的图象,等同于HTML语言中的<img>的alt属性
<link>元素(必需),指定要连接的站点的URL。当显示频道时,图象的连接指向该站点。另外<title>和<link>元素的值往往与它们所在频道的<title>和<link>元素的值相同。
<width>和<height>元素(可选),它们指定图象的宽度和高度(其中,单位为像素)。它们的值均为数值型。图象宽度的最大值为144,默认值为88;图象高度的最大值为400,默认值为31。
<description>元素(可选),指定<link>元素中的title属性的文本。在调用网页时,它的值将被显示。
<cloud>元素是<channel>元素的可选子元素。它指定一个可以支持rssCloud接口的web服务。其中,rssCloud接口可以使用HTTP-POST、XML-RPC、SOAP1.1等协议实现。该元素的目的是允许通知注册为cloud的进程频道被更新,从而实现一个轻量级的发布订阅协议。下述代码定义了一个 <cloud>元素:
<cloud domain="rpc.sys.com" port="80" path="/RPC2" registerProcedure="myCloud.rssPleaseNotify" protocol="xml-rpc" />
在上述代码中,为了请求频道通知,浏览者需要发送一个XML-RPC消息到rpc.sys.com的80端口,路径为/RPC2。发送时调用的过程或方法为myCloud.rssPleaseNotify。
<ttl>元素指定频道在被刷新前被缓存的时间
<textInput>元素是<channel>元素的可选子元素。其提供了一个输入框。主要元素包括如下:
<title>元素,指定提交按钮的标签
<description>元素,指定该文本输入区的描述
<name>元素,指定文本输入区的名称
<link>元素,指定处理文本输入的CGI脚本饿URL
<item>元素是<channel>元素的可选子元素。其中,一个频道可以包含多个<item>元素。每一个<item>元素可以用来描述不同的内容。<item>元素包含的子元素的具体说明如下:
<author>元素,作者的E-mail地址
<catetory>元素,指定item可以包含在一个或多个分类中。它与channel的<catetory>元素遵循相同的规则
<comments>元素,指定与item相关的评论的地址
<description>元素,指定item的概要
<enclosure>元素,指定附加的媒体对象
<guid>元素,指定可以唯一确定item的字符串
<link>元素,指定item的URL
<pubDate>元素,指定item发布的时间
<source>元素,指定RSS频道来源
<title>元素,指定item的标题
<item>元素的所有子元素都是可选的。但是,它至少要包含一个<title>和<description>元素
<author>元素是<item>元素的可选子元素。它指定item的作者的E-mail。对于通过RSS传播的报纸和杂志来说,它的值可能是写该item所描述的文章的人。而对于聚集型webblogs来说,它的值可能是责任编辑或站长
<category>元素是<item>元素的可选子元素。它可以指定一个可选属性或域。其中,该属性或域是一个用来定义分类法的字符串,它的值是使用正斜杠分割的字符串,每一个子字符串表示一个分级
<enclosure>元素是<item>元素的可选子元素。它包含3个必需属性:url、length和type。其中,url属性指定enclosure的位置,length属性指定enclosure的大小(使用字节描述),type属性指定enclosure的标准MIME类型
<guid>元素是<item>元素的可选子元素。其中,guid是globally unique identifier的缩写。它指定一个可以唯一识别item的字符串。当item发布之后,聚合器可以选择使用该字符串来判断该item是否是为最新
注意:<guid>元素还包含一个属性:isPermaLink。如果它的值为true,则RSS读取器认为该元素的值是item的permalink,即指向当前<item>元素所描述的全部item
<pubDate>元素是<item>元素的可选子元素,它指定item发布的日期。如果当前时间晚于它指定的日期,则聚合妻在日期到达它指定的日期之前,可以不显示该item
<source>元素是<item>元素的可选子元素,它的值是item来自的RSS频道的名称,从item的title衍生而来。该元素必须包含一个属性url。该属性链接到XML序列化源
目前流行的RSS阅读器
1 看天下(www.kantianxia.com) 2 新闻蚂蚁(www.newsants.com) 3 周博通(www.zhoubotong.com)
4 咨讯通(www.hc360.com) 5 新浪点点通
总体功能设计
1 RSS订阅
订阅RSS源:将RSS源的地址添加到数据库中
修改RSS源:修改已经添加到数据库中的RSS源的各种属性
RSS源管理:管理数据库中RSS源
2 RSS阅读器
创建一个简单RSS页面
读取RSS的频道,解释RSS内容中的频道,并读取频道的信息
读取RSS的Item,解释RSS内容中的Item,并读取Item的信息
创建RSS页面,通过上述读取的频道信息和Item信息,创建一个RSS页面,并在网页中显示RSS的内容
表设计
RSS链接地址表RSSUrl
RSSUrl表
字段名 数据类型 字段说明 键引用 备注
ID int ID PK 主键(自动增1)
Name varchar(200) 标题
Url varchar(255) URL
CreateDate datetime 创建时间
应用程序RSS
<td background='<%# Request.ApplicationPath+"/App+Themes/Web2ASPNET2/Images/titlebg.jpg" %>' clospan="2" height="25">
创建RSS页面的头部
private XmlTextWriter WriteRSSHeader(XmlTextWriter writer){
writer.WriteStartDocument();
writer.WriteStartElement("rss");
writer.WriteAttributeString("version","2.0");
writer.WriteStartElement("channel");
writer.WriteElementString("title","Simple RSS Document");
writer.WriteElementString("link","http://www.danielbright.net/");
writer.WriteElementString("description","A simple RSS document generated using XMTTextWriter");
writer.WriteElementString("copyright","Copyright 2006-2007 梦海飞翔");
return writer;
}
创建RSS的Item项
private XmlTextWriter WriteRSSItem(XmlTextWriter writer,string title,string linkk,string description){
writer.WriteStartElement("item");
writer.WriteElementString("title",title);
writer.WriteElementString("link",link);
writer.WriteElementString("description",description);
writer.WriteElementString("CreateDate",DateTime.Now.ToString("r"));
writer.WriteEndElement();
return writer;
}
private XmlTextWriter WriteRSSItem(XmlTextWriter writer,RSSItem item){
writer.WriteStartElement("item");
foreach(string key in item.Attributes.Keys){
writer.WriteElementString(key,itemAttributes[key]);
}
writer.WriteEndElement();
return writer;
}
创建RSS页面的尾部
private XmlTextWriter WriteRSSTailer(XmlTextWriter writer){
writer.WriteEndElement();
writer.WriteEndElement();
writer.WriteEndDocument();
return writer;
}
输出RSS页面
public void CreateSampleRss(HttpResponse response,params RSSItem[] items){
XmlTextWriter writer=new XmlTextWriter(response.OutputStream,System.Text.Encoding.UTF8);
WriteRSSHeader(writer);
foreach(RSSItem item in items){WriteRSSItem(writer,item);}
WriteRSSTailer(writer);
writer.Flush();
writer.Close();
response.ContentEncoding=System.Text.Encoding.UTF8;
response.ContentType="text/xml";
response.Cache.SetCacheability(HttpCacheability.Public);
}
创建一个简单的RSS页面
using System.Xml;
using Web2ASPNET2.WebRSS;
private void Page_Load(object sender,System.EventArgs e){
SampleRss rss=new SampleRss();
RSSItem[] items=new RSSItem[2];
for(int i=0;i<item.Length;i++){item[i]=new RSSItem();}
items[0].Title="Title #1";
items[0].Link="http://news.csdn.net/Feed.aspx?Column=7adf68b5-ce01-4213-ad3c-ea8fd6e01f89";
items[0].Description="This is the first test item";
items[1].Title="Title #2";
items[1].Link="http://test.com/blabla.aspx";
items[1].Description="This is the second test item";
rss.CreateSampleRss(Response,items);
}
订阅RSS
数据访问层设计
using Web2ASPNET2.OperateSqlServer;
using System.Data.SqlClient;
namespace Web2ASPNET2.WebRSS{
public class Url{
public Url(){}
//获取订阅的所有RSS源
public DataSet GetUrls(){
return DataCommon.GetDataByDataSet("Pr_GetRssUrls");
}
//获取单个订阅的RSS源
public SqlDataReader GetSingleUrl(int urlID){
return DataCommon.GetDataByReaderIDParam("Pr_GetSingleRssUrl",urlID);
}
//订阅RSS源
public int AddUrl(string name,string url){
SqlParameter[] parameters={OperateDatabase.CreateInParam("@Name",SqlDbType.VarChar,200,name),
OperateDatabase.CreateInParam("@Url",SqlDbType.VarChar,255,url)};
return (OperateDatabase.RunProc("Pr_AddRSSUrl",parameters));
}
//修改订阅的RSS源
public int UpdateUrl(int urlID,string name,string url){
SqlParameter[] parameters={OperateDatabase.CreateInParam("@ID",SqlDbType.Int,4,urlID),
OperateDatabase.CreateInParam("@Name",SqlDbType.VarChar,200,name),
OperateDatabase.CreateInParam("@Url",SqlDbType.VarChar,255,url)};
return (OperateDatabase.RunProc("Pr_UpdateRSSUrl",parameters));
}
//删除订阅的RSS源
public int DeleteUrl(int urlID){
return DataCommon.QueryDataIDParam("Pr_DeleteRSSUrl",urlID);
}
}
}
存储过程
/*获取所有订阅的RSS源/*
create procedure [dbo].[Pr_GetRSSUrls]
as
select * from RSSUrl order by CreateDate desc
/*获取单个订阅的RSS源/*
create procedure [dbo].[Pr_GetSingleRSSUrl]
(
@ID int
)
as
select * from RSSUrl where ID=@ID
/*订阅RSS源/*
create procedure [dbo].[Pr_AddRSSUrl]
(
@Name varchar(200),
@Url varchar(255)
)
as
insert into RSSUrl(Name,UrlCreateDate) values(@Name,@Url,getdate())
/*修改订阅的RSS源/*
create procedure [dbo].[Pr.UpdateRSSUrl]
(
@ID int,
@Name varchar(200),
@Url varchar(255)
)
as
update RSSUrl set Name=@Name,Url=@Url where ID=@ID
return @@ROWCOUNT
/*删除订阅的RSS源/*
create procedure [dbo].[Pr_DeleteRSSUrl]
(
@ID int
)
as
delete RSSUrl where ID=@ID
return @@ROWCOUNT
订阅RSS源
页面初始化
using Web2ASPNET2.CommonOperation;
using Web2ASPNET2.UserCommonOperation;
using Web2ASPNET2.WebRSS;
protected void Page_Load(object sender,EventArgs e){
UserInfo info=(UserInfo)UserCommonOperation.GetUserInfo(Session);
if(info==null){
Response.Write("<script>history.back()</script>");
Server.Transfer("~/Portal/UserLogin.aspx");
return;
}
}
添加新RSS源
protected void btnAdd_Click(object sender,EventArgs e){
//执行添加操作
Url url=new Url();
if(url.AddUrl(tbName.Text,tbUrl.Text)>0){
Dialog.OpenDialog(Response,"恭喜您,添加RSS源成功......");
}
}
返回功能
protected void btnReturn_Click(object sender,EventArgs e){
Server.Transfer("~/Portal/UrlManage.aspx");//返回管理页面
}
修改RSS源
页面初始化
using Web2ASPNET2.CommonOperation;
using Web2ASPNET2.UserCommonOperation;
using Web2ASPNET2.WebRSS;
using System.Data.SqlClient;
int urlID=-1;
protected void Page_Load(object sender,EventArgs e){
UserInfo info=(UserInfo)UserCommonOperation.GetUserInfo(Session);
if(info==null){
Response.Write("<script>history.back()</script>");
Server.Transfer("~/Portal/UserLogin.aspx");
return;
}
//获取被修改信息的ID
if(Request.Params["UrlID"]!=null){
urlID=DataTypeConvert.ConvertToInt(Request.Params["UrlID"].ToString());
}
//显示被修改的数据
if(!Page.IsPostBack&&urlID>-1){BindPageData(urlID);}
//设置按钮的可用性
int[] idList={urlID};
ButtonEnable.ControlButtonEnable(btnUpdate,idList);
}
private void BindPageData(int urlID){
//获取单个记录的信息
Url url=new Url();
SqlDataReader dr=url.GetSingleUrl(urlID);
if(dr==null) return;
if(dr.Read()){
//显示信息
tbName.Text=dr["Name"].ToString();
tbUrl.Text=dr["Url"].ToString();
}
dr.Close();
}
修改RSS源
protected void btnUpdate_Click(object sender,EventArgs e){
Url url=new Url();
if(url.UpdateUrl(urlID,tbName.Text,tbUrl.Text)>0){
Dialog.OpenDialog(Response,"恭喜您,修改RSS源成功......");
}
}
RSS源管理
注意:下述HTML代码为一个gvUrl控件的一个模板列。该列显示了编辑和删除标签的图象按钮,即【★】和【×】按钮。按钮的CommandArgument属性保存它们所在行的标签的ID值;CommandName属性的值保存它们执行操作的标识。其中,修改标签按钮的CommandName属性的值为“update”,删除标签按钮的CommandName属性的值为“del”。
<asp:TemplateField HeaderText="操作">
<ItemTemplate>
<asp:ImageButton ID="ibtUpdate" runat="server" CommandName="update" ImageUrl="../App_Themes/Web2ASPNET2/Images/
update.gif" AleternateText="编辑该RSS" CommandArgument='<%# Eval("ID") %>' />
<asp:ImageButton ID="ibtDelete" runat="server" CommandName="del" ImageUrl="../App_Themes/Web2ASPNET2/Images/
delete.gif" AleternateText="删除该RSS" CommandArgument='<%# Eval("ID") %>' />
</ItemTemplate>
</asp:TemplateField>
页面初始化
using Web2ASPNET2.CommonOperation;
using Web2ASPNET2.UserCommonOperation;
using Web2ASPNET2.WebRSS;
protected void Page_Load(object sender,EventArgs e){
UserInfo info=(UserInfo)UserCommonOperation.GetUserInfo(Session);
if(info==null){
Response.Write("<script>history.back()</script>");
Server.Transfer("~/Portal/UserLogin.aspx");
return;
}
if(!Page.IsPostBack){BindPageData();}
}
private void BindPageData(){
Url url=new Url();
Web2ASPNET2.CommonOperation.DataBinder.BindGridViewData(gvUrl,url.GetUrls());
}
重定向和删除功能
protected void gvUrl_RowCommand(object sender,GridViewCommandEventArgs e){
if(e.CommandName=="update"){
Server.Transfer("~/Portal/UpdateUrl.aspx?UrlID="+e.CommandArgument.ToString());
}
if(e.CommandName=="del"){
Url url=new Url();
url.DeleteUrl(DataTypeConvert.ConvertToInt(e.CommandArgument.ToString()));
BindPageData();
}
}
protected void gvUrl_RowDataBound(object sender,GridViewRowEventArgs e){
ImageButton ibtDelete=(ImageButton)e.Row.FindControl("ibtDelete");
if(ibtDelete!=null){
ibtDelete.Attributes.Add("onclick","return confirm('你确定要删除所选择的数据行吗?');");
}
}
RSS阅读器
using System;
using System.Data;
using System.Web;
using System.Xml;
using System.ComponentModel;
using System.Collections;
using System.Collections.Generic;
using System.Net;
using System.IO;
namespace Web2ASPNET2.WebRSS{......}
定义RSS的Item
public class RSSItem{
//保存值的字典
private Dictionary<string,string> attributes;
public RSSItem(){
//初始化字典
if(attributes==null){
attributes=new Dictionary<string,string>();
}
}
//属性Attributes
[Browsable(false)]
public Dictionary<string,string> Attributes{
get{return attributes;}
}
//索引器
[Browsable(false)]
public string this[string key]{
get{return GetValue(key);}
}
//设置属性的值
public void SetAttributes(string name,string value){
if(string.IsNullOrEmpty(name)==true) return;
string localName=name.ToLower();
//判断值是否存在
if(Attributes.ContainsKey(localName)==false){
Attributes.Add(localName,value.Trim());
}
}
//获取属性的值
protected string GetValue(string name){
return (attributes.ContainsKey(name)?attributes[name]:null);
}
//属性Title
public string Title{
get{return GetValue("title");}
set{SetAttributes("title",value);}
}
//属性Link
public string Link{
get{return GetValue("link");}
set{SetAttributes("link",value);}
}
public string Description{
get{return GetValue("description");}
set{SetAttributes("description",value);}
}
}
定义RSS的频道
public class RSSChannel:RSSItem{
private const string RSSITEM="item";
private const string RSSCHANNEL="channel";
private string url;
//频道的Item集合
private List<RSSItem> items;
public RSSChannel():base(){}
public RSSChannel(string url){
//初始化
this.url=url;
if(items==null){items=new List<RSSItem>();}
}
//属性Items保存频道的Item项
public List<RSSItem> Items{
get{if(items==null) {items=new List<RSSItem>();}return items;}
}
}
读取RSS的Item
private RSSItem ReadItem(XmlTextReader reader,string name){
RSSItem item=new RSSItem();
//读取Item节点的属性的值
while(reader.Read()){
if(reader.NodeType==XmlNodeType.Element){//设置属性的值
item.SetAttribute(reader.LocalName,reader.ReadString());
}
//结束循环
if(reader.NodeType==XmlNodeType.EndElement&&reader.LocalName.ToLower()==name){break;}
}
return item;
}
读取RSS频道
public void ReadChannel(){
if(string.IsNullOrEmpty(url)==true) return;
XmlTextReader reader=new XmlTextReader(url);//获取RSS网页的内容
string localName;
while(reader.Read()){//获取当前节点名称
localName=reader.LocalName.ToLower();
//判断当前节点是否为元素类型
if(reader.NodeType==XmlNodeType.Element){
if(localName==RSSITEM){
items.Add(ReadItem(reader,RSSITEM));
}
//读取节点的内容值
if(reader.MoveToContent()==XmlNodeType.Element){
string content=reader.ReadString();
if(reader.NodeType==XmlNodeType.EndElement){
SetAttribute(reader.LocalName,content);
}
}
}
}
}
<frameset id="IndexFrame" rows="80,*" frameborder="1" border="0" framespacing="0">
<frame id="Header" name="Header" scrolling="no" scr="../UserControl/Header.aspx" noresize></frame>
<frameset id="MainFrame" cols="180,*" rows="*" border="0" framespacing="0">
<frame name="Tree" src="LeftUrl.aspx" scrolling="auto" frameborder="0" noresize></frame>
<frame name="Desktop" src="ViewRSS.aspx" scrolling="auto" frameborder="0"></frame>
</frameset>
</frameset>
页面LeftUrl.aspx添加一个DataList控件
<asp:DataList ID="dlLink" runat="server" SkinID="dlSkin">
<ItemTemplate>
<a href='ViewRSS.aspx?UrlID=<%# Eval("ID") %>' target="Desktop"><%# Eval("Name") %></a>
</ItemTemplate>
<AlternatingItemTemplate>
<a href='ViewRSS.aspx?UrlID=<%# Eval("ID") %>' target="Desktop"><%# Eval("Name") %></a>
</AlternatingItemTemplate>
</asp:DataList>
页面leftUrl.aspx初始化
using Web2ASPNET2.CommonOperation;
using Web2ASPNET2.UserCommonOperation;
using Web2ASPNET2.WebRSS;
protected void Page_Load(object sender,EventArgs e){
//显示被修改的数据
if(!Page.IsPostBack){BindPageData();}
}
private void BindPageData(){
Url url=new Url();
Web2ASPNET2.CommonOperation.DataBinder.BindDataListData(dlLink,url.GetUrls());
}
页面ViewRSS.aspx初始化
private void ShowRss(string url){
//根据URL获取频道的数据
RSSChannel channel=new RSSChannel(url);
channel.ReadChannel();
//获取每一个Item项
RSSItem[] items=new RSSItem(channel.Items.Count);
int i=0;
foreach(RSSItem item in channel.Items){items[i++]=item;}
//创建RSS文档
SampleRss rss=new SampleRss();
rss.CreateSampleRss(Response,items);
}
using Web2ASPNET2.CommonOperation;
using Web2ASPNET2.UserCommonOperation;
using Web2ASPNET2.WebRSS;
using System.Data.SqlClient;
页面ViewRSS.aspx在事件Page_Load(object sender,EventArgs e)中初始化其数据,其实现功能如下:
获取、显示RSS源的ID值,并保存在变量urlID中,调用函数BindPageData(int urlID)从数据库中获取该RSS源的URL,并保存在变量urlLink中,调用函数ShowRss(string url)在页面ViewRSS.aspx中显示该RSS源的具体内容。
int urlID=-1;
string urlLink=string.Empty;
protected void Page_Load(object sender,EventArgs e){
//获取被修改信息的ID
if(Request.Params["UrlID"]!=null){
urlID=DataTypeConvert.ConvertToInt(Request.Params["UrlID"].ToString());
}
//显示被修改的数据
if(!Page.IsPostBack&&urlID>-1){
BindPageData(urlID);
ShowRss(urlLink);
}
}
private void BindPageData(int urlID){
Url url=new Url();
SqlDataReader dr=url.GetSingleUrl(urlID);
if(dr==null) reutrn;
if(dr.Read()){urlLink=dr["Url"].ToString();}
dr.Close();
}