博客园上传markdown文件
个人习惯用markdown写博客,然后同步到博客园,每次同步都比较麻烦。
于是通过metaweblog实现了,一步上传markdown文件的小工具。
工具地址:https://github.com/dongfanger/pycnblog
功能
- 一键拖拽上传
- 默认“未发布”,支持直接发布
- 重复上传,更新博客
- 支持图片自定义显示格式
- 支持上传后生成替换后本地文件
环境
python3
配置
在config.yaml中,填写博客配置信息。
blog_url: https://rpc.cnblogs.com/metaweblog/testblog
blog_id: "testblog"
username: "zhangsan"
password: "123456"
blog_url
blog_url在博客后台>设置,页面最下方的MetaWeblog访问地址。 https://rpc.cnblogs.com/metaweblog/testblog
blog_id
blog_id就是访问地址的尾巴, testblog。
username
username是登录用户名,跟blog_id不一定是同一个。
password
password是密码。
运行
windows cmd:
打开cnblog_markdown.cmd
(windows里面双击此文件即可),提示Please input file path:
把文件往里一拖,回车就完事了
markdown图片存储设置
写markdown有一利器Typora,一般图片存储设置我会修改成这样。
打开文件>偏好设置,找到'图片插入'
修改为'复制到指定路径',规则设置为./${filename}/
下面的3个选项全部勾选。
这样当复制粘贴图片到markdown时,就会在目录中新建一个同名文件夹,存储图片。
工具原理
本工具的基本原理是,调用metaweblog的相关api,把图片上传到服务器后,获取url替换本地图片地址,再上传文件到博客园,在博客园后台能看到新博客。
metaweblog是一个开放api,用于和远程blog交互,可以通过xmlrpc建立连接
server = xmlrpc.client.ServerProxy(blog_url)
这里用到了2个api:图片上传.metaWeblog.newMediaObject和博客上传.metaWeblog.newPost。
上传图片部分,通过asyncio包,实现了异步上传。
- [WCF安全系列]绑定、安全模式与客户端凭证类型:WSHttpBinding与WSDualHttpBinding
- Python中list的遍历
- Python中的参数传递与解析
- [WCF安全系列]实例演示:TLS/SSL在WCF中的应用[HTTPS]
- QEMU3 - 使用ceph来存储QEMU镜像
- Redis错误配置详解
- 顺序存储线性表的实现
- 技术揭秘:什么是定位劫持?黑客是如何进行劫持攻击的?
- CSS概要
- 如何使用 scikit-learn 为机器学习准备文本数据
- 使用jQuery Validation插件来验证表单
- 如何用Wireshark捕获USB数据?
- QEMU 2: 参数解析
- [WCF安全系列]认证与凭证:X.509证书
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- python五十九课——正则表达式的拓展内容
- 配置SVN的hooks功能自动更新代码
- python六十课——高阶函数之map
- python六十一课——高阶函数之reduce
- python六十二课——高阶函数之filter
- Nginx优化配置详解
- python六十三课——高阶函数之sorted
- python六十四课——高阶函数练习题(一)
- python六十四课——高阶函数练习题(二)
- python六十四课——高阶函数练习题(三)
- Jenkins+Maven+Svn实现代码自动打包与发布
- python六十五课——单元测试(一)
- python六十六课——单元测试(二)
- Linux企业生产常见问题集合(一)答案
- python六十八课——网络编程之UDP协议