JavaMetaweblogClient,Metaweblog的java實現-從此上傳部落格實現全平臺

Sxrhhh發表於2022-05-19

不知你是否會遇到下面這樣的情況:想要通過java上傳部落格,結果卻發現api的使用有些複雜。沒關係,這裡幫你解決了api的問題。在使用Metaweblog的時候,只需要呼叫網頁上同名的方法就好了,一鍵傳送命令,感受呼叫api的快感。

1. 什麼是Metaweblog?

Metaweblog是一個webservice,也就是在網路上使用的api。它基於xml-rpc實現。對於現存的部落格平臺,例如部落格園、開源中國、wordpress等都實現了metaweblog。通過這個api,你可以不登入網頁,直接通過一些程式來增刪查改你的部落格,上傳媒體檔案。

2. Metaweblog的應用

metaweblog的適用範圍不太廣,但是絕對能滿足於部落格管理的需要。通常,面對下面情況,你就可以使用metaweblog:

  • 你已經編輯好了一篇部落格,儲存為markdown檔案,想要快速上傳部落格;
  • 你想刪除一篇部落格;
  • 你想更新一篇部落格,但又不想複製並貼上全部;
  • 你用離線編輯器寫部落格,但是圖片又不想儲存在本地,想直接把圖片上傳到部落格伺服器裡面;

因此,metaweblog可以滿足你的需要

3. 如何使用Metaweblog

在使用本專案前,你首先需要了解一下metaweblog的原理以及如何使用。

目前,有關metaweblog的官網已經崩了,但是你仍然可以在這裡查到它的api。

image-20220519123223269

如圖所示,有很多的方法(函式)可供呼叫。顯然,你可以按照它的指示呼叫方法,實現部落格的增刪查改和媒體檔案的上傳。

在這張圖裡,我們看到的是部落格園的api呼叫介面,而別的網站則不一定有這樣的介面,但是你可以自己嘗試它們的api是否開放。下面是各大部落格網站的api地址

4. 本專案介紹

然而, 對於各種語言, metaweblog的實現也不一樣.因此,你需要去尋找各種語言的實現方法.在網上,你可以查到python如何實現metaweblog,C#更是有專門的api,極大地方便了使用者呼叫。那麼,java呢?很抱歉,網上有關java實現metaweblog的文章少之又少。為了解決這種情況,筆者做出了名為JavaMetaweblogClient的api,方便java愛好者去呼叫,去實現。

4.1 metaweblog與java之間的關係對映

如果你看了api的介紹,你就會知道,這個api是給多個語言使用的,所以很多的資料型別java都沒有。那麼我們就需要一個對映表。本專案通過apachexmlrpc實現,所以我們可以檢視他的官方文件

image-20220519125713720

這些就是你要去了解的。其中,struct的型別對應到java裡面是Map<String,Object>。但是你並不需要如此,在本專案中,我已經將struct打包成了一個類物件,例如Post,裡面的成員變數就是dateTime description title categories四個.需要用的時候就依次把變數填入即可。

這時,你在使用這些方法時就會更加的得心應手。

4.2 使用JavaMetaweblogClient

本專案本質上只實現了Client,但是很明顯我們只需要client,伺服器的事由部落格方來幹。那麼我們就要來了解一下如何使用api。

開啟本專案的java文件,你會看見Client類上有教程,但是在這裡我還是會再打一遍。

使用方法大致分為以下三步:(以新建一個部落格文章為例)

  1. 你要建立一個Client物件
  2. 準備好引數
  3. 上傳命令,並處理異常

這裡我們以newPost方法為例:

public static void newPostTest() {
   // 準備好命令所需引數(新建Post物件)
    Post post = new Post(new Date(), "# This is a post\n> You can see the Post\n", "Test");
    // 準備好返回值(自己看方法註釋的返回型別)
    String result = null;
    // 建立連線客戶端
    try {   // 自己解決丟擲的異常
        Client client = new Client("https://www.cycode.club/xmlrpc.php");
        result = client.newPost("default", "S*******u", "******", post, false);
    } catch (MalformedURLException e) {
        e.printStackTrace();    // 一般為URL格式錯誤
    } catch (XmlRpcException e) {
        e.printStackTrace();    // 一般為引數不全、伺服器錯誤、URL輸入錯誤
    }
    // 輸出結果
    System.out.println(result);
    }

其中的核心程式碼只有一條:

result = client.newPost("default", "S*****u", "*****", post, false);

至於其他的程式碼,通常IDE會自己生成,以及提醒你引數的填入。其中Post引數需要直接填入本專案已建立好的Post類,而不是自己寫一個Map<String,Object>.

5. 最後的話

作為新手程式設計師和他的第一個api,有很多的資訊都在javadoc文件裡。如果有什麼問題,儘量去檢視docs文件,有很多位置都可以檢視文件。

  1. 下載使用的jar包內的docs資料夾
  2. github上的專案地址中的docs資料夾
  3. docs資料夾的託管地址(推薦,更新的最快)

FAQ

  1. Q:目前程式有什麼已知的問題嗎?

    A:本專案就是apache的xmlrpc實現的套殼,如果有什麼問題,大多是xmlrpc的問題,畢竟現在用xmlrpc的人已經很少了。

    不過,我依舊發現瞭如下問題:

    • getPost方法與wordpress上的editor.md外掛衝突
  2. Q:我想知道哪裡有詳細的教程。

    A:本人是新手程式設計師,管理教程會非常的麻煩,但我大量的幫助文件都寫死在程式裡了,檢視javadoc文件獲得的資訊會比在這裡大得多。可以檢視本文件第五項檢視javadoc地址。

聯絡我

相關文章