为了实现博客的多平台(简书、掘金、知乎等)自动化发布,需要将本地的markdown中的图片自动转为图床链接,尽管已经有PicGO这种神器,但是自动调用PicGo上传图床有以下两个问题
- 本地保留:大量图片为直接从visio中复制过来,如果直接上传本地没有保留副本
- 隐私性:有些笔记不做公开,不希望图片公开
因此使用另一种方法解决自动化发布问题,即优先在本地完成文章,设置编辑器为将图片保存在本地,编写一个自动化替换脚本实现三个功能:
- 将图片上传到图床(选择Gitee)
- 将文章中的链接替换为图床链接
Gitee有API处理新建文件。根据API文档,新建文件的请求类型为POST,请求地址如下所示:
路径中所需要的内容如下所示:
- :仓库所属空间的地址,对个人用户即为用户名
- :仓库路径,即图床的名称
- :上传文件的目标路径,例如上一部分中为
POST的formDate中需要带的参数如下所示:
- :数据类型为string,为用户生成的token
- :文件内容,数据类型为string,使用base64编码
- :提交信息,数据类型为string
这里使用Python3+requests库构建POST请求,构建代码如下所示:
其中post_data是包括所有参数的dict,其中owner、repo和token来自预先写好的json文件,读取部分代码如下所示:
另外path、content和message需要根据图片文件生成,其中path由原文件名加上时间戳防止重复,content内容需要以二进制读取图片文件,并将其使用base64编码,该部分代码如下所示:
需要将markdown中的图片语句中的内容替换为上传后的URL,使用正则表达式识别,正则表达式如下所示:
当识别出上述内容后,判断当前行为图片,这里仅对单独出现的图片做处理,不考虑和文字出现在同一行的图片。代码如下所示:
该部分代码处理的内容如下所示:
- 读取配置信息
- 读取markdown文件
- 扫描markdown的每一行,若在这一行发现图片插入语句,则判断其是否为url,若不是url则读取图片并将其上传,并替换为返回的URL
- 在尾部添加版权声明和感谢信息
- 生成新文件文件名并写入内容
至此,生成了将图片替换为图床URL的可发布版本,通过BlogHelper可自动发布到各个平台