加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

使用MetaWeblog接口来同步多个Blog

发布时间:2020-12-17 02:11:54 所属栏目:安全 来源:网络整理
导读:? 很多人有多个Blog,老是到处Ctrl+C Ctrl+V得绝非我等懒人所为。同步多个Blog,很轻易想到了运用Webservice。技术虽然简单,但有一个前提,需要博客运营方支持。 随着XML-RPC的越来越流行,MetaWeblog几乎成了目前最流行的离线Blog发送API.其能通过标准化的

?

很多人有多个Blog,老是到处Ctrl+C Ctrl+V得绝非我等懒人所为。同步多个Blog,很轻易想到了运用Webservice。技术虽然简单,但有一个前提,需要博客运营方支持。

随着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,bool publish);

??? [XmlRpcMethod("metaWeblog.getPost")]
??? Post GetPost(string postid,string password);

??? [XmlRpcMethod("metaWeblog.getCategories")]
??? CategoryInfo[] GetCategories(string blogid,string password);

??? [XmlRpcMethod("metaWeblog.getRecentPosts")]
??? Post[] GetRecentPosts(string blogid,int numberOfPosts);

??? [XmlRpcMethod("metaWeblog.newMediaObject")]
??? MediaObjectInfo NewMediaObject(string blogid,
??????? MediaObject mediaObject);

??? #endregion

??? #region Blogger API

??? [XmlRpcMethod("blogger.deletePost")]
??? [return: XmlRpcReturnValue(Description = "Returns true.")]
??? bool DeletePost(string key,string postid,bool publish);

??? [XmlRpcMethod("blogger.getUsersBlogs")]
??? BlogInfo[] GetUsersBlogs(string key,string password);

??? [XmlRpcMethod("blogger.getUserInfo")]
??? UserInfo GetUserInfo(string key,string password);

??? #endregion
}

使用时只需建立一个类,MetaWeblog 实现其接口的相应方法就行了,这样客户端通过访问之即可post blog了

public class MetaWeblog : XmlRpcService,IMetaWeblog
? {。。。。}

给一个写blog的方法

string IMetaWeblog.AddPost(string blogid,
??? 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,bool publish);

????? [XmlRpcMethod("metaWeblog.getCategories")]
????? CategoryInfo[] GetCategories(string blogid,string password);

????? [XmlRpcMethod("metaWeblog.newMediaObject")]
????? MediaObjectInfo NewMediaObject(string blogid,
????????? MediaObject mediaObject);

????? #endregion

? }

调用非常简单 以下给出AddPost方法的实现

string IMetaWeblog.AddPost(string blogid,
? 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步,我们便能轻易发送www.dumuzi.cn上的blog同时让其转发其他Blog了

这篇Blog就同时在www.dumuzi.cn www.csdn.net www.cnblogs.com 3blog上发布。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读