「人生苦短我用Python」之Python自动发布Markdown文章到WordPress网站

关于WordPress客户端很多,也有很多markdown编辑器也支持编辑完文章然后本地一键发布到WordPress网站。不过这篇文章要实现的是通过Python脚本来实现本地文章自动发布到WordPress网站上,而我自己怎么要这样折腾呢?

平时大多数写文章都用的本地编辑器,且是markdown格式的,按照常规写好文章以后复制然后粘贴到WordPress后台的编辑器里,然后再调整格式排版。随便很多markdown编辑器可以导出HTML,但是这样有很多我们不需要HTML标签和信息在里面,手动再去整体甚是乏累。

也归功于WordPress这东西对markdown支持不友好,插件实现什么的也不是很满意,索性只好自己动手试试了,整个过程大致是这样的。
wordpress-python
1. 编辑md文章时候开头留有yaml格式的文章元数据,标题、分类、标签等
2. 通过python-frontmatter库获取文章信息,标题、分类、标签、正文内容等
3. 通过markdown2库将正文内容转换成HTML格式
4. 将这些信息通过python-wordpress-xmlrpc发布到网站上

编辑带Yaml格式的md文件

在用任何markdown编辑器编辑md文本的时候在文章的开头加上如下文章元数据即可。比如本文

---
title: Python自动发布markdown文章到WordPress网站
date: 2018-09-27 16:57
url: Python-auto-publish-markdown-post-to-WordPress
tag: 
    - "wordpress"
    - "python"
category: 系统&运维 
---

当然接下来就需要用到Python得一些库Python-frontmatter、markdown2、python-wordpress-xmlrpc在开始之前我们要确保我们本地电脑安装好了这些库。推荐使用Python3这样我们在后面处理一些中文路径的信息不会有太多的麻烦。

Python3、库的安装

因为自己使用的是MacOS,如果你是用Linux、Windows其实没啥两样,只是安装方式不一样。MacOS默认自带Python2.7自己实验出现了一些问题也不想去搜索处理,首先安装Python3

brew install python

通过python3 -V来查看Python3当前的版本。正常情况下会自动把pip3也一起安装的,之后我们再用pip3依次来安装我们需要的库。

pip3 install python-frontmatter
pip3 install markdown2
pip3 install python-xmlrpc-wordpress

GitHub
python-frontmatter
markdown2
python-xmlrpc-wordpress

Python-frontmatter库的使用

我们新建一个脚本比如wp.py,考虑到后续使用脚本方便,命令行传递参数的方式将文档路径信息sys.argv[1]在命令行传递给脚本,sys模块默认sys.argv[0]是脚本的名称,sys.argv[1]是第一个参数信息,sys.argv[2]是第二个参数信息。

后面我们运行wp.py脚本的时候比如这样
python3 wp.py /Users/northgod/Dropbox/VVPLUS/Python自动发布WordPress.md
这样sys.argv[1]所获得的信息就是 /Users/northgod/Dropbox/VVPLUS/Python自动发布WordPress.md我们这篇文章的路径信息。

#!python
# -*- coding:utf-8 -*-

#导入模块
import sys
import markdown2
from markdown2 import Markdown

#获得md文章路径信息
dir = sys.argv[1]

#通过frontmatter.load函数加载读取文档里的信息
#这里关于Python-frontmatter模块的各种函数使用方式GitHub都有说明,下面直接贴可实现的代码
post = frontmatter.load(dir)

#将获取到的信息赋值给变量
post_title = post.metadata['title']
post_tag = post.metadata['tag']
post_category = post.metadata['category']
post_url = post.metadata['url']

#通过print函数来看我们获取到信息状态,确定无误后这个步骤是不需要的
print (post_title)
print (post_tag)
print (post_catagory)
print (post_url)
print (post.content)

Markdown2将md转换为HTML

我们只需要将正文内容md格式通过markdown2转换一下,然后将正文内容赋值给一个变量,经过实现发现转换过来的内容编码不对,在后面的步骤会报错。然后我们通过encode(“utf-8″)转换成utf-8。

#在上面的基础上导入markdown2模块
import markdown2
from markdown2 import Markdown

#post.content里面是我们md格式的正文内容,现在转换成HTML格式
markdowner = Markdown()
post_content_html = markdowner.convert(post.content)
post_content_html = post_content_html.encode("utf-8")

#现在print post_content_html看看,是不是HTML标签了
print (post_content_html)

Python-wordpress-xmlrpc

上面我们已经获取并且处理了我们得文章数据内容,标题、分类、标签、别名、正文内容都已经赋给变量,现在就等待使用python-wordpress-xmlrpc新文章发布模块将对应的文章数据、内容发布出去就搞定了。

这里如果你WordPress关闭了xmlrpc接口是不行的,首先确保打开了xmlrpc发文接口,有些优化插件会关闭xmlrpc接

#同样导入发布文章需要的模块
from wordpress_xmlrpc import Client, WordPressPost
from wordpress_xmlrpc.methods.posts import GetPosts,NewPost

wp = Client('你网站http地址/xmlrpc.php', '登录名', '密码')
#现在就很简单了,通过下面的函数,将刚才获取到数据赋给对应的位置
post = WordPressPost()
post.title = post_title

#post.slug文章别名 也即文章发布后的固定链接
#我网站使用%postname%这种固定链接不想一长串,这里是最初md文章URL的参数,英文连字符格式
post.slug  = post_url
post.content = post_content_html

#分类和标签
post.terms_names = {
  'post_tag': post_tag,
  'category': post_category
    }

#post.post_status有publish发布、draft草稿、private隐私状态可选,默认草稿。
# post.post_status = 'publish'

#推送文章到WordPress网站
wp.call(NewPost(post))

如果没有出错,然后你登录网站后台查看,会有一个新文章以草稿的形式存在,并且分类、标签、url都已经添加好注意在写md的时候,分类、标签如果WordPress原本没有会自动创建的。

要py脚本顺利运行要将上面的代码合理组合在wp.py里,然后按照python3 wp.py /md文章路径/ 运行

总结

总算曲折实现了本地编辑md运行py脚本自动发布文章到WordPress网站。这篇文章就是这样上来的。

不过这都是一些基本的操作,Python-wordpress-xmlrpc这个模块可以实现的功能很多,几乎能在网站后台完成的操作,90%都能通过Python-wordpress-xmlrpc实现远程操作,比如上传文件、缩略图、用户权限、编辑已经存在文章、获取用户、文章等各种信息。

你也可能喜欢

2 条评论

  1. pip3 python-xmlrpc-wordpress
    应为
    pip3 install python-wordpress-xmlrpc

    1. @木头大 感谢提醒 已更新…

发表评论

您的电子邮件地址不会被公开。 必填项已用 * 标注

提示:点击验证后方可评论!

插入图片

标签云

「人生苦短我用Python」之Python自动发布Markdown文章到WordPress网站

长按储存图像,分享给朋友

微信扫一扫

微信扫一扫