Python自动发布markdown文章到WordPress网站

本文介绍如何使用Python脚本结合Python-frontmatter、markdown2和python-wordpress-xmlrpc库,从本地Markdown文件自动发布文章到WordPress网站。通过在Markdown文件头部添加YAML元数据,获取文章信息并转换为HTML,最后利用XML-RPC接口发布到WordPress。
部署运行你感兴趣的模型镜像

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

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

也归功于WordPress这东西对markdown支持不友好,插件实现什么的也不是很满意,索性只好自己动手试试了,整个过程大致是这样的。

  • 编辑markdown文章时候开头留有yaml格式的文章元数据,标题、分类、标签等,这些信息放这里以便后面自动获WordPress
  • 通过python-frontmatter库获取文章信息,标题、分类、标签、正文内容等,此时获取到的正文数据还是md格式的
  • 通过markdown2库将正文内容转换成HTML格式(很满意这个转换)
  • 最后将这些信息通过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嘛。首先安装Python3
brew install python
通过python3 -V来查看Python3当前的版本。正常情况下会自动把pip3也一起安装的,之后我们再用pip3依次来安装我们需要的库。

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

GitHub

##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隐私状态可选,默认草稿。如果是publish会直接发布
# 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实现远程操作,比如上传文件、缩略图、用户权限、编辑已经存在文章、获取用户、文章等各种信息。

如果你遇到一些问题欢迎和我一起讨论Q 957473256

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值