文章选自我的博客:https://blog.ljyngup.com/archives/578.html/

起因

为了给博客带来流量,我在CSDN,博客园,简书上开通了账号并且把博客里的一些可以发布的文章也在这些平台发布。

但是同时维护三个博客平台实在太麻烦了,一旦有个地方要修改,三个博客平台全部要修改。所以现在也基本没有同步发布了,但是我始终想实现博客平台同步发布,同步修改

于是开始研究博客园的发布文章接口,一开始自己抓包分析,发现实在麻烦。于是谷歌之,发现了Metaweblog这个非常好用的API

介绍

XML-RPC是一个远程过程调用(远程过程调用)(remote procedure call,RPC)的分布式计算协议,通过XML将调用函数封装,并使用HTTP协议作为发送机制。

XML-RPC发表于1998年,由UserLand Software(UserLand Software)的Dave Winer及Microsoft共同发表。后来在新的功能不断被引入下,这个标准慢慢演变成为今日的SOAP协议。

可见这个协议发布的非常早,它的官网停留在了2004年。关于这方面的资料非常少,只有在MSDN和博客园很早的文章中才能寻得一点蛛丝马迹。

可我们讲的是Metaweblog,为什么还要介绍XMLPRC?

MetaWeblog API(MWA)是一个编程接口,允许外部程序获取和设置weblog帖子的文本和属性。它建立在流行的XML-RPC通信协议之上,在许多流行的编程环境中都可以使用实现。

在2003年之际,很多的博客平台开始支持MetaWeblog API,允许第三方编辑器和内容管理器对博客进行编辑管理。

在现在,比如MWeb,Windows Live Writer的文章发布都是以这个API为基础的!

而这个API,就是9102年博客同步的关键所在!

接口介绍

折腾了两天,被博客园的一篇有小错误的文章搞得心态全崩,后来查了MSDN才可以成功请求。

以博客园为例,有这些接口

blogger.deletePost —— 删除文章
blogger.getUsersBlogs —— 获取用户博客信息
metaWeblog.editPost —— 编辑文章
metaWeblog.getCategories —— 获取用户博客分类
metaWeblog.getPost —— 获取文章
metaWeblog.getRecentPosts —— 获取最近的文章
metaWeblog.newMediaObject —— 添加媒体对象(图片等)
metaWeblog.newPost —— 添加文章
wp.newCategory —— 添加目录

我们主要用到的接口是getUsersBlogseditPostgetRecentPostsnewPost.

通过newPost循环多平台发布文章,editPost和getRecentPosts作为后续管理和编辑的方法。

而getUsersBlogs可用可不用,在一些平台上要通过此方法获取blogid才可以实现下面方法,但是博客园只要账号密码就可以实现。

不过这个方法可以获取用户名,对于工具的用户体验有帮助

实现过程

调试工具:精易网页助手
API接口地址:https://rpc.cnblogs.com/metaweblog/博客名
访问方法:POST
编码:UTF-8

1.blogger.getUsersBlogs

参数:
1)[string]xmlrpc_url(即上述API接口地址)
2)[string]username(博客园账号)
3)[string]pwd(博客园密码)

这一步为获取博主信息,上面说到这步其实可以省略,但是为了下面的工具编写,我们依旧演示。

可见我们成功获取了blogid和用户名(非博客名)

2.metaWeblog.newPost

参数:
1)[string]blogid(经过测试,此项被忽略但是不能删去对应标签)
2)[string]username
3)[string]pwd
4)[struct]Post(此项是一个结构,具体参考文末的博客园文档)
5)[bool]publish(是否发布.1为发布,0为不发布)

这里吐槽两句,博客园的一篇文章给了这个方法的示例,但是我请求时总是显示Request from client does not contain valid XML.但是我提交的XML没有错误,直到找到了MSDN上的一个示例,猛地看到encoding。
没错,post提交信息必须以UTF-8编码,之前一直以gb2312提交,永远提示错误。当然,如果不提交中文,编码随意~

演示:

显示的字符串说明发布成功,字符串为该文章的postid

博客页面:

发布成功,URL地址的最后就是刚刚获取到的postid,内容也是刚刚提交的内容。

最重要的一步,也是坑我最久的一步搞定~

3.metaWeblog.getRecentPosts

参数:
1)[string]blogid(ignored)
2)[string]username
3)[string]pwd
4)[int]numberOfPosts(获取文章的数量)

这个是接下来我做工具想要的一个功能,用于查看是否同步到最新文章

演示(解析树很长,截不完整,是对的):

4.metaWeblog.editPost

用法同newPost只是要加一个postid的参数,这个在getRecentPost中可以获取到~

一点总结

这是一个非常有用的接口,已知国内CTO,博客园,开源中国都支持此方法发布文章。那么就可以写出一个博客同步发表工具,作为独立博客流量的入口,提高了同步效率!

参考文章

这次参考的文章感觉都是2000年时代的,自己一点点查文档研究也是不容易了……

MetaWebLog API — 一个多平台文章同步的思路的更多相关文章

  1. 基于Metaweblog API 接口一键发布到国内外主流博客平台

    之前的生活 之前一直使用evenote写博客和日志,其实还是挺方便的.但是我一直都希望能够同步到国内的博客和国外的blogspot等主流博客平台.而强大everote只提供了facebook.twit ...

  2. 分享一个开源免费、目前最好的API接口管理平台----eoLinker

    一.概况 eoLinker 是目前业内领先.国内最大的在线 API 接口管理平台,提供自动生成 API 文档.API 自动化测试.Mock 测试.团队协作等功能,旨在解决由于前后端分离导致的开发效率低 ...

  3. Typora--终于找到一个能够解决将csdn文章同步到hexo的完美编辑器(解决csdn图片防盗链导致无法直接复制文章的问题)。

    文章目录 需求 背景 新宠 告诉我,我的名字叫什么?大声点我听不见~ 页面 神奇之处 看得见的优点 如何设置项目根目录 如何显示图片? 于是最终操作流程 个人博客:https://mmmmmm.me ...

  4. 转 MetaWeblog API 编写

    如今,许多人都熟悉个人和公司或业界主办的博客.后者明显成为了传统公司和行业网站的下一代新兴产物.博客的内容涉及从简洁的特制产品公告和公共关系到实用且深刻的主题探索,这些主题可能对公司的产品或行业的未来 ...

  5. iOS 版 MWeb 发布到自建 Wordpress 和 Metaweblog API 使用指南

    MWeb 的发布服务的使用方法是先增加发布服务,再使用.在 iOS 中,要增加发布服务,可以在首页中,点左上角的 "设置" 按钮,进入设置界面,并滑动到底部,就会看到增加发布服务的 ...

  6. MWeb 1.3.7 发布!增加发布到 Wordpress 等支持 MetaWeblog API 的服务,如:Wordpress 博客、新浪博客、cnblogs、oschina。

    MWeb 1.3.7 版的新功能 增加发布到 Wordpress 等支持 Metaweblog API 的服务,目前经测试过的有: Wordpress 博客.新浪博客.cnblogs.oschina. ...

  7. 如何创建一个简单的C++同步锁框架(译)

    翻译自codeproject上面的一篇文章,题目是:如何创建一个简单的c++同步锁框架 目录 介绍 背景 临界区 & 互斥 & 信号 临界区 互斥 信号 更多信息 建立锁框架的目的 B ...

  8. MetaWeblog API调用

    http://rpc.cnblogs.com/metaweblog/webenh 在网上闲逛,突然对博客的接口感兴趣,经考察,多数博客都对metaWeblog Api 提供了支持,虽然windows ...

  9. 利用Echarts设计一个图表平台(一)

    Echarts是一款百度的开源图表库,里面提供了非常多的图表样式,我们今天要讲的内容是利用这一款开源js图表,制作一个能够动态定制的图表平台. 1)Echarts API介绍 首先我们先来看一下Ech ...

随机推荐

  1. 【原创】(十六)Linux内存管理之CMA

    背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: Kernel版本: ...

  2. forkjoin及其性能分析,是否比for循环快?

    最近看了网上的某公开课,其中有讲到forkjoin框架.在这之前,我丝毫没听说过这个东西,很好奇是什么东东.于是,就顺道研究了一番. 总感觉这个东西,用的地方很少,也有可能是我才疏学浅.好吧,反正问了 ...

  3. 权限认证基础:区分Authentication,Authorization以及Cookie、Session、Token

    1. 认证 (Authentication) 和授权 (Authorization)的区别是什么? 这是一个绝大多数人都会混淆的问题.首先先从读音上来认识这两个名词,很多人都会把它俩的读音搞混,所以我 ...

  4. 简单的 FFT 变形 - BZOJ 2194

    「BZOJ2194」快速傅立叶之二 2015年4月29日3,8300 Description 请计算C[k]=sigma(a[i]*b[i-k]) 其中 k < = i < n ,并且有 ...

  5. Nginx作为负载均衡——实战演练

    配置语法 Syntax:upstream name {...} Default:—— Context:http 演示 准备两台虚拟主机192.168.96.188.192.168.96.188 在18 ...

  6. 一次jvm调优过程

    jvm调优实战 前端时间把公司的一个分布式定时调度的系统弄上了容器云,部署在kubernetes,在容器运行的动不动就出现问题,特别容易jvm溢出,导致程序不可用,终端无法进入,日志一直在刷错误,ku ...

  7. StampedLock的理解和使用

    StampedLock介绍 StampedLock是为了优化可重入读写锁性能的一个锁实现工具,jdk8开始引入 相比于普通的ReentranReadWriteLock主要多了一种乐观读的功能 在API ...

  8. .netcore 3.1高性能微服务架构:webapi规范

    1.1 定义 1.基础接口:单一职责原则,每个接口只负责各自的业务,下接db,通用性强. 2.聚合接口:根据调用方需求聚合基础接口数据,业务性强. 1.2 协议 1. 客户端在通过 API 与后端服务 ...

  9. 18年第一弹射 和网络有关; 艾曲塞嗯诶系列篇 san

    62: 管理员想要更新 AR2200路由器的VRP, 正确的方法: 1)管理员把 AR2200 配置为FTP客户端,通过FTP来传输VRP软件 2)管理员把AR2200 配置为FTP服务器,通过FTP ...

  10. .net core之编辑json配置文件

    .net core之编辑json配置文件 引言 最近在具体项目开发应用中,项目采用的json格式配置文件,配置文件的加载采用的IConfiguration接口对象进行的管理,这是.net standa ...