在虚拟主机中用ASP.NET1.1服务器端TIMER定时读取RSS信息到数据库
2008-04-24 06:30
405 查看
前段时间作了个博客推广方面的网站:中文博客群(http://www.bokequn.cn),里边有个功能就是可以定时读取博客们的文章信息到数据库中,再显示出来供用户查询和处理TAG.因为是虚拟主机,所以只想到了用服务器端的TIMER来解决。
当时比较匆忙没来得及优化,水平也很有限,如果大家觉得某些地方不对或者有更好的方式来解决,还请不吝赐教。
我觉得整个过程两个重点:
如何处理TIMER
将读取RSS模块化,更方便调用
1.关于TIMER,当然是写在了Global.asax中,首先建立变量:
System.TIMERs.TIMER t=new System.TIMERs.TIMER(1000*Convert.ToInt16(System.Configuration.ConfigurationSettings.AppSettings["do_time"]));
其中在web.config 中用do_time来存取多久执行一次
接下来在Application_Start中处理:
t.AutoReset=true;
t.Enabled=true;
if(common.func.get_key("can_do")=="1")//也是在web.config中存取是否进行定时处理,其中common.func.get_key是自定义的获取设置的函数
t.Elapsed =new System.TIMERs.ElapsedEventHandler(fun);
函数fun的代码:
private void fun(object sender, System.TIMERs.ElapsedEventArgs e)
{
try
{
System.DateTime dt=System.DateTime.Now;
common.func.write_log("开始读取远程XML");//写入日志
RSS2sql rl=new RSS2sql();
rl.readall();
System.DateTime dt2=System.DateTime.Now;
common.func.write_log("XML文件导入到数据库成功" Convert.ToString(dt2-dt));//将本次执行时间写入日志,
}
catch(Exception ex)
{
common.func.write_log("读取远程xml文件出现错误:" ex.Message);//写入日志
}
}
Global.asax中代码完毕
2.接下来就是在RSS2sql类中从数据库获取RSS列表,根据上次读取RSS时间和RSS文件的修改时间来读取RSS文件并写到数据库中,因为用到了太多自定义的类和方法,所以不列出所有的代码,有兴趣的朋友可以到最后下载,其中比较重要的函数:
/**//// <summary>
/// 读取指定链接的RSS内容到数据库
/// </summary>
/// <param name="id">对应博客的id</param>
/// <param name="url">RSS地址</param>
/// <param name="dt">上次读取时间</param>
public void read_from_url(string id,string url,System.DateTime dt)
{
op_db.db_class db1=new op_db.db_class();
try
{
RSSFeed feed = new RSSFeed(url,dt);//建立一个RSS读取类实例
feed.read();//开始读取
if(feed.Channel.Items.Count>0)//如果文章数大于0,开始读取到数据库
{
for(int i=0;i<feed.Channel.Items.Count;i )
{
write_artical(id,feed.Channel.Items[i].title,feed.Channel.Items[i].link,feed.Channel.Items[i].description,feed.Channel.Items[i].pubDate);
}
db1.sql="update bokequn set last_RSS_date='" feed.lastModified.ToString() "' where id=" id;
db1.executesql();
}
}
catch(Exception ex)
{
common.func.write_log(id ":url:" url "错误" ex.Message ex.Source ex.StackTrace);
}
finally
{
db1.db_close();
}
}
其中RSSFeed 就是自己写的处理RSS的类,对于这个类,以前曾经用过一段时间开源的RSS.NET,但是实际过程中因为各种RSS地址都有,甚至很多不太符合标准,所以会遇到很多问题,而且看了一下源代码,他想处理的东西太多了,代码量也非常庞大,我这点水平估计一时半会是改不好的,于是就自己作了个控件,也算不上控件了,就几个类,当然我处理的内容也相对简单了很多,只处理RSS的标题和简介,item的标题,简介,时间,链接。
代码贴过来太多了,有兴趣的朋友可以到最后下载
用法相当简单了,把编译后的dll引用过来就可以如下使用:
RSSFeed feed = new RSSFeed(url,dt);//建立一个RSS读取类实例
feed.read();//开始读取
feed.Channel.title
feed.Channel.description
feed.Channel.Items.Count
feed.Channel.Items[i].title
feed.Channel.Items[i].description
feed.Channel.Items[i].link
feed.Channel.Items[i].pubDate
构造函数中的dt表示上次读取时间,因为在类中会获得RSS文件的修改时间,如果大于上次读取时间才去读取,否则就不处理了,别的相信大家一看就能明白了
目前RSS读取还存在着一个问题,就是有的xml文件中如果有16进制字符(当然这个出现的可能性不大)就读取不了,哪位仁兄知道怎么解决,还请告知。
说的有些乱,还是希望对需要此功能的朋友有所帮助。
相关下载:http://www.cnblogs.com/Files/guanvee/code.rar
http://guanvee.cnblogs.com/archive/2006/06/17/428329.html
当时比较匆忙没来得及优化,水平也很有限,如果大家觉得某些地方不对或者有更好的方式来解决,还请不吝赐教。
我觉得整个过程两个重点:
如何处理TIMER
将读取RSS模块化,更方便调用
1.关于TIMER,当然是写在了Global.asax中,首先建立变量:
System.TIMERs.TIMER t=new System.TIMERs.TIMER(1000*Convert.ToInt16(System.Configuration.ConfigurationSettings.AppSettings["do_time"]));
其中在web.config 中用do_time来存取多久执行一次
接下来在Application_Start中处理:
t.AutoReset=true;
t.Enabled=true;
if(common.func.get_key("can_do")=="1")//也是在web.config中存取是否进行定时处理,其中common.func.get_key是自定义的获取设置的函数
t.Elapsed =new System.TIMERs.ElapsedEventHandler(fun);
函数fun的代码:
private void fun(object sender, System.TIMERs.ElapsedEventArgs e)
{
try
{
System.DateTime dt=System.DateTime.Now;
common.func.write_log("开始读取远程XML");//写入日志
RSS2sql rl=new RSS2sql();
rl.readall();
System.DateTime dt2=System.DateTime.Now;
common.func.write_log("XML文件导入到数据库成功" Convert.ToString(dt2-dt));//将本次执行时间写入日志,
}
catch(Exception ex)
{
common.func.write_log("读取远程xml文件出现错误:" ex.Message);//写入日志
}
}
Global.asax中代码完毕
2.接下来就是在RSS2sql类中从数据库获取RSS列表,根据上次读取RSS时间和RSS文件的修改时间来读取RSS文件并写到数据库中,因为用到了太多自定义的类和方法,所以不列出所有的代码,有兴趣的朋友可以到最后下载,其中比较重要的函数:
/**//// <summary>
/// 读取指定链接的RSS内容到数据库
/// </summary>
/// <param name="id">对应博客的id</param>
/// <param name="url">RSS地址</param>
/// <param name="dt">上次读取时间</param>
public void read_from_url(string id,string url,System.DateTime dt)
{
op_db.db_class db1=new op_db.db_class();
try
{
RSSFeed feed = new RSSFeed(url,dt);//建立一个RSS读取类实例
feed.read();//开始读取
if(feed.Channel.Items.Count>0)//如果文章数大于0,开始读取到数据库
{
for(int i=0;i<feed.Channel.Items.Count;i )
{
write_artical(id,feed.Channel.Items[i].title,feed.Channel.Items[i].link,feed.Channel.Items[i].description,feed.Channel.Items[i].pubDate);
}
db1.sql="update bokequn set last_RSS_date='" feed.lastModified.ToString() "' where id=" id;
db1.executesql();
}
}
catch(Exception ex)
{
common.func.write_log(id ":url:" url "错误" ex.Message ex.Source ex.StackTrace);
}
finally
{
db1.db_close();
}
}
其中RSSFeed 就是自己写的处理RSS的类,对于这个类,以前曾经用过一段时间开源的RSS.NET,但是实际过程中因为各种RSS地址都有,甚至很多不太符合标准,所以会遇到很多问题,而且看了一下源代码,他想处理的东西太多了,代码量也非常庞大,我这点水平估计一时半会是改不好的,于是就自己作了个控件,也算不上控件了,就几个类,当然我处理的内容也相对简单了很多,只处理RSS的标题和简介,item的标题,简介,时间,链接。
代码贴过来太多了,有兴趣的朋友可以到最后下载
用法相当简单了,把编译后的dll引用过来就可以如下使用:
RSSFeed feed = new RSSFeed(url,dt);//建立一个RSS读取类实例
feed.read();//开始读取
feed.Channel.title
feed.Channel.description
feed.Channel.Items.Count
feed.Channel.Items[i].title
feed.Channel.Items[i].description
feed.Channel.Items[i].link
feed.Channel.Items[i].pubDate
构造函数中的dt表示上次读取时间,因为在类中会获得RSS文件的修改时间,如果大于上次读取时间才去读取,否则就不处理了,别的相信大家一看就能明白了
目前RSS读取还存在着一个问题,就是有的xml文件中如果有16进制字符(当然这个出现的可能性不大)就读取不了,哪位仁兄知道怎么解决,还请告知。
说的有些乱,还是希望对需要此功能的朋友有所帮助。
相关下载:http://www.cnblogs.com/Files/guanvee/code.rar
http://guanvee.cnblogs.com/archive/2006/06/17/428329.html
相关文章推荐
- 在虚拟主机中用ASP.NET1.1服务器端TIMER定时读取RSS信息到数据库
- 在虚拟主机中用ASP.NET1.1服务器端TIMER定时读取RSS信息到数据库
- ASP.NET----获取客户端浏览器信息,获取服务器端主机名和 IP
- 虚拟主机上asp.net运行权限不足问题及解决
- 用asp.net如何实现自动读取mp3文件信息
- Goole Map API V3动态加载数据库中的坐标信息并添加标记(ASP.NET)
- 虚拟主机常见问题:asp.net出现Server Application Unavailable解决
- Asp.net在服务器端读取Excel文件所需要做的事情
- ASP.NET 上传图片至数据库并读取图片显示
- 请教如何在虚拟主机部署最新的ASP.NET AJAX啊?
- ASP.NET通过Global.asax和Timer定时器 定时调用WebService 运行后台代码
- asp.net读取数据库
- 在asp.net中读取XML文件信息的4种方法(转载)
- [ASP.NET 2.0]虚拟主机上部署AJAX控件
- 虚拟主机上asp.net运行权限不足问题及解决(转)
- ASP.NET 数据库中插入图片和读取图片
- 虚拟主机运行Asp.net MVC2程序体验(在不同版本的 IIS 上使用 ASP.NET MVC(转),付程序示例 )
- ASP.NET虚拟主机安全漏洞解决方案
- 在asp.net中读取XML文件信息的4种方法
- Asp定时执行操作 Asp定时读取数据库(网页定时操作详解)