随着XML-RPC的越来越流行,MetaWeblog接口几乎成了目前最流行的离线Blog发送API.其能通过标准化的webservice接口,对任意blog进行添删改。目前,使用MetaWeblog接口发布离线博客客户端中流行的还是windows live writer。这里可以找到一些相关的设置方法。

话说回来,如何用metaweblog接口同步多个blog呢?当然你可以直接建立多个account来处理,但明显繁琐,也不符合我们diy的个性。
由于我自己个人Blog是完全自己写的,于是就不由想到了写一个metaweblog接口能使windows live writer连接上www.dumuzi.cn,再次它之上又增加了转发模块,转发其他Blog,一举多得。
调用
调用MetaWeblog接口我用到了XML-RPC.NET,一个开源的.Net 库,用于处理XML-RPC。
相关的调用非常简单,网上也能找到相应的demo。只要实现IMetaWeblog接口中MetaWeblog 和Blogger 对应的api就行了。
接口
- public interface IMetaWeblog
 - {
 - #region MetaWeblog API
 - [XmlRpcMethod("metaWeblog.newPost")]
 - string AddPost(string blogid, string username, string password, Post post, bool publish);
 - [XmlRpcMethod("metaWeblog.editPost")]
 - bool UpdatePost(string postid, string username, string password, Post post, bool publish);
 - [XmlRpcMethod("metaWeblog.getPost")]
 - Post GetPost(string postid, string username, string password);
 - [XmlRpcMethod("metaWeblog.getCategories")]
 - CategoryInfo[] GetCategories(string blogid, string username, string password);
 - [XmlRpcMethod("metaWeblog.getRecentPosts")]
 - Post[] GetRecentPosts(string blogid, string username, string password, int numberOfPosts);
 - [XmlRpcMethod("metaWeblog.newMediaObject")]
 - MediaObjectInfo NewMediaObject(string blogid, string username, string password,
 - MediaObject mediaObject);
 - #endregion
 - #region Blogger API
 - [XmlRpcMethod("blogger.deletePost")]
 - [return: XmlRpcReturnValue(Description = "Returns true.")]
 - bool DeletePost(string key, string postid, string username, string password, bool publish);
 - [XmlRpcMethod("blogger.getUsersBlogs")]
 - BlogInfo[] GetUsersBlogs(string key, string username, string password);
 - [XmlRpcMethod("blogger.getUserInfo")]
 - UserInfo GetUserInfo(string key, string username, string password);
 - #endregion
 - }
 - 使用时只需建立一个类,MetaWeblog 实现其接口的相应方法就行了,这样客户端通过访问之即可post blog了
 - public class MetaWeblog : XmlRpcService, IMetaWeblog
 - {。。。。}
 
给一个写blog的方法
- string IMetaWeblog.AddPost(string blogid, string username, string password,
 - Post post, bool publish)
 - {
 - if (ValidateUser(username, password))
 - {
 - ………………省略N行写入自己Blog的内容…………………
 - return postid;
 - }
 - else
 - {
 - throw new XmlRpcFaultException(0, "Keyword is not valid!");
 - }
 - }
 
值得注意的是,由于各blog的数据结构不同,可能导致部分接口调用时含义混淆,比如说string blogid原本是指通过GetUsersBlogs返回的当前用户的多个blog中对应的id,但某些blog却返回的是发送blog成功后返回的blog标记符,即postid
具体的可能需要根据不同blog具体分析。
转发
转发Blog则相对更为简单,只需定义个转发接口IMetaWeblogPost 即可
- public interface IMetaWeblogPost : IXmlRpcProxy
 - {
 - #region MetaWeblog API
 - [XmlRpcMethod("metaWeblog.newPost")]
 - string AddPost(string blogid, string username, string password, Post post, bool publish);
 - [XmlRpcMethod("metaWeblog.getCategories")]
 - CategoryInfo[] GetCategories(string blogid, string username, string password);
 - [XmlRpcMethod("metaWeblog.newMediaObject")]
 - MediaObjectInfo NewMediaObject(string blogid, string username, string password,
 - MediaObject mediaObject);
 - #endregion
 - }
 
调用非常简单 以下给出AddPost方法的实现
- string IMetaWeblog.AddPost(string blogid, string username, string password,
 - Post post, bool publish)
 - {
 - ………………省略N行写入自己Blog的内容…………………
 - if (true)//判断需要转发
 - {
 - try
 - {
 - weblogpost.Url = "http://www.cnblogs.com/yourname/services/metaweblog.aspx";
 - weblogpost.AddPost(blogid, name, password, post, publish);
 - }
 - catch
 - {
 - throw new XmlRpcFaultException(0, "cnblogs sent failed!");
 - }
 - }
 - }
 
当然你可以定义一些比如同步删除,同步修改之类的功能使用。
通过以上2步,我们便能轻易通过MetaWeblog接口发送自己的blog同时让其转发其他Blog了
                当前名称:浅析利用MetaWeblog接口同步多个博客
                
                标题网址:http://www.csdahua.cn/qtweb/news3/363953.html
            
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网