Welcome 微信登录

首页 / 网页编程 / ASP.NET / 一次批量修改博客文章的经验(上):准备工作

一次批量修改博客文章的经验(上):准备工作2011-03-26 博客园 Jeffrey Zhao前言

我是个略有些强迫症的人,希望很多东西可以统一。例如,几个月前我才在RSS订阅里 输出了全文——那是因为博客园终于提供这个统一设置的选项了。其实在此之前就有很多 朋友建议我开放全文,但我一直没有做。不是我追求PV,而是我只能做到所有的新文章输 出全文,对于旧文章则必须一篇一篇地去修改——如果不修改,不就不统一了吗?但手动 修改实在太繁琐,于是便一直没有去做。

同样的,在我以前的文章中,每段段首都是空两格的,但是现在感觉没有什么必要, 于是最近的几十篇文章都顶格写了。这个“不统一”我便“容忍”了,因为我知道博客园 提供了MetaWeblog API,这样我理论上可以写一段程序来批量修改之前的文章内容。只可 惜,直到现在我才下决心这么做。

整个过程分几步完成,在此一一记录一下。

XML RPC与MetaWeblog

MetaWeblog是一个通用的博客内容修改接口,许多博客都实现了协议,因此我们可以 使用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);
}