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

鉴客 发布于 2011/12/27 08:50
阅读 156
收藏 1

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的正式版吧

加载中
返回顶部
顶部