使用metaWebBlog接口实现博客文章同步

0. 背景

想实现自己的文章一处编写,多处发布到各大平台(比如博客园,CSDN)等要怎么实现呢。需要由这些组成:

  1. 文章管理:一个管理文章知识的平台(网站),在这里撰写,编辑文章。比如:写博客的客户端软件,博客园等。
  2. 第三方网站(平台)具有开放的 API 接口,比如博客园的metaWebBlog。
  3. 同步服务:读取文章,调开放的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 发送方式

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

posted on 2022-05-14 16:29  springsnow  阅读(614)  评论(0编辑  收藏  举报

导航