前段时间作了个博客推广方面的网站:中文博客群(http://www.bokequn.cn),里边有个功能就是可以定时读取博客们的文章信息到数据库中,再显示出来供用户查询和处理TAG.因为是虚拟主机,所以只想到了用服务器端的timer来解决。
当时比较匆忙没来得及优化,水平也很有限,如果大家觉得某些地方不对或者有更好的方式来解决,还请不吝赐教。
我觉得整个过程两个重点:
1.关于timer,当然是写在了Global.asax中,首先建立变量:
其中在web.config 中用do_time来存取多久执行一次
接下来在Application_Start中处理:
函数fun的代码:
Global.asax中代码完毕
2.接下来就是在rss2sql类中从数据库获取rss列表,根据上次读取rss时间和rss文件的修改时间来读取rss文件并写到数据库中,因为用到了太多自定义的类和方法,所以不列出所有的代码,有兴趣的朋友可以到最后下载,其中比较重要的函数:
其中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