首页 / 网页编程 / ASP.NET / 一次批量修改博客文章的经验(上):准备工作
一次批量修改博客文章的经验(上):准备工作2011-03-26 博客园 Jeffrey Zhao前言我是个略有些强迫症的人,希望很多东西可以统一。例如,几个月前我才在RSS订阅里 输出了全文——那是因为博客园终于提供这个统一设置的选项了。其实在此之前就有很多 朋友建议我开放全文,但我一直没有做。不是我追求PV,而是我只能做到所有的新文章输 出全文,对于旧文章则必须一篇一篇地去修改——如果不修改,不就不统一了吗?但手动 修改实在太繁琐,于是便一直没有去做。同样的,在我以前的文章中,每段段首都是空两格的,但是现在感觉没有什么必要, 于是最近的几十篇文章都顶格写了。这个“不统一”我便“容忍”了,因为我知道博客园 提供了MetaWeblog API,这样我理论上可以写一段程序来批量修改之前的文章内容。只可 惜,直到现在我才下决心这么做。整个过程分几步完成,在此一一记录一下。XML RPC与MetaWeblogMetaWeblog是一个通用的博客内容修改接口,许多博客都实现了协议,因此我们可以 使用Windows Live Writer这样的工具来写文章。网上关于这个协议最好的描述文档我认 为是MSDN上的MetaWeblog API Reference——这其实是Windows Live Space服务所公开的 接口。从理论上来说,博客园也应该实现完全相同的功能,但是实际使用上来看,还是有 一些区别。由于任务的性质,这里我们自然以博客园为准,我也不再去追究到底谁是真正 符合标准的做法了。MetaWeblog API使用了基于XML RPC的调用方式。XML RPC使用HTTP来传输一段XML来表 示一个远程调用,与SOAP不同,XML RPC非常简单,他的传输内容您一看就懂。我只是在 开发过程中使用Fiddler简单查看了一下Windows Live Writer与博客园的通信,如果您感 兴趣的话也可以仔细研究一下XML RPC。在.NET上调用XML RPC服务可以利用开源的XML-RPC.NET类库来简化操作。虽然MSDN上 提供了一段基于XML-RPC.NET的演示代码,但是您也可以看出其实这段代码无比粗略,而 且我根本没跑通,差点让我认为XML-RPC.NET非常不成熟。但我看了XML-RPC.NET的文档之 后才意识到,其实这个类库使用起来非常简单。因此,我在这里建议您忽略MSDN上的示例 代码,而以XML-RPC.NET为准——甚至只要首页上的几行代码您就可以明白了。当然,您也可以继续阅读这篇文章,用于完成简单的工作已经足够了。使用MetaWeblog API修改博客园文章使用XML-RPC.NET调用MetaWeblog API非常容易,我们只要根据API的样式来定义“类 型”和“接口”就可以了。例如:public class Post
{
[XmlRpcMember("postid")]
public int PostID;
[XmlRpcMember("dateCreated")]
public DateTime CreateTime;
[XmlRpcMember("title")]
public string Title;
[XmlRpcMember("description")]
public string Content;
[XmlRpcMember("categories")]
public string[] Categories;
}
public interface IMetaWeblogProxy : IXmlRpcProxy
{
[XmlRpcMethod("metaWeblog.getPost")]
Post GetPost(string postId, string userName, string password);
[XmlRpcMethod("metaWeblog.editPost")]
bool UpdatePost(string postId, string userName, string password, Post post, bool publish);
}