先给大家报一个“内幕”:耍宝这个站虽然每天都更新,但是并不是每天都有编撰、排版文章。其中的玄机在于该站使用博易博客作为发布平台,博易博客支持离线写作。也就是说,文章是几天前或者是更早就已经编撰、排版好了的,只是找一个“合适的时机”发布上去。所以大家看到的耍宝近期就是天天更新,搞不好还会有人以为站长是全职的呢:)
上面提到的“合适的时机”是很重要的,为什么不一下子全部放出来?又为什么不隔几天放出来一篇文章?问题就在于这不仅可以给网友们一个良好的期待体验,更能够给搜索引擎一个每日更新的好印象。对于网友们,这么做不仅可以让网友们每天都有那么一点新鲜感,所谓细水长流就是这个意思:不能一下子洪水滔天、洪水过后又是半年的枯水季节;对于搜索引擎,每天更新新内容对提高搜索引擎给网站的权值大有裨益。
到此扫盲知识介绍完毕,开始进一步的探索。首先提出问题吧:尽管离线写作给博客的更新已经带来了不少的好处,为我省却了好多事情,节约了宝贵的时间提高了效率。可是这样子让我更懒了,我都不愿意每天找个时间把已经写好了的文章通过离线写作工具发布出去。想想看,也不能怪我偷懒,要保证每天都能有时间、有条件上网(请注意,是每天!),日复一日、年复一年,这工程也足够大啊。如果可以一次性地把成批的文章编撰好,再一次性地把编撰好的文章成批地发布到博客上,然后再由博客自动实现每日发布一篇文章这样更新就更省心了。
下面就具体来设计了。利用博易博客的插件机制,虽然不能定时触发,但是通过事件触发已经可以比较好地来“定期”去做一些事情了。只要在文章浏览事件(Post_Serving)中完成对当前时间之前文章状态为“未发布”(IsPublished)的所有文章改变状态为发布(IsPublished=true)即可实现对当前时间之前所有未发布的文章进行程序自动发布。
这就完成了设计中的最重要的一部分,接下来要做的就是为每一篇文章设定好要发布的时间(DateCreated),每天一篇,置文章状态为“未发布”(IsPublished)。注意,一定要将状态设置为“未发布”,否则文章就会如洪水般地从博客涌出来。如果使用Windows Live Writer,就可以方便地设置发布时间,并且如果设置了发布时间,而发布时间比当前时间要晚,那么Windows Live Writer会在将文章发布到博客的时候自动地设置其状态为“未发布”,故强烈推荐使用这一离线写作工具。最后要做的就是将文章成批成打地发布到博客上。
想法没问题,下面只需要实现至关重要的自动发布文章的插件,我命名它为AutoPublisher。AutoPublisher.cs插件代码如下:
#region using using System; using System.Web; using System.Web.UI; using BlogEngine.Core.Web.Controls; using BlogEngine.Core; using System.Collections.Generic; using System.IO; using System.Xml; #endregion [Extension("文章自动发布", "1.0", "BlogYi.NET")] public class AutoPublisher { public AutoPublisher() { Post.Serving += new EventHandler(Post_Serving); } private void Post_Serving(object sender, ServingEventArgs e) { List posts = Post.Posts.FindAll(delegate(Post p) { return !p.IsPublished; }); if (posts.Count == 0) return; foreach (Post post in posts) { if (post.DateCreated.AddHours(-BlogSettings.Instance.Timezone).CompareTo(DateTime.Now) <= 0) { post.IsPublished = true; post.Save(); } } } }
到此,设计已经完全得到了实现。对于上面这段代码,急用的朋友可以先拿去用,博易博客插件的安装方法简单,只需要复制到博易博客根目录的App_CodeExtensions目录下即可。有了这个,我们不仅可以书写未来的博客,更能够在发布未来的博客了。过几天正式发布,如有你在使用中遇到问题请联系我。