浅析利用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
總結
以上是生活随笔為你收集整理的浅析利用MetaWeblog接口同步多个博客的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux下rpm方式安装mysql5.
- 下一篇: 修改最低版本minSdkVersion(