JavaMetaweblogClient,Metaweblog的java实现-从此上传博客实现全平台
不知你是否会遇到下面这样的情况:想要通过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。

如图所示,有很多的方法(函数)可供调用。显然,你可以按照它的指示调用方法,实现博客的增删查改和媒体文件的上传。
在这张图里,我们看到的是博客园的api调用界面,而别的网站则不一定有这样的界面,但是你可以自己尝试它们的api是否开放。下面是各大博客网站的api地址
博客园:https://rpc.cnblogs.com/metaweblog/你的用户名,你可以在你的后台设置里查看有关设置
网易(163):http://os.blog.163.com/word/
typecho 博客:http://xx.com/action/xmlrpc,其中 xx.com 为你的博客网址。如果 typecho 还没有进行 urlrewrite,则为 http://xx.com/index.php/action/xmlrpc
新浪博客: http://upload.move.blog.sina.com.cn/blog_rebuild/blog/xmlrpc.php 新浪博客的 API 已关闭了
CSDN: http://write.blog.csdn.net/xmlrpc/index,可惜CSDN的api也关闭了
自建wordpress博客: http://www.example.com/xmlrpc.php,其中
www.example.com是你的网站地址域名.
4. 本项目介绍
然而, 对于各种语言, metaweblog的实现也不一样.因此,你需要去寻找各种语言的实现方法.在网上,你可以查到python如何实现metaweblog,C#更是有专门的api,极大地方便了使用者调用。那么,java呢?很抱歉,网上有关java实现metaweblog的文章少之又少。为了解决这种情况,笔者做出了名为JavaMetaweblogClient的api,方便java爱好者去调用,去实现。
4.1 metaweblog与java之间的关系映射
如果你看了api的介绍,你就会知道,这个api是给多个语言使用的,所以很多的数据类型java都没有。那么我们就需要一个映射表。本项目通过apache 的xmlrpc实现,所以我们可以查看他的官方文档

这些就是你要去了解的。其中,struct的类型对应到java里面是Map<String,Object>。但是你并不需要如此,在本项目中,我已经将struct打包成了一个类对象,例如Post,里面的成员变量就是dateTime description title categories四个.需要用的时候就依次把变量填入即可。
这时,你在使用这些方法时就会更加的得心应手。
4.2 使用JavaMetaweblogClient
本项目本质上只实现了Client,但是很明显我们只需要client,服务器的事由博客方来干。那么我们就要来了解一下如何使用api。
打开本项目的java文档,你会看见Client类上有教程,但是在这里我还是会再打一遍。
使用方法大致分为以下三步:(以新建一个博客文章为例)
- 你要创建一个Client对象
- 准备好参数
- 上传命令,并处理异常
这里我们以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文档,有很多位置都可以查看文档。
FAQ
Q:目前程序有什么已知的问题吗?
A:本项目就是apache的xmlrpc实现的套壳,如果有什么问题,大多是xmlrpc的问题,毕竟现在用xmlrpc的人已经很少了。
不过,我依旧发现了如下问题:
- getPost方法与wordpress上的editor.md插件冲突
Q:我想知道哪里有详细的教程。
A:本人是新手程序员,管理教程会非常的麻烦,但我大量的帮助文档都写死在程序里了,查看javadoc文档获得的信息会比在这里大得多。可以查看本文档第五项查看javadoc地址。
联系我
- email: hhhsxr@qq.com
- QQ: 1914913486
- 博客园: https://www.cnblogs.com/sxrhhh
- github: https://github.com/cycode0527
- 个人网站: https://www.sxrhhh.top(还在实验中)
JavaMetaweblogClient,Metaweblog的java实现-从此上传博客实现全平台的更多相关文章
- word上传博客教程
目前大部分的博客作者在写博客这件事情上都会遇到以下3个痛点:1.所有博客平台关闭了文档发布接口,用户无法使用Word,Windows Live Writer等工具来发布博客.2.发布到博客或公众号平台 ...
- 使用hexo在GitHub上无法上传博客
原以为是秘钥或者其他错误,后来发现是邮箱设置的问题 在GitHub的你账号网页上右上角,个人的登录退出的位置,找到setting: setting->emails->Keep my ema ...
- HTML本地测试成功后上传博客注意事项
需要注意不要跟博客已经存在的样式(CSS)或功能(JavaScript)起冲突 功能名一定不要一样 样式名尽量不一样 如果样式名一样,存在属性名的对应属性值尽量跟博客内相同
- 在github上搭建博客的问题
最近想到要建立一个自己的博客,以便记录自己在学习中遇到的问题.发现github免费提供空间,正好可以利用它来搭建自己的博客.毕竟github pages免费空间,不限制流量,每次的博客改动和博客模板的 ...
- java进行文件上传,带进度条
网上看到别人发过的一个java上传的代码,自己写了个完整的,附带源码 项目环境:jkd7.tomcat7. jar包:commons-fileupload-1.2.1.jar.commons-io-1 ...
- JAVA 实现FTP上传下载(sun.net.ftp.FtpClient)
package com.why.ftp; import java.io.DataInputStream; import java.io.File; import java.io.FileInputSt ...
- Java Web文件上传
参考资料:http://www.cnblogs.com/xdp-gacl/p/4200090.html 一.问题描述 Java Web文件上传需要借助一些第三方库,常用的是借助Apache的包,有两个 ...
- java多图片上传--前端实现预览--图片压缩 、图片缩放,区域裁剪,水印,旋转,保持比例。
java多图片上传--前端实现预览 前端代码: https://pan.baidu.com/s/1cqKbmjBSXOhFX4HR1XGkyQ 解压后: java后台: <!--文件上传--&g ...
- Java中FTPClient上传中文目录、中文文件名乱码问题解决方法【好用】
转: Java中FTPClient上传中文目录.中文文件名乱码问题解决方法 问题描述: 使用org.apache.commons.net.ftp.FTPClient创建中文目录.上传中文文件名时,目录 ...
随机推荐
- ctfhub web 前置技能(请求方式、302跳转、Cookie)
第一题:请求方式 打开环境分析题目发现当前请求方式为GET 查看源码发现需要将请求方式改为CTFHUB就可以 使用bp抓包 发送到repeater模块修改请求方式 即可得到flag 第二题:302跳转 ...
- C语言杂谈
C语言程序处理过程 预处理:宏定义展开.头文件展开.条件编译,这里并不会检查语法 编译:检查语法,将预处理后文件编译生成汇编文件 汇编:将汇编文件生成目标文件(二进制文件) 链接:将目标文件链接为可执 ...
- ZEGO音视频服务的高可用架构设计与运营
前言: ZEGO 即构科技作为一家实时音视频的提供商,系统稳定性直接影响用户的主观体验,如何保障服务高可用且用户体验最优是行业面临的挑战,本文结合实际业务场景进行思考,介绍 ZEGO 即构在高可用架构 ...
- 底部footer挡住上面内容的bug
当设置底部footer的样式为: .footer{ position: fixed; height: 49px; bottom: 0; background: #fff; } 这样会挡住上面的内容,修 ...
- 【Java分享客栈】SpringBoot整合WebSocket+Stomp搭建群聊项目
前言 前两周经常有大学生小伙伴私信给我,问我可否有偿提供毕设帮助,我说暂时没有这个打算,因为工作实在太忙,现阶段无法投入到这样的领域内,其中有两个小伙伴又问到我websocket该怎么使用,想给自己的 ...
- Shiro+springboot+mybatis(md5+salt+散列)认证与授权-01
这个小项目包含了注册与登录,使用了springboot+mybatis+shiro的技术栈:当用户在浏览器登录时发起请求时,首先这一系列的请求会被拦截器进行拦截(ShiroFilter),然后拦截器根 ...
- 51单片机I/O引脚IO口工作原理
51单片机I/O引脚IO口工作原理 一.51单片机管脚p0.p1.p2.p3口区别如下: 1.意思不同P0口作输出口用时,需加上拉电阻.P0口有复用功能.当对外部存储器进行读写操作时,P0口先是提供外 ...
- mysql发展历程 各分支版本溯源
首先为什么要了解mysql的历史,了解一个软件的前生后世有时候还是很有必要,特别是对于走在架构之路或者是想深入了解一个软件的时候,在不同版本中由于进行了很多的改进或者说加入了新的功能,也有可能是软件本 ...
- 好用的表单验证工具 vuelidate
Vue validation(表单验证)--vuelidate 表单是用户那里收集的数据的工具.如果它没有收集到你需要的数据,或者收集到的数据不对,那么你的表单就没有达到它的目的.这就是为什么我们需要 ...
- 内存之旅——如何提升CMA利用率?
(以下内容来自开发者分享,不代表 OpenHarmony 项目群工作委员会观点) 宋远征 李佳伟 OpenAtom OpenHarmony(以下简称"OpenHarmony") ...