就需要在ASP.NET中设置一个定时器来定时更新

RSS博客镜像是CommunityServerCommunityServer肥猫博客中,也提供了这样的一个功能,在这里就此介绍下实现方法,这个实现方式是针对肥猫博客软件系统中管理好肥猫博客系统相关性比较强,如果你需要自己实现定时更新的信息,就需要在在较高级版本中(好像是从2.1开始)推出的功能,其主要的作用是,将其它博客(博客软件或者博客服务提供商)中的日志通过解析RSS方式自动发布到中。

这是一个相当实用的功能,有了RSS博客镜像,就不需要在多处同时发布博客日志了。比如你同时在新浪上有自己的博客,又同时有自己的个人博客站点,那么你只需要在新浪上发布博客日志,而个人博客站点通过RSS博客镜像功能将新浪博客上发布的新日志自动更新到站点中。

我们在ASP.NET的,至于asp,由于其天生的局限性,可能无法直接在Web应用程序中完成这一功能,而需要额外的Windows应用程序的支持。

1. 管理RSS博客镜像

首先我们需要在RSS博客镜像,需要管理的内容有:

l         RSS地址

l         更新频率

l         最后更新的时间

需要管理的内容如图所示,这里所列出的3个是必须的字段,当然根据你自己系统的需要,你可能需要更多的字段。

这部分工作由于和RSS博客镜像,和你本身的系统也是比较相关的,这里就不再多做介绍,你根据自己系统的需要去实现就行。

2. 通过ASP.NET的定时器来抓取RSS

有了上面的对每个RSS种子ASP.NET中设置一个定时器来定时更新这些RSS种子内容了。

这部分内容请主要参考如下文章《在 ASP.NET 中使用计时器(Timer)》肥猫博客中的实现方式:,根据这篇文章实现定时器就足够了。下面我主要介绍下在

这下面的代码都在Global.ascx.cs中实现。

        protected void Application_Start(Object sender, EventArgs e)

        {

   

            SetApplicationStatus(RssMirror, true);

 

            // 设置定时器

            System.Timers.Timer timer = new System.Timers.Timer();

 

            timer.Elapsed += new System.Timers.ElapsedEventHandler(this.RefressRssMirror);

           

            timer.Interval = 300000;  // 5分钟中触发定时器

            timer.AutoReset = true;

           

            timer.Enabled = true;

 

        }

 

        private void SetApplicationStatus(string keyword, object result)

        {

            Application.Lock();

            Application[keyword] = result;

            Application.UnLock();

        }

 

        private void UpdateRssMirror(fmRssMirror item, fmblog.Data.DataProviders.DataProvider provider)

        {

            try

            {

                DateTime now = DateTime.Now;

 

                XmlDocument doc = new XmlDocument();

 

                // 载入RSS种子

                doc.Load(item.FeedUrl);

 

                // 解析RSS种子内容

                fmPostCollection list = fmFeedParser.GetPosts(item.UserName, doc, item.LastUpdateTime);

 

                for(int i=list.Count-1; i>=0; i--)

                {

                    // 根据标题,判断博客日志是否已经存在

                    if(provider.GetPost(item.UserName, list[i].Title)==null)

                    {

                        provider.NewPost(list[i], string.Empty);

                    }

                }

 

                // 设置最后更新时间

                provider.SetRssMirrorLastUpdateTime(item.Id, now, item.UserName);

            }

            catch(Exception)

            {

            }

        }

 

        protected void RefressRssMirror(object sender, System.Timers.ElapsedEventArgs e)

        {

            // 判断上次触发的定时器是否已经完成

            if((bool)Application[RssMirror])

            {

                SetApplicationStatus(RssMirror, false);

 

                try

                {

                    fmblog.Data.DataProviders.DataProvider provider = fmblog.Data.DataProviders.DataProvider.CreateInstance(Application);

 

                    provider.OpenConnection();

 

                    try

                    {

                        fmRssMirrorCollection list = provider.GetAllRssMirrors();

 

                        DateTime now = DateTime.Now;

                        // 更新RSS博客镜像里的所有RSS种子

                        foreach(fmRssMirror item in list)

                        {

                            TimeSpan span = now - item.LastUpdateTime;

 

                            if(span.Hours>=item.UpdateInterval)

                            {

                                UpdateRssMirror(item, provider);

                            }

                        }

                    }

                    catch(Exception)

                    {

                    }

               

                    provider.CloseConnection();

                }

                catch(Exception)

                {

                }

 

                SetApplicationStatus(RssMirror, true);

            }

        }

       这段代码主要是在Application_Start函数中创建一个5分钟的定时器,定时器的作用就是载入所有的RSS博客镜像种子,然后将新内容更新到系统中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值