• 欢迎访问佰阅部落
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

WordPress写作笔记:人脑负责专注创作,Python脚本负责机械重复过程

实用工具 佰阅 3年前 (2020-06-19) 3211次浏览

本篇主要阐述使用python脚本,完成文章图片水印添加、上传、CDN链接替换、wordpress发布等一系列机械重复的过程。

0.效果

第一步:在vscode里写好markdown格式的文章

第二步:执行python脚本,自动完成以下过程

Wordpress写作笔记:人脑负责专注创作,Python脚本负责机械重复过程

1.设计思路

整个过程分为量大部分:

写作部分:由我们自己创作文章,图片截图后贴入文章里。

机械部分:源文章–>使用Pillow加水印–>使用Picgo上传图片到GitHub仓库–>源文章图片链接替换为jsDelivr的CDN地址–>导出markdown格式为html格式–>推送到wordpress发布文章

看似简单,实际上我也是折腾了整整两天多,从最初的整个逻辑实现,到后来从wordpress的角度出发,重新设计了原始文件头部。下面来看下主要过程。

2.实现过程

如何添加水印?
这个其实没啥,python添加图片水印一搜一大堆,主要使用pillow库即可。
如何上传图片到GitHub?
这里,需要用到PicGo工具,具体教程设置可以参考链接。我们主要用到了PicGo-Server功能,相当于一个本地的webapi接口,因此python请求该接口即可上传文件。

PicGO只需要一个Github的token即可实现上传,因此设置也非常容易。

然后就是python请求该接口了,以下是代码:

def get_img_list():
    img_list = []
    img_suffix_list = ['png', 'jpg', 'bmp']
    for i in os.listdir():
        if i.split('.')[-1] in img_suffix_list:
            img_list.append('https://gcore.jsdelivr.net/gh/Baiyuetribe/yyycode@dev/img/20/' + i)
    return img_list

def upload():
    data = json.dumps({'list':get_img_list()})
    r = requests.post('http://127.0.0.1:36677/upload',data=data)
    print(r.json())
    if r.json()['success'] == True:
        return True
    return False

如何替换本地图片链接为jsDelivr的CDN地址?
这一步非常简单,因为jsDelivr无需注册,映射的GitHub仓库文件地址,因此前缀都一样,只需要将文件里本地的图片链接replace一下即可。

markdown文件如何转换为html?
这种文件转换,基本没任何困难,使用markdown库就行,这里需要注意markdown库的一些插件。

import markdown
from markdown.extensions.fenced_code import FencedCodeExtension     #文章代码转换
from markdown.extensions.abbr import AbbrExtension
# fenced_code是代码转换的,这是必须。没有的话,markdown识别不了代码块,会转换为p标签

with open('终稿.html','w',encoding='utf-8') as f:
    html = markdown.markdown(markdown_text,extensions=['fenced_code','abbr'])
    f.write(html)

这里的abbr也很重要,是因为可以原始的markdown转html后没有#ID属性和.class属性,这个插件就可以识别这种。不过佰阅博客里基本很少用到特殊属性的,因此暂时保留该插件。

如何使用python自动发布wordpress?
这个我也是稍微做了下研究,以前在wordpress看到过邮件发布之类的设置,那么纠结是什么API可以实现无需登陆后台,直接发布呢?

wordpress_xmlrpc就库可以,在本地测试完毕后,真的感觉到这东西真的非常好用。先来看下最最常规的发布方式

wp = Client('http://localhost/xmlrpc.php', 'admin', 'admin')
#创建对象
post = WordPressPost()
post.title = title #标题
post.content = html   #内容
post.terms_names = {
'post_tag': ['python','markdown'],    #标签
'category': ['教程','linux']    #分类,没有则自动创建
}
post.post_status = 'publish'    #发布状态,不写默认是草稿,private表示私密的,draft表示草稿,publish表示发布
post.custom_fields = []   #自定义字段列表
#提交
post.id = wp.call(NewPost(post))  #获得文章ID

然后分析了下主题自带的一些代码,最后可以用下面的实现,以日主题为例,如果手动操作后台,wp数据库里会有wp_postmeta的新增记录。

而用代码,就可以如下方式实现

post.custom_fields.append({  #添加一个自定义字段
'key': 'cao_is_video_free',
'value': 1
})          
post.custom_fields.append({  #添加一个自定义字段
'key': 'cao_video',
'value': 1
})        
post.custom_fields.append({  #添加一个自定义字段
'key': 'video_url',
'value': 'https://pan.yy-code.com/down/movie/1589720021870.mp4'
})
post.custom_fields.append({ #添加第二个自定义字段
'key': 'video_poster_url',
'value': 'https://gcore.jsdelivr.net/gh/Baiyuetribe/yyycode@dev/img/image-20200618000647534.png'
})

3.价值意义

本次尝试可以说彻底解放了以往机械重复的过程,一次折腾,就可以为后续节约不少时间和精力。后面只需专注写作,再也不用思考加水印、上传、替换、发布等机械重复的过程。

4.小白该怎么办?

如果可以,建议学点python知识,因为python几乎可以处理你能想到的所有设计思想,而且python入门容易,后面的知识积累会越写越舒畅,比shell脚本、php等使用范围更广泛。

我真的写不了代码怎么办?
那就找人付费定制了,类似我这个,一般只需要设置一次,后面只要路劲正确,都不会有故障。

本篇为第二篇自动发布文章。


佰阅部落 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:WordPress写作笔记:人脑负责专注创作,Python脚本负责机械重复过程
喜欢 (5)