Metaweblog在Android上使用

同步發表於http://avenwu.net/2015/02/04/metaweblogjava

metaweblog是一個博客接口協議,目前主流的博客平臺均支持該協議,好比博客園,CSDN,WordPress等。經過約定的協議能夠不用登錄相應博客網站,直接用pc客戶端直接發佈博客文章。
在android上固然也可使用,利用xml-rpc的java實現庫org.apache.xmlrpc:xmlrpc-client能夠實現通訊。android

配置

首先下載xmprpc及其依賴庫,這裏我用的是gradle管理依賴庫:web

compile ('org.apache.xmlrpc:xmlrpc-client:3.1.3'){
    exclude module: 'xml-apis'
}

因爲xml-apis已經包含在android核心框架內,所以爲了不重複的依賴手動聲明不包含便可。
另外若是你的項目使用了其餘的三方庫,可能還會有一些錯誤,好比META-INF中的文件衝突:apache

packagingOptions {
    exclude 'META-INF/DEPENDENCIES'
    exclude 'META-INF/LICENSE'
    exclude 'META-INF/NOTICE'
}

通常都比較好處理直接根據錯誤信息作相應調整;api

使用

關於博客平臺支持的協議接口通常均可以在官網找到入口,這裏以博客園爲例:框架

http://www.cnblogs.com/services/metaweblog.aspx#Postpost

主要是對博客的增刪查改幾個藉口比較重要:測試

  • blogger.deletePost
  • blogger.getUsersBlogs
  • metaWeblog.editPost
  • metaWeblog.getCategories
  • metaWeblog.getPost
  • metaWeblog.getRecentPosts
  • metaWeblog.newMediaObject
  • metaWeblog.newPost
  • wp.newCategory

利用xmlrpc能夠很方便的調用藉口,根據要求傳入不一樣的參數,下面有幾個測試接口:gradle

private XmlRpcClient getClient() throws MalformedURLException{
    XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl();
    config.setServerURL(new URL("http://www.cnblogs.com/avenwu/services/metablogapi.aspx"));
    XmlRpcClient client = new XmlRpcClient();
    client.setConfig(config);
    return client;
}
public void testMetaWeblogGetCategories() throws MalformedURLException, XmlRpcException{
    Object data = getClient().execute("metaWeblog.getCategories", new Object[]{"test", "你的用戶名", "你的密碼"});
    CategoryInfo[] result = Parser.parseCategory(data);
    Log.d("testMetaWeblog", result.toString());
}
public void testMetaWeblogGetPost() throws MalformedURLException, XmlRpcException{
    Object data = getClient().execute("metaWeblog.getRecentPosts", new Object[]{"test","你的用戶名","你的密碼", 10});
    Post[] result = Parser.parseRecentPost(data);
    Log.d("testMetaWeblog", result.toString());
}
public void testMetaWeblogGetUsesBlogs() throws MalformedURLException, XmlRpcException{
    Object data = getClient().execute("blogger.getUsersBlogs", new Object[]{"test","你的用戶名","你的密碼"});
    BlogInfo[] result = Parser.parseBloInfo(data);
    Log.d("testMetaWeblog", result.toString());
}

public void testMetaWeblogNewPost()  throws MalformedURLException, XmlRpcException{
    Object data = getClient().execute("metaWeblog.newPost", new Object[]{"用戶id","你的用戶名","你的密碼", getPost(), false});
    Log.d("testMetaWeblog", data.toString());
}
public Map<String, Object> getPost(){
    Map<String, Object> post = new HashMap<String, Object>();
    post.put("dateCreated", Calendar.getInstance().getTime());
    post.put("description","#Test Post with metaweblog");
    post.put("title", "Test");
    return post;
}

public void testMetaWeblogDeletePost()  throws MalformedURLException, XmlRpcException {
    Object data = getClient().execute("blogger.deletePost", new Object[]{"test","文章id","你的用戶名","你的密碼", false});
    Log.d("testMetaWeblog", data.toString());
}

小結

相關資料不是不少,可是使用上其實並不難,由於apache已經作了封裝。網站

參考

  1. http://www.ibm.com/developerworks/library/x-metablog/
  2. http://www.cnblogs.com/services/metaweblog.aspx#Post
相關文章
相關標籤/搜索