国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

在虛擬主機(jī)中用ASP.NET1.1服務(wù)器端TIMER定時(shí)讀取RSS信息到數(shù)據(jù)庫

2019-11-18 17:08:53
字體:
供稿:網(wǎng)友

前段時(shí)間作了個(gè)博客推廣方面的網(wǎng)站:中文博客群(http://www.bokequn.cn),里邊有個(gè)功能就是可以定時(shí)讀取博客們的文章信息到數(shù)據(jù)庫中,再顯示出來供用戶查詢和處理TAG.因?yàn)槭翘摂M主機(jī),所以只想到了用服務(wù)器端的timer來解決。

當(dāng)時(shí)比較匆忙沒來得及優(yōu)化,水平也很有限,如果大家覺得某些地方不對或者有更好的方式來解決,還請不吝賜教。

我覺得整個(gè)過程兩個(gè)重點(diǎn):

如何處理timer
將讀取rss模塊化,更方便調(diào)用
1.關(guān)于timer,當(dāng)然是寫在了Global.asax中,首先建立變量:

System.Timers.Timer t=new System.Timers.Timer(1000*Convert.ToInt16(System.Configuration.ConfigurationSettings.AppSettings["do_time"]));
其中在web.config 中用do_time來存取多久執(zhí)行一次

接下來在application_Start中處理:

t.AutoReset=true;
t.Enabled=true;
if(common.func.get_key("can_do")=="1")//也是在web.config中存取是否進(jìn)行定時(shí)處理,其中common.func.get_key是自定義的獲取設(shè)置的函數(shù)
t.Elapsed +=new System.Timers.ElapsedEventHandler(fun);
函數(shù)fun的代碼:


PRivate void fun(object sender, System.Timers.ElapsedEventArgs e)
{
try
{
System.DateTime dt=System.DateTime.Now;
common.func.write_log("開始讀取遠(yuǎn)程xml");//寫入日志

rss2sql rl=new rss2sql();
rl.readall();
System.DateTime dt2=System.DateTime.Now;
common.func.write_log("XML文件導(dǎo)入到數(shù)據(jù)庫成功"+Convert.ToString(dt2-dt));//將本次執(zhí)行時(shí)間寫入日志,
}
catch(Exception ex)
{
common.func.write_log("讀取遠(yuǎn)程xml文件出現(xiàn)錯(cuò)誤:"+ex.Message);//寫入日志
}
}


Global.asax中代碼完畢

2.接下來就是在rss2sql類中從數(shù)據(jù)庫獲取rss列表,根據(jù)上次讀取rss時(shí)間和rss文件的修改時(shí)間來讀取rss文件并寫到數(shù)據(jù)庫中,因?yàn)橛玫搅颂嘧远x的類和方法,所以不列出所有的代碼,有興趣的朋友可以到最后下載,其中比較重要的函數(shù):

/**//// <summary>
/// 讀取指定鏈接的rss內(nèi)容到數(shù)據(jù)庫
/// </summary>
/// <param name="id">對應(yīng)博客的id</param>
/// <param name="url">rss地址</param>
/// <param name="dt">上次讀取時(shí)間</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);//建立一個(gè)rss讀取類實(shí)例
feed.read();//開始讀取
if(feed.Channel.Items.Count>0)//如果文章數(shù)大于0,開始讀取到數(shù)據(jù)庫
{
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].descr}
finally
{
db1.db_close();

}
}


其中rssFeed 就是自己寫的處理rss的類,對于這個(gè)類,以前曾經(jīng)用過一段時(shí)間開源的rss.net,但是實(shí)際過程中因?yàn)楦鞣Nrss地址都有,甚至很多不太符合標(biāo)準(zhǔn),所以會遇到很多問題,而且看了一下源代碼,他想處理的東西太多了,代碼量也非常龐大,我這點(diǎn)水平估計(jì)一時(shí)半會是改不好的,于是就自己作了個(gè)控件,也算不上控件了,就幾個(gè)類,當(dāng)然我處理的內(nèi)容也相對簡單了很多,只處理rss的標(biāo)題和簡介,item的標(biāo)題,簡介,時(shí)間,鏈接。

代碼貼過來太多了,有興趣的朋友可以到最后下載

用法相當(dāng)簡單了,把編譯后的dll引用過來就可以如下使用:

rssFeed feed = new rssFeed(url,dt);//建立一個(gè)rss讀取類實(shí)例
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

構(gòu)造函數(shù)中的dt表示上次讀取時(shí)間,因?yàn)樵陬愔袝@得rss文件的修改時(shí)間,如果大于上次讀取時(shí)間才去讀取,否則就不處理了,別的相信大家一看就能明白了

目前rss讀取還存在著一個(gè)問題,就是有的xml文件中如果有16進(jìn)制字符(當(dāng)然這個(gè)出現(xiàn)的可能性不大)就讀取不了,哪位仁兄知道怎么解決,還請告知。

說的有些亂,還是希望對需要此功能的朋友有所幫助。

相關(guān)下載:http://www.survivalescaperooms.com/Files/guanvee/code.rar

http://guanvee.VEVb.com/archive/2006/06/17/428329.html


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 炉霍县| 新和县| 霍邱县| 抚松县| 茌平县| 浦城县| 深圳市| 资阳市| 邵阳市| 西城区| 通山县| 兰州市| 鄂尔多斯市| 惠来县| 衡南县| 集贤县| 南溪县| 博乐市| 辉县市| 赣州市| 武胜县| 邹城市| 海南省| 平邑县| 昭通市| 朝阳区| 武安市| 河曲县| 若羌县| 德兴市| 丁青县| 怀安县| 洪泽县| 鱼台县| 肇州县| 城市| 丹棱县| 武穴市| 彰武县| 隆昌县| 宁河县|