使用metaWebBlog接口实现博客文章同步
2020-03-27 本文已影响0人
张云飞Vir
0. 背景
想实现自己的文章一处编写,多处发布到各大平台(比如博客园,CSDN)等要怎么实现呢。需要由这些组成:
- 文章管理:一个管理文章知识的平台(网站),在这里撰写,编辑文章。比如:写博客的客户端软件,博客园等。
- 第三方网站(平台)具有开放的 API 接口,比如博客园的metaWebBlog。
- 同步服务:读取文章,调开放的API,将文章发布出去。
一般来说,写文章的软件很容易获得,如果目标平台再有开放接口,我们可以将文章通过接口进行发布。
博客园支持 metaWebBlog 接口,使得可以接收来自 接口 的文章
1. metaWebBlog 概述
MetaWeblog API(MWA)是一个Blog程序接口标准。通过MetaWeblog API,博客平台可以对外公布blog提供的服务,从而允许外面的程序新建,编辑,删除,发布bolg。
MetaWeblog 使用 xml-RPC 作为通讯协议。
XML-RPC是一个远程过程调用(远端程序呼叫)(remote procedure call,RPC)的分布式计算协议,通过XML将调用函数封装,并使用HTTP协议作为传送机制。一个XML-RPC消息就是一个请求体为xml的http-post请求,被调用的方法在服务器端执行并将执行结果以xml格式编码后返回。
简单理解就是:在 HTTP请求 中,发送 xml 格式描述的“调用指令”,如果调用成功,会收到 xml格式描述的“执行结果”。
2. 博客园文章相关接口:
- blogger.getUsersBlogs —— 获取用户博客信息
- metaWeblog.getRecentPosts —— 获取最近的文章
- metaWeblog.getPost —— 获取文章内容
- metaWeblog.newPost —— 添加文章
- metaWeblog.editPost —— 编辑文章
- blogger.deletePost —— 删除文章
还有一些关于 文章分类 的接口,可以在其接口文档中找到。
2.1 接口说明
在 博客园 设置页面的地步可以找到 API接口的说明,类似这样:
https://rpc.cnblogs.com/metaweblog/{userName}
上面的 {userName} 替换成实际的用户名。
下文仅说明“请求的接口和参数”,响应内容在发送成功后一看便知。
2.2 发送方式
- HTTP 请求
- POST方式到: https://rpc.cnblogs.com/metaweblog/{userName}
- 请求中的内容是HTML格式,描述了调用参数
2.3 接口协议
2.3.1 获取用户博客信息
- 功能:获取用户博客信息
- 方法名: blogger.getUsersBlogs
- 参数:见下文代码
示例:
<?xml version="1.0"?>
<methodCall>
<methodName>blogger.getUsersBlogs</methodName>
<params>
<param>
<value><string></string></value>
</param>
<param>
<value><string>{userName}</string></value>
</param>
<param>
<value><string>{password}</string></value>
</param>
</params>
</methodCall>
2.3.2 获取最近的文章
- 功能:获取最近的文章
- 方法名: metaWeblog.getRecentPosts
- 参数:见下文代码
<?xml version="1.0"?>
<methodCall>
<methodName>metaWeblog.getRecentPosts</methodName>
<params>
<param>
<value><string>000000</string></value>
</param>
<param>
<value><string>{userName}</string></value>
</param>
<param>
<value><string>{password}</string></value>
</param>
<param>
<value><i4>1</i4></value>
</param>
</params>
</methodCall>
2.3.3 获取文章内容
- 功能:获取文章内容
- 方法名: metaWeblog.getPost
- 参数:见下文代码
<?xml version="1.0"?>
<methodCall>
<methodName>metaWeblog.getPost</methodName>
<params>
<param>
<value><string>{postid}</string></value>
</param>
<param>
<value><string>{userName}</string></value>
</param>
<param>
<value><string>{password}</string></value>
</param>
</params>
</methodCall>
2.3.4 添加文章
- 功能:添加文章
- 方法名: metaWeblog.newPost
- 参数:见下文代码
<?xml version="1.0"?>
<methodCall>
<methodName>metaWeblog.newPost</methodName>
<params>
<param>
<value><string></string></value>
</param>
<param>
<value><string>{userName}</string></value>
</param>
<param>
<value><string>{password}</string></value>
</param>
<param>
<value>
<struct>
<member>
<name>description</name>
<value>
<string>博客测试内容</string>
</value>
</member>
<member>
<name>title</name>
<value>
<string>标题测试内容</string>
</value>
</member>
<member>
<name>categories</name>
<value>
<array>
<data>
<value>
<string>[Markdown]</string>
</value>
</data>
</array>
</value>
</member>
</struct>
</value>
</param>
<param>
<value><boolean>0</boolean></value>
</param>
</params>
</methodCall>
2.3.5 编辑文章
- 功能:编辑文章
- 方法名: metaWeblog.editPost
- 参数:见下文代码
<?xml version="1.0"?>
<methodCall>
<methodName>metaWeblog.editPost</methodName>
<params>
<param>
<value><string>{postid}</string></value>
</param>
<param>
<value><string>{userName}</string></value>
</param>
<param>
<value><string>{password}</string></value>
</param>
<param>
<value>
<struct>
<member>
<name>description</name>
<value>
<string>博客测试内容222</string>
</value>
</member>
<member>
<name>title</name>
<value>
<string>标题测试内容222</string>
</value>
</member>
<member>
<name>categories</name>
<value>
<array>
<data>
<value>
<string>[Markdown]</string>
</value>
</data>
</array>
</value>
</member>
</struct>
</value>
</param>
<param>
<value><boolean>0</boolean></value>
</param>
</params>
</methodCall>
2.3.6 删除文章
- 功能:删除文章
- 方法名: blogger.deletePost
- 参数:见下文代码
<?xml version="1.0"?>
<methodCall>
<methodName>blogger.deletePost</methodName>
<params>
<param>
<value><string></string></value>
</param>
<param>
<value><string>{postid}</string></value>
</param>
<param>
<value><string>{userName}</string></value>
</param>
<param>
<value><string>{password}</string></value>
</param>
<param>
<value><boolean>0</boolean></value>
</param>
</params>
</methodCall>
4. 参考资料:
这篇文章很详细的介绍了接口:
https://www.cnblogs.com/caipeiyu/p/5354341.html
https://zh.wikipedia.org/wiki/XML-RPC
http://www.cnblogs.com/services/metablogapi.aspx
END