前几天写了《markdown 生成头条文章的一个思路》,周末就试了试。
先回顾一下思路,大致流程如下:
![bfa98e893993f9d8c0a028e047e2a3ce.png](https://i-blog.csdnimg.cn/blog_migrate/cc440910e2afd1dbbc15ef344c74ecac.jpeg)
这里的三个关键点是:
- 提取code
- 把code 转换为html
- 把html 生成图片
- code 替换成图片
第一个很简单,只有用正则表达式就可以解决:
![bb17e032fe4fe5c5ef32006bbee1b28e.png](https://i-blog.csdnimg.cn/blog_migrate/ea38e2e1c554c14c684acb03c5aef2fc.jpeg)
这个正则来自 python-markdown2: https://github.com/trentm/python-markdown2
这个正则只匹配了 ``` 样式的代码,对于前边有四个空格的并没有做处理(也不想做处理,还是严格一点好)。
第二个也不麻烦,只需要把提取出的code 放到html 中,下面是一个html模板:
![317d269e361c9039a62b046471c89217.png](https://i-blog.csdnimg.cn/blog_migrate/0e5cbf1e38a80e2c6f3545ad51a092da.jpeg)
这里有一个点是渲染html 页面的时候, 由于加载html 页面的工具都是get请求,这里我们需要先把code 数据保存起来。所以请求code 的html 页面分成了两步。
- 存储code
- 请求code 对应的html
在 html-server 服务中,实现了code 的存储和请求,使用方式如下:
![ec03fad82c85dc4d17e0a2360f125aa5.png](https://i-blog.csdnimg.cn/blog_migrate/a7e8ef785e62b70da63787a59e83831b.jpeg)
第三个问题比较麻烦一点。
开始的时候是准备使用pyqt5 生成图片,但是它渲染html 的大小和直觉不太一致,API也比较复杂。最坑的是,一次生成多张图片有问题,最后改成了使用 的方式。
图片生成的代码比较简单,
![252203e67a6a300c72929a04c11aa6c5.png](https://i-blog.csdnimg.cn/blog_migrate/16ede097441083952a96f5bc6ab634c9.jpeg)
第四个问题和第一个问题现在是关联的,操作方式是,找出code,处理然后直接替换:
![8937ed5c496b20416d62cededfe14096.png](https://i-blog.csdnimg.cn/blog_migrate/58f1c4f70229c3b3908655008022c044.jpeg)
这么做虽然简单但是弊端也很明显,就是没有使用并发,脚本执行的慢。如果想提高速度,可以先把code 全找出来,然后使用多进程来处理。
代码我上传到了github,使用方式如下
使用方法
![5df92fbf8aa8024b2f5aa8a4c4ab3ae3.png](https://i-blog.csdnimg.cn/blog_migrate/d879b716d3ad12be998b4bac97fb29e9.jpeg)
转换前后的效果
这是转换前:
https://github.com/gusibi/oneplus/blob/master/325.md
这是转换后:
https://github.com/gusibi/oneplus/blob/master/new_325.md
这个只是一个粗糙的优化方式,也只识别了代码,对于流程图,table 并没有适配,作为一个优化项之后再做吧。