上传markdown文件到博客园
【0】需求原因
个人习惯用markdown写博客,然后同步到博客园,每次同步都比较麻烦。
于是通过Metaweblog实现了,一步上传markdown文件的小工具。
工具地址:https://github.com/dongfanger/pycnblog
作者博客:https://www.cnblogs.com/df888/p/11826480.html
【1】功能
- 一键拖拽上传
- 默认“未发布”,可选择直接发布
- 重复上传,提示是否更新博客
【2】环境
python3
安装参考:
windows:https://blog.csdn.net/weixin_40844416/article/details/80889165
linux:https://www.cnblogs.com/gered/p/13246889.html
【最佳实践测试】
(1)查看 Typora 设置
这个文件存储位置设置无所谓的;
(2)配置 pycnblog 配置文件 config.yaml
解压出来后文件夹:
打开配置文件修改 config.yaml
1、blog_url
管理进入博客园后台 =》 设置 =》拉到页面最底端
2、blog_id
就是网址上的这个东西
3、username
这没什么好说的,就是你登录博客园的账户
4、passowrd
这没什么好说的,就是你登录博客园的密码
(3)运行 pycnblog 中的文件 cnblog_markdown.cmd
1、打开这个文件
现在大多是win10,权限管理很重要,这一步应该改成下面这样很重要(写自2022-03-07)
否则很容已出现评论区的,找不到文件;
出现如下窗口
2、把我们要上传的markdown文件拖过去
操作完成后就会生成,对应的 _network.md 文件,如下图;
你然后你可以把该文件发给别人,也可以直接复制markdown代码到博客园
3、对比操作前后文档的区别
我们可以发现,图片的URL已经被替换成了网络RUL,存储在博客园的网络URL;
你现在可以把该文件发给别人,也可以直接复制markdown代码到博客园
(4)上传新生成的 _network 文档到博客园
然后内容直接复制过来就好了
张贴过来之后,发布,然后查看,结果如下图:
成功
(5)总结:可复制替换后的 markdown 代码发布,但无法直接发布
【附录】
【故障处理】
(1)Typroa =》markdown图片存储设置
如果(2)中报错,发布到博客园报错,那么则必定是因为这个
写markdown有一利器Typora,一般图片存储设置我会修改成这样。
打开文件>偏好设置,找到'图片插入'
修改为'复制到指定路径',规则设置为./${filename}.assets
下面的3个选项全部勾选。
这样当复制粘贴图片到markdown时,就会在目录中新建一个同名文件夹,存储图片。
(2)为什么只会图片上传,文档不会自动发布到博客园?
故障信息:
我的配置文件如下: blog_url: https://rpc.cnblogs.com/metaweblog/gered blog_id: "gered" username: "xxx" password: "xxxx" #是否生成图片替换后本地文件,默认False关闭 gen_network_file: True #上传后是否发布,默认未发布,设置True为发布 publish: True #图片自定义显示格式,默认不设置 #img_format: "<center><img src="" style="width:100%;" /></center>" 设置居中和宽度 #img_format: typora 还原typora图片样式,居中,设置zoom,上传后无需再手动调整图片大小 img_format: ""
作者提供的解决方案:
修改upload.py 60行代码中的99999为99,因为:博客园的博文最大可获取数量为100。修改后测试成功!
实际上,默认为已发布了!
(3)相同名次的markdown多次发布会怎么样?
会提示该博客已存在,是否更新替换,对应输入你想要的操作即可
(4)文件未找到,找不到路径 等错误
现在大多是win10,权限管理很重要,这一步应该改成下面这样很重要(写自2022-03-07)
否则很容已出现评论区的,找不到文件;
如果这样还不行,请尝试给文件以权限
右击文件=》属性,然后如下图,添加everyone 用户,给它完全控制权限
改完后,再次拖动上传 试试
【工具原理】
本工具的基本原理是,调用Metaweblog的相关api,把图片上传到服务器后,获取url替换本地图片地址,再上传文件到博客园,在博客园后台能看到新博客。
Metaweblog是一个开放api,用于和远程blog交互,可以通过xmlrpc建立连接
server = xmlrpc.client.ServerProxy(blog_url)
这里用到了2个api:图片上传.MetaWeblog.newMediaObject和博客上传.MetaWeblog.newPost。
上传图片部分,通过asyncio包,实现了异步上传。