[转]给自己的Blog程序添加对Windows Live Writer的支持

[from http://sanyuexx.spaces.live.com/Blog/cns!BF32CCAAE...]
Windows Live Writer以及Xml-Rpc的介绍

Windows Live Writer是Microsoft推出的脱离浏览器的Blog编辑和发布的工具, 支持Html和简单的图片编辑上传, 使用它, 可以极大的方便Blog的编辑和发布. 现在Windows Live Writer对国外较大的Blog服务提供了支持, 如Live Spaces, Blogger等, 如果你没用使用支持列表里的服务却想使用Windows Live Writer的话, 只要给你的BLog添加相应的Xml-Rpc支持就可以了.

Xml-Rpc是类似WebService的一种远程调用服务, 但支持它的平台要比WebService要多, Windows Live Writer以及其他很多离线Blog编辑发布工具都是使用Xml-Rpc来调用Blog程序的相应方法.

本文以ASP.NET为例,给Blog添加对Windows Live Writer的Xml-Rpc的支持,让我们可以在Live Writer里面实现编辑, 发布和修改Blog条目, 如果你的Blog是使用其他平台的话, 请参看

http://www.xmlrpc.com/directory/1568/implementatio... 来查找如何在你的平台实现Xml-Rpc. 虽然在各平台实现Xml-Rpc的方法不同, 但是添加对Windows Live Writer支持的接口的步骤还是差不多的.

准备工作

对于ASP.NET平台, 首先在http://www.xml-rpc.net/ 下载对Xml-Rpc支持的组件, 解压缩后把bin文件夹中的 CookComputing.XmlRpcV2.dll 复制到ASP.NET程序的bin文件夹, 并且把interface文件夹中的 MetaWeblogAPI.cs 复制到App_Code文件夹(当然ASP.NET程序的其他文件夹也可以)..

开始

首先修改MetaWeblogAPI.cs文件, 这是Windows Live Writer支持的接口之一, 但是必须对它加一个方法才能正常的支持Windows Live Writer

添加一个struct:

public struct UserBlog { public string url; public string blogid; public string blogName; }

这是用来保存Blog信息的结构

然后再IMetaWeblog接口中添加一个方法:

[XmlRpcMethod("blogger.getUsersBlogs")] UserBlog[] getUsersBlogs(string appKey, string username, string password);

XmlRpcMethod指定的是在Xml-Rpc中的方法名, 这个不能改的..Client无法识别和调用

接口文件准备好了, 现在要实现接口的方法了

在添加在ASP.NET程序根目录添加一个ashx文件, 假设是Rpc.ashx, 下面提供一个Rpc.ashx的例子:

<%@ WebHandler Language="C#" Class="RPCService" %> <!--注册类--> <%@ Assembly Name="CookComputing.XmlRpcV2" %> <!--注册实现XmlRpc用的CookComputing.XmlRpcV2.dll--> using System; using System.Collections; using System.Web; using CookComputing.XmlRpc; //引入XmlRpc using CookComputing.MetaWeblog; //引入IMetaWeblog接口 using DataAccess; //引入你自己的Blog程序的数据访问namespace [XmlRpcService(Description = "MetaWeblog XML-RPC Service")] public class RPCService : XmlRpcService,IMetaWeblog { #region IMetaWeblog 成员 //获得Blog站点信息 public UserBlog[] getUsersBlogs(string appKey, string username, string password) { if (Login(username, password)) //验证用户名密码, 你必须在这个类中自己实现这个方法 { UserBlog blog = new UserBlog(); blog.blogid = ""; //就一个Blog, 这个不用 blog.blogName = "LifeBeta"; //BlogName, 随便写吧 blog.url = "http://aspspider.org/lifebeta/"; //Blog的网址 return new UserBlog[] { blog }; } return null; } //添加Blog public string newPost(string blogid, string username, string password, Post post, bool publish) { if (Login(username, password)) { //使用自己的DataAccess实现 return DataAccess.AddBlog(post.title, post.description, 4, "", false, DateTime.Now.AddHours(12)).ToString(); } return null; } //编辑Blog public object editPost(string postid, string username, string password, Post post, bool publish) { if (Login(username, password)) { //使用你自己的DataAccess来实现, 注意post.title是标题, post.description是Blog的内容 DataAccess.EditBlog(Convert.ToInt32(postid), post.title, post.description, 4, "", false); } return null; } //获取分类 public CategoryInfo[] getCategories(string blogid, string username, string password) { if (Login(username, password)) { //略 } return null; } //获取文章 public Post getPost(string postid, string username, string password) { if (Login(username, password)) { //略 } return new Post(); }

//获取最近发表的文章

public Post[] getRecentPosts(string blogid, string username, string password, int numberOfPosts) { if (Login(username, password)) { //略 } return null; } //发布媒体对象 public UrlData newMediaObject(string blogid, string username, string password, FileData file) { if (Login(username, password)) return new UrlData(); } return new UrlData(); } //自定义方法

public bool Login(string userName, string pass) { //略,用来验证用户 } #endregion }

OK..差不多就这样了..在浏览器里输入这个ashx看看, 有以上实现的方法列表和数据类型, 挺像WebService的本地测试页面吧. 不过Xml-Rpc不能本地测试. 你现在就可以用Windows Live Writer来试试它了.

使用Windows Live Writer发布Blog

和添加其他Blog站点一样, 不过在选择Blog服务的时候要选择MetaWeblog(Custom), script的地址填ashx文件的路径.

大功告成!  因为使用了别人做好的Xml-Rpc解决方案, 所以要实现它还是挺简单的. 由于Live Writer尚处于beta阶段, 还是有些不完善的地方, .. 期待Live Writer的正式版吧..

posted @ 2006-11-13 16:18  亮小猪  阅读(401)  评论(0编辑  收藏  举报