在虚拟主机中用ASP.NET1.1服务器端TIMER定时读取RSS信息到数据库

转载 2006年06月21日 16:05:00

前段时间作了个博客推广方面的网站:中文博客群(http://www.bokequn.cn),里边有个功能就是可以定时读取博客们的文章信息到数据库中,再显示出来供用户查询和处理TAG.因为是虚拟主机,所以只想到了用服务器端的timer来解决。

当时比较匆忙没来得及优化,水平也很有限,如果大家觉得某些地方不对或者有更好的方式来解决,还请不吝赐教。

我觉得整个过程两个重点:

  1. 如何处理timer
  2. 将读取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.net运行权限不足问题及解决

有些时候我们写的asp.net应用程序是运行在虚拟主机上。有一些虚拟主机可能是由于安全的考虑,对asp.net做了权限设置,会导致我们的应用程序无法正常运行。 问题现象:     由于某种原因,asp...

ASp.Net Websocket 服务器端实现(三)

简陋聊天室简单的asp.net代码实现:   public static Dictionary WSdic = SocketHelper.GetDic; //链接对象字典及用户字典 public...

asp.net在服务器端输出js代码的方法和位置分析

操作方法: 1)Page.Response.Write("alert('response.write js');"); 2)Page.ClientScript.RegisterClientScri...

asp.net web form与jQuery Validate一起工作时解决服务器端事件不能被触发的问题

初衷 刚在弄一个asp.net web form的用户注册、登录界面(asp.net mvc的高手请不要喷 :]),涉及的两个界面都有大量的验证工作要做。既然现在jQuery那么流行,赶紧找到了...

ASP.NET Web页面是如何在Web服务器端产生的

简介    你是否仔细地想过当一个Asp.net Web页面请求到达服务器的时候,服务器端发生了什么?服务器是如何处理到来的请求的?发送给浏览器的HTML是怎么产生的?开发者可能会用什么机制去处理不...

浅谈在ASP.NET MVC3中使用IClientValidatable接口实现客户端和服务器端同时验证

http://www.cnblogs.com/bjs007/archive/2011/01/24/1942790.html 从ASP.NET MVC2开始,MVC新增了元数据级别的验证,...

使用ASP.NET AJAX异步调用Web Service和页面中的类方法(6):服务器端和客户端数据类型的自动转换:复杂类型

====================================================== 注:本文源代码点此下载 =============================...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)