[2017-08-31]如何使用ruby同步markdown博文到博客园


这两天折腾了一下用ruby通过MetaWeblog接口把本博客同步到博客园,特此记录。

MetaWeblog

MetaWeblog是一个专门关于博客的协议标准,通过xmlrpc,很简单的定义了新增、编辑、删除三个基本接口。

在博客园设置页签的最下方,保存按钮之前有每个用户的MetaWeblog接口地址:

MetaWeblog访问地址: http://rpc.cnblogs.com/metaweblog/personball

打开这个接口地址,可以看到接口文档。

那么通过什么方式调用这个服务呢?
最好是脚本语言,这毕竟不是开发项目,用需要编译生成的静态语言有点小题大做。

如果你熟悉Python,或许也可以找到MetaWeblog的客户端库,下面介绍通过Ruby版MetaWeblog客户端进行XmlRpc调用。

通过Ruby脚本调用metaWeblog.newPost

准备工作:

  1. ruby升级到2.3版本;
  2. gem install metaweblog

对了,我这里是Mac系统。下面先讲几个注意点,具体操作放最后。

Tip1 发布频率

博客园的MetaWeblog接口对博文发布频率做了限制,发布间隔太短会遇到提示:

30秒内只能发布1篇博文,请稍候发布

间隔30秒还是很容易触发,建议发布间隔60秒

Tip2 发布Markdown

发布Markdown内容要求Post结构中的categories设成[Markdown],注意categories要求是数组,具体请看接口文档中struct Post一栏。

Tip3 扩展MetaWeblog中的Post对象

你找到的MetaWeblog客户端很可能是通用的,所以不会针对博客园的接口做适配,肯定需要针对Post对象做扩展。

博客园MetaWeblog接口Post结构中的title是文章标题,description是文章内容,这两个都是必填项。
如果遇到异常提示,必须思考下是不是博客园服务器端抛出来的。

本博客的同步脚本

完整代码见:

cnblogs_post.rb
post_sync.rb

其中cnblogs_post.rb是针对博客园接口的扩展,主要加了个:categories,去掉了原先MetaWeblog::Post定义的:link
:dateCreated虽然加了,但是目前博客园不使用接口传进去的值,而用服务器接收时间作为发布时间。需要修改的话,必须到后台编辑文章页面,展开最下方的其他选项,勾选修改发布时间。(我嫌麻烦,直接title上加日期前缀了)

post_sync.rb主要是单篇文章同步用脚本,处理了几个问题:

  1. 加载cnblogs_post.rb,以使用MetaWeblog::CnblogsPost
  2. 读取配置(接口地址、用户名、密码等);
  3. 打开_posts目录中的markdown文件,进行一定的处理(解析Jekyll文件头之类);
  4. 处理文章中的相对路径,主要是资源链接和博文链接等;

Yaml配置文件

post_sync.yml范例:

target: http://rpc.cnblogs.com/metaweblog/personball
source: http://personball.com
username: yourUserName
password: yourPWD

配置文件一定记得不要推送到github上,.gitignore中必须指定忽略post_sync.yml

批量调用

首先post_sync.rb必须设置成可执行:

chmod u+x post_sync.rb

然后使用bash脚本批量调用,
批量调用脚本参考batch_sync.sh

这个脚本可以通过find命令遍历_posts目录自动生成:

find _posts/*|xargs -n 1 echo ./post_sync.rb >> batch_sync.sh

对了,其中sleep 55s这是通过vscode多行编辑插入的。

最后,强烈建议程序员一定要多玩玩命令行。

git add .
git commit -a
git push && ./post_sync.rb _posts/2017-08-31-how-to-sync-post-to-cnblogs-with-ruby.md

Go!

转载于:https://www.cnblogs.com/personball/p/7460622.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/399963.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MacOS中Dock栏的设置和使用技巧,新手必看

MacOS中Dock栏的设置和使用技巧,新手必看 Dock栏就是Mac放置常用应用程序和文件夹快捷方式的任务栏,为你访问这个应用和文件提供了非常方便的入口。 作为Mac用户最常使用的区域,要知道如何才能更高效的使用它,从而达到事半功倍的…

ldconfig deferred processing now taking place

在ubuntu下面安装软件,安装结束后,提示:ldconfig deferred processing now taking place 到网上查询了一下,大概意思是说:软件安装完了,是否要重启电脑。转载于:https://www.cnblogs.com/wangkongming/p/…

51Nod 1003 阶乘后面0的数量 | 思维

题意:n的阶乘后面0的个数,如果直接算出阶乘再数0的数量一定会超时的。因为102*5,所以求出5贡献的次数就行。#include "bits/stdc.h" using namespace std; #define LL long long #define INF 0x3f3f3f3f3f #define PI acos(-1) #define N 510 …

史上超详细的flask_sqlalchemy连接mysql数据库

https://www.jianshu.com/p/1ba45bd6c351 PythonFlask安装:https://www.jianshu.com/p/cd1925e90eda Flask路径参数以及请求参数讲解:https://www.jianshu.com/p/54057b4f0437 首先安装pymysql,命令如下:pip install pymysql 安装…

中国移动技术愿景2020+

2019独角兽企业重金招聘Python工程师标准>>> 中国移动技术愿景2020 本文档白皮书是中国移动提出的在2020年及其之后的若干年内对产业各方面技术发展的构想,包括行业发展趋势,面向万物的数字化服务和对技术发展的看法。希望产业各方面能够开展…

jQuery对象与dom对象的转换

jQuery对象与dom对象的转换只有jquery对象才能使用jquery定义的方法。注意dom对象和jquery对象是有区别的,调用方法时要注意操作的是dom对象还是 jquery对象。普通的dom对象一般可以通过$()转换成jquery对象。如:$(document.getElementByIdx_x("msg…

用sqlalchemy对mysql数据库增删改查demo

首先要搭建mysql服务器、安装mysql python驱动、安装sqlalchemy包, 我用的是windows环境,安装参考:https://blog.csdn.net/jishuwenming/article/details/80993840 完整demo 如下: --------------------- 作者:jishuw…

《计算机程序设计艺术》pdf

下载地址:网盘下载 内容简介 编辑本书作者D. E. Knuth是在计算机学界十分著名的学者,在本领域享有很高权威和盛名,他的这部著作是无数计算机专业人员的学习教材和参考读物,也是许多专业研究工作者经常阅读的经典。本书已被翻译为几…

Jsoup 抓取和数据页 认识HTTP头

推荐一本书:黑客攻防技术宝典.Web实战篇 ; 顺便留下一个疑问:能否通过jsoup大量并发訪问web或者小型域名server,使其瘫痪?其有用jsoup熟悉的朋友能够用它解析url来干一件非常无耻的事(源代码保密&#xff…

杭电划分问题

在做杭电做题时遇到好几个有关划分的题目,比如2050 折线分割平面、1290的献给母校的蛋糕,都是数学问题吧,感觉挺有做数学题的感觉的,在这里总结一下。 1、n个点最多把直线分成1n份,这个很好理解 2、n条直线最多把平面分…

flask + 蓝图 用 sqlalchemy 对 mysql 进行 增删查改 的 demo

main.py import uuid # UUID: 通用唯一标识符 # from flask import Flask from flask import Flask, request, json, Response from flask_sqlalchemy import SQLAlchemyfrom app.main.views import * from app.app01.views import * from app.app02.views import * from a…

UVA - 400 Unix ls

/*收获:1. 我觉得最大的收获是,了解了该怎么进行竖向的数据输出并且,以及《入门经典》的做法,并没有先转换为二维数组再输出,而是用了些别的技巧(好像也能算是技巧,具体的看代码吧,这个我也不太…

javascript中String的fromCharCode()方法

前几天遇到一个bug,后端的模板引擎在输出形如: <div title"111 aaa">内容</div> 这样的内容时,无法输出 空格,所以只能用 来代替: <div title"111 aaa">内容</div> 然后前端使用空格来切分title值: var arr1 title.split( ); 然后…

Zend Server更新至6.2版本——虚拟主机全方位管理

Zend Server自从发布6.0以来&#xff0c;并支持云服务&#xff0c;成为很多PHP程序所选择的Web服务器。 Zend Server 6.2版本从更新内容来看&#xff0c;解决了Web服务器与虚拟主机之间的协同管理。并在细节上&#xff0c;更注重性能控制。 具体更新如下&#xff1a; 虚拟主机管…

Flask 蓝图,数据库链接

蓝图 使用场景 如果代码非常多&#xff0c;要进行归类。不同的功能放在不同的文件&#xff0c;把相关的视图函数也放进去。 蓝图也就是对flask的目录结构进行分配&#xff08;应用于小&#xff0c;中型的程序&#xff09; 当然对于大型项目也可以通过 url_prefix 加前缀的…

python基础-02

常见的数据类型 列表 在python中&#xff0c;列表的创建可以是由[]两个方括号组成的。在其他语言中&#xff0c;被称之为数组。 列表里可以存放一组值&#xff0c;并且系统默认的给列表里的每一个元素以索引值&#xff0c;方便查找和使用。 如下&#xff1a; #创建一个列表&…

Flask扩展系列(八)–用户会话管理

安装和启用 遵循标准的Flask扩展安装和启用方式&#xff0c;先通过pip来安装扩展&#xff1a; $ pip install Flask-Login 接下来创建扩展对象实例&#xff1a; 1 2 3 4 5 from flask import Flask from flask.ext.login import LoginManager app Flask(__name__) login…

onmousemove和onmouseout事件的调用,和js使用双引号、单引号的时候应该注意的问题...

使用js的时候&#xff0c;统一使用双引号&#xff0c;然后通过反斜杠进行转义 ①如果同时使用单引号、和双引号的情况下容易出现问题&#xff0c;导致标签中表示的事件不能调用&#xff0c; ②导致由于标签没有封口而出现样式布局错误 1 <!DOCTYPE html>2 <html>3 …

C++ 学习书目

C书单 第一篇 一些同学问我&#xff0c;如何学好C&#xff0c;我没有别的办法给你们&#xff0c;唯一的办法就是读书&#xff0c;读大量的书&#xff0c;就可以解决。要把C作为日常语言&#xff0c;而不是一种程序语言&#xff0c;这样就好办了。 有人又要问我&#xff0c;那么…

CentOS6.5安装配置

一、网络设置&#xff1a; 1、命令&#xff1a;vim /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICEeth0 HWADDR00:0C:29:34:11:33 TYPEEthernet UUID6a0e083b-7d65-4afe-9d6f-f42f97659c89 ONBOOTyes NM_CONTROLLEDyes …