网站自动采集文章(通过Python-frontmatter库自动发布到WordPress网站上的应用)
优采云 发布时间: 2022-04-18 20:39网站自动采集文章(通过Python-frontmatter库自动发布到WordPress网站上的应用)
WordPress客户端很多,也有很多markdown编辑器也支持编辑文章,然后本地一键发布到WordPress网站。但是,这个文章想要实现的是通过Python脚本自动将本地的文章发布到WordPress网站,我自己怎么做呢?
通常,用于编写文章 的本地编辑器大多是markdown 格式。照常写好文章后,复制粘贴到WordPress后台的编辑器中,然后调整格式和排版。很多markdown编辑器都可以导出HTML,但是里面有很多我们不需要的HTML标签和信息,手动去全是很累的。
也是因为WordPress对markdown支持不友好,插件实现也不是很理想。我只需要自己尝试一下。整个过程大致是这样的。
##编辑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、markdown 2、python-wordpress-xmlrpc 在开始之前,我们需要确保我们的本地计算机已经安装了这些库。推荐使用Python3,这样我们后面处理一些中文路径信息就不会太麻烦了。
##Title Python3、 库安装
因为我用的是MacOS,如果你用的是Linux或者Windows,没有区别,只是安装方式不同。MacOS 默认自带 Python2.7。我在实验中遇到了一些问题,我不想搜索和处理它们。毕竟,我们必须拥抱新的 Python3。首先安装Python3
酿造安装蟒蛇
使用 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
我们只需要将文本内容通过markdown2转换成md格式,然后将文本内容赋值给一个变量即可。执行后发现转换后的内容编码不正确,后续步骤会报错。然后我们通过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
上面我们已经获取并处理了我们数据文章的内容,title、category、label、alias、body内容已经赋值给变量,现在等待使用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