浅析利用MetaWeblog接口同步多个博客

随着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了

原文地址:http://www.jianfangkk.com/aspnet/201510/286

转载于:https://www.cnblogs.com/jianfangkk/p/5107958.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值