JavaMetaweblogClient,Metaweblog的java實現-從此上傳博客實現全平臺

来源:https://www.cnblogs.com/sxrhhh/archive/2022/05/19/16288213.html
-Advertisement-
Play Games

個人學習筆記總結。Basic Types、Strings、Arrays, Slices, and Maps、Control Statements、Declarations & Types、Formatted & File I/O、 Functions, Parameters、Defer、Closur... ...


目錄

不知你是否會遇到下麵這樣的情況:想要通過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地址。

聯繫我


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • JSP:全拼寫:java Server pages:java 伺服器端頁面 可以理解為一個特殊的頁面:可以定義html代碼也可以定義java的代碼 定義:JSP是簡化Servlet編寫的一種技術,它將Java代碼和HTML語句混合在同一個文件中編寫,只對網頁中的要動態產生的內容採用Java代碼來編寫... ...
  • 卸載redis # 查詢redis進程 ps -ef | grep redis # 關閉進程 kill -9 6379 # 停止redis-cli redis-cli shutdown # 刪除local目錄下與redis相關的文件 rm -rf /usr/local/bin/redis-* 安裝r ...
  • 異常 異常定義 異常是運行過程中出現的錯誤 人為錯誤:填寫錯誤等 隨機錯誤:網路中斷、記憶體耗盡等 一個健壯的程式必須處理各種各樣的錯誤 Java的異常是class Object Throwable Error OutOfMemoryError Exception RuntimeException N ...
  • 一、反射 《java核心技術》 官方套話:能夠分析類能力的程式成為反射。 又通過網上搜索有這句話:反射指程式可以訪問、檢測和修改它本身狀態或行為的一種能力。 反射是用來乾什麼的呢? “明明我自己能直接new一個對象,為什麼它要繞一個圈子,先拿到Class對象,再調用Class對象的方法來創建對象呢, ...
  • #包機制 包就是裝代碼的文件夾。 為了更好地組織類,JAVA提供了包機制,用於區別類名的組織空間。 ##package 包語句的句法格式為: 一般利用公司功能變數名稱倒置作為包名。 ##import 為了使用某個包的成員,需要在JAVA程式中明確導入該包。使用import語句可以完成此功能。 import必 ...
  • 轉自:https://www.evanlin.com/maglev/ 2016 年 6 月 2 日 前言(為什麼想讀這一篇論文) 這一篇論文吸引我註意的原因是,Consistent Hashing本來的特性就是作為分散式緩存之用。谷歌將他們的負載均衡器(代號:Maglev)發佈他的實作方式,裡面將一 ...
  • 文章已收錄至https://lichong.work,轉載請註明原文鏈接。 ps:歡迎關註公眾號“Fun肆編程”或添加我的私人微信交流經驗🤝 一.Nginx安裝配置及常用命令 1.環境搭建 首先在linux系統下安裝gcc編譯環境,執行: yum install gcc-c++ -y 確保當前系統 ...
  • 來源:blog.csdn.net/qq_15371293/article/details/117090780 項目場景: ClickHouse 操作基於 Mybatis-puls源碼擴展開發。解決ClickHouse的修改和刪除 SQL操作與Mysql不相同。 基於 Mybatis-puls: up ...
一周排行
    -Advertisement-
    Play Games
  • 概述:在C#中,++i和i++都是自增運算符,其中++i先增加值再返回,而i++先返回值再增加。應用場景根據需求選擇,首碼適合先增後用,尾碼適合先用後增。詳細示例提供清晰的代碼演示這兩者的操作時機和實際應用。 在C#中,++i 和 i++ 都是自增運算符,但它們在操作上有細微的差異,主要體現在操作的 ...
  • 上次發佈了:Taurus.MVC 性能壓力測試(ap 壓測 和 linux 下wrk 壓測):.NET Core 版本,今天計劃準備壓測一下 .NET 版本,來測試並記錄一下 Taurus.MVC 框架在 .NET 版本的性能,以便後續持續優化改進。 為了方便對比,本文章的電腦環境和測試思路,儘量和... ...
  • .NET WebAPI作為一種構建RESTful服務的強大工具,為開發者提供了便捷的方式來定義、處理HTTP請求並返迴響應。在設計API介面時,正確地接收和解析客戶端發送的數據至關重要。.NET WebAPI提供了一系列特性,如[FromRoute]、[FromQuery]和[FromBody],用 ...
  • 原因:我之所以想做這個項目,是因為在之前查找關於C#/WPF相關資料時,我發現講解圖像濾鏡的資源非常稀缺。此外,我註意到許多現有的開源庫主要基於CPU進行圖像渲染。這種方式在處理大量圖像時,會導致CPU的渲染負擔過重。因此,我將在下文中介紹如何通過GPU渲染來有效實現圖像的各種濾鏡效果。 生成的效果 ...
  • 引言 上一章我們介紹了在xUnit單元測試中用xUnit.DependencyInject來使用依賴註入,上一章我們的Sample.Repository倉儲層有一個批量註入的介面沒有做單元測試,今天用這個示例來演示一下如何用Bogus創建模擬數據 ,和 EFCore 的種子數據生成 Bogus 的優 ...
  • 一、前言 在自己的項目中,涉及到實時心率曲線的繪製,項目上的曲線繪製,一般很難找到能直接用的第三方庫,而且有些還是定製化的功能,所以還是自己繪製比較方便。很多人一聽到自己畫就害怕,感覺很難,今天就分享一個完整的實時心率數據繪製心率曲線圖的例子;之前的博客也分享給DrawingVisual繪製曲線的方 ...
  • 如果你在自定義的 Main 方法中直接使用 App 類並啟動應用程式,但發現 App.xaml 中定義的資源沒有被正確載入,那麼問題可能在於如何正確配置 App.xaml 與你的 App 類的交互。 確保 App.xaml 文件中的 x:Class 屬性正確指向你的 App 類。這樣,當你創建 Ap ...
  • 一:背景 1. 講故事 上個月有個朋友在微信上找到我,說他們的軟體在客戶那邊隔幾天就要崩潰一次,一直都沒有找到原因,讓我幫忙看下怎麼回事,確實工控類的軟體環境複雜難搞,朋友手上有一個崩潰的dump,剛好丟給我來分析一下。 二:WinDbg分析 1. 程式為什麼會崩潰 windbg 有一個厲害之處在於 ...
  • 前言 .NET生態中有許多依賴註入容器。在大多數情況下,微軟提供的內置容器在易用性和性能方面都非常優秀。外加ASP.NET Core預設使用內置容器,使用很方便。 但是筆者在使用中一直有一個頭疼的問題:服務工廠無法提供請求的服務類型相關的信息。這在一般情況下並沒有影響,但是內置容器支持註冊開放泛型服 ...
  • 一、前言 在項目開發過程中,DataGrid是經常使用到的一個數據展示控制項,而通常表格的最後一列是作為操作列存在,比如會有編輯、刪除等功能按鈕。但WPF的原始DataGrid中,預設只支持固定左側列,這跟大家習慣性操作列放最後不符,今天就來介紹一種簡單的方式實現固定右側列。(這裡的實現方式參考的大佬 ...