微软启用了新的live域名,有许多人将hotmail之类的帐号转到新的域名,这就出现了如何将原帐号下的个人信息转移到新帐号的问题。对于live messager的联系人列表可采用其联系人选项中的导入导出功能,而最麻烦当属将live spaces的空间博客转移到新的帐号名下。最直接方法就是联系微软管理员,将你旧帐号下的空间所有权转移到新帐号名下,但是业务上是否可行不得而知。因此转而另一方法,开新的空间,将旧空间的博客转移到新空间来,本文就是采用这种思路,顺带提及下live api的简单使用。
Windows Live Spaces MetaWeblog API提供了给外部程序进行文章内容设置和读取的功能。API使用了XML—RPC协议来在客户端应用程序与Weblog服务器端进行通讯。
为了使用MetaWeblog API编辑空间中的博文内容,首先需要在空间启用E-mail发布功能,并设置密码字。
- 到你的空间中的Options->E-mail Publishing选项进行配置
- 打开E-mail发布功能,并选择 secred word的密码字。
在程序中会用到用户名和密码,如果你的空间地址为: oldname.spaces.live.com,则用户名就是oldname,而不是你的live id,密码则是上面设置的secred word,而不是live id的密码。
现在的MetaWeblogApi能进行发布新博文,编辑现有的博文,获取指定博文,获取类别列表,获取最近发布的博文,删除博文,获取用户博客信息,获取用户信息等功能。由这些功能,想迁移博客内容,首先需要获取到旧空间里的博文。我们自然想到用MetaWeblogAPI metaWeblog.getRecentPosts Method函数,指定一个较大的值,然后获取全部的博文。很可惜,对于live spaces值只能取20,也就是说只能获取最近20篇博文。顺便提下,这里的20篇包括你己发布的,和存在空间里的草稿,这些草稿有时候并不会在空间里显示出来,但是操作时会有表示。如果用MetaWeblogAPI metaWeblog.getPost Method,需要知道指定博文的id号,没有获取到全部博文id的方法作辅助,这又是一个因难。
最后我采用了将metaWeblog.getRecentPosts方法的获取值设为1,每次取最近的一篇博文,然后记录id号,将这博文用MetaWeblogAPI metaWeblog.newPost Method发表到新空间,然后用MetaWeblogAPI blogger.deletePost Method将这id号的博文从旧空间中删去,重复进行,直到无法从旧空间里获取到博文。在程序实现借用了MSDN中的示例,为了防止网络故障之类以及做了备份,先是将获取博文内容写到本地文件,再进行删除。
程序中还要说明的是,由于live spaces服务器使用非标准的时间格式,造成用DateTime.Now和获取到的博文的dateCreated都是"1/1/0001 12:00:00 AM"的格式,这需要在Invoke方法调用前加上this.NonStandard = XmlRpcNonStandard.AllowNonStandardDateTime语句。还有需要用到CookComputing.XmlRpcV2.dll,它实现了.net 2.0版本的XML-RPC协议,己包含在文末的源码中。如果是.net 1.1,需要其他相应的文件,可具体参见http://www.xmlrpc.com/metaWeblogApi。
最后要提下的是,程序只用于我自己的空间迁移,再加上不懂C#,用户名和密码之类都硬编码了,MetaWeblog之类的方法也应能用于像cppblog之类用wordpress的博客空间。这些部分加之完善,应能做个博客搬家工具的。
参考:
文中的迁移工具源码下载
MDSN Windows Live Spaces SDKs
posted on 2008-09-24 21:50
len 阅读(2101)
评论(2) 编辑 收藏 引用 所属分类:
IT技术