Python 使用 xmlrpc 操作 WordPress:发布文章、新建标签和分类目录

作者: admin 分类: python 发布时间: 2022-06-16 23:27

以前用易语言写过程序采集内容发布到wordpress上,但其实早就已经有模块可以很好的实现采集内容发布到wordpress上,效果应该比我自己写的那种更好用,以后应该会越来越多的使用python写程序,而它的一个最大的优点就是有很多很多非常好用的库,“不重复造轮子”的编程思想真的很好!下面是今天看到的一篇关于使用 python_wordpress_xmlrpc模块来采集的文章内容,以后如果需要采集肯定能用的到,先收集到这里:


WordPress xmlrpc 功能可以让我们远程自动发布文章,另外常见的操作如保存草稿、指定分类目录、指定标签、指定作者、新建标签和分类目录都可以通过 xmlrpc 实现。今天老王就分享下 Python 如何使用 xmlrpc 操作 WordPress。

一、安装依赖

Python 调用 WordPress xmlrpc 需要的模块是 python_wordpress_xmlrpc,直接通过 pip 安装即可(老王这里用的是 python3):

pip3 install python_wordpress_xmlrpc

之后结合 Python 代码可以实现 WordPress 自动发布文章的功能。

二、源码分享

1、发布文章

其中 post_status 可以是草稿、发布和私密,Client 类需要传入你的 xmlrpc.php 地址,以及用户名和密码,可以指定文章的分类目录和标签,但是如果分类目录和标签不存在是会报错的,可以新新建。最后成功发布后会返回文章的 id:

from wordpress_xmlrpc import Client, WordPressPost

from wordpress_xmlrpc.methods import posts

wp = Client(‘https://domain.com/xmlrpc.php’, ‘username’, ‘password’)

def post_new_article(title, content):

post = WordPressPost()

post.title = title

post.content = content

post.post_status = ‘draft’ # 文章状态,不写默认是草稿,private表示私密的,draft表示草稿,publish表示发布

post.terms_names = {

‘category’: [‘分类目录’],

‘post_tag’: [‘标签1’, ‘标签2’],

}

post.id = wp.call(posts.NewPost(post))

return post.id

2、新建标签和分类目录

代码如下,跟发布文章类似,也是新建 Client,调用 call 方法:

#coding:utf-8

from wordpress_xmlrpc import Client, WordPressPost

from wordpress_xmlrpc import WordPressTerm

from wordpress_xmlrpc.methods import taxonomies

import sys

reload(sys)

sys.setdefaultencoding(‘utf-8’)

wp = Client(‘http://您的域名/xmlrpc.php’, ‘后台账号’, ‘后台密码’)

#新建标签

tag = WordPressTerm()

tag.taxonomy = ‘post_tag’

tag.name = ‘My New Tag12’#标签名称

tag.slug = ‘bieming12’#标签别名,可以忽略

tag.id = wp.call(taxonomies.NewTerm(tag))#返回的id

#新建分类

cat = WordPressTerm()

cat.taxonomy = ‘category’

cat.name = ‘cat1’#分类名称

cat.slug = ‘bieming2’#分类别名,可以忽略

cat.id = wp.call(taxonomies.NewTerm(cat))#新建分类返回的id

#新建子分类

parent_cat = client.call(taxonomies.GetTerm(‘category’, 20))#20是父分类的id

child_cat = WordPressTerm()

child_cat.taxonomy = ‘category’

child_cat.parent = parent_cat.id

child_cat.name = ‘My Child Category’#分类名称

child_cat.slug = ‘beidongdui’#分类别名,可以忽略

child_cat.id = wp.call(taxonomies.NewTerm(child_cat))#新建分类返回的id
————————————————
版权声明:本文为CSDN博主「Helios Xu」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_42299346/article/details/114913148

补充,在使用中,发现了问题,提示错误:“xml.parsers.expat.ExpatError: XML or text declaration not at start of entity”,百度这个内容后,找到了解决方法:

打开C:\ProgramData\Anaconda3\Lib\xmlrpc下面的client.py文件,将其中的:


def feed(self, data):

        self._parser.Parse(data, 0)

改成如下的代码:


def feed(self, data):

        self._parser.Parse(data.strip(), 0)

参考文章:http://www.snailtoday.com/archives/10725

另外,如果就这样发布,会有两个问题:

①、无法设置固定链接的网址。这个时候只要添加如下代码就可以了:

post.slug="must_be_only_english"  #设置了固定链接以后的别名

②、会默认关闭掉文章下面的评论,可以这样解决:

post.comment_status='open'   #默认是关闭评论的,这里设置为打开评论!

相关文章

发表评论

邮箱地址不会被公开。 必填项已用*标注

Powered by 草根站长笔记 © 2015-2020 草根站长笔记 Inc.版权所有,禁止转载