美文网首页
使用metaWebBlog接口实现博客文章同步

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

作者: 张云飞Vir | 来源:发表于2020-03-27 10:17 被阅读0次

    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

    END

    相关文章

      网友评论

          本文标题:使用metaWebBlog接口实现博客文章同步

          本文链接:https://www.haomeiwen.com/subject/xofhuhtx.html