一、安装依赖
Python 调用 WordPress xmlrpc 需要的模块是 python_wordpress_xmlrpc,直接通过 pip 安装即可(老王这里用的是 python3):
pip3 install python_wordpress_xmlrpc
之后结合 Python 代码可以实现 WordPress 自动发布文章的功能。
二、源码分享
1、发布文章
其中 post_status 可以是草稿、发布和私密,Client 类需要传入你的 xmlrpc.php 地址,以及用户名和密码,可以指定文章的分类目录和标签,但是如果分类目录和标签不存在是会报错的,可以新新建。最后成功发布后会返回文章的 id:
def newPostArticle(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(NewPost(post)) return post.id
2、新建标签和分类目录
代码如下,跟发布文章类似,也是新建 Client,调用 call 方法:
#!/usr/bin/python
# -*- coding: UTF-8 -*- from wordpress_xmlrpc import Client, WordPressPost,WordPressTerm from wordpress_xmlrpc.methods.posts import GetPosts, NewPost from wordpress_xmlrpc.methods.users import GetUserInfo from wordpress_xmlrpc.methods.taxonomies import NewTerm,GetTerm import sys,os
# reload(sys) # sys.setdefaultencoding('utf8') #登录
wp = Client('http://您的域名/xmlrpc.php', '后台账号', '后台密码') def newPostArticle(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(NewPost(post)) return post.id
# 新建标签
def addTags(): tag = WordPressTerm() tag.taxonomy = 'post_tag' tag.name = 'My New Tag12'#标签名称
tag.slug = 'bieming12'#标签别名,可以忽略
tag.id = wp.call(NewTerm(tag))#返回的id return tag.id
# 新建分类
def addCategory(): cat = WordPressTerm() cat.taxonomy = 'category' cat.name = 'cat1'#分类名称
cat.slug = 'bieming2'#分类别名,可以忽略
cat.id = wp.call(NewTerm(cat))#新建分类返回的id return cat.id
# 新建子分类
def addSubCategory(catId): parent_cat = wp.call(GetTerm('category', catId))#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(NewTerm(child_cat))#新建分类返回的id return child_cat.id
#获取最新发布的10条信息标题:使用for循环打印
def getPosts(): wp.call(GetPosts()) for title in wp.call(GetPosts()): print(title) #获取用户信息
def userInfo(): print(wp.call(GetUserInfo()))
注意:
wordpress开启xmlrpc模块存在一定安全隐患,如暴力破解、SSRF,参考https://blog.csdn.net/u012206617/article/details/109002948
(https://github.com/FireFart/WordpressPingbackPortScanner)
开启xmlrpx模块,可能被恶意Ddos导致内存使用增高,影响站点使用,解决:
1.屏蔽 XML-RPC (pingback) 的功能,add_filter(‘xmlrpc_enabled’, ‘__return_false’);
2.通过.htaccess屏蔽xmlrpc.php文件的访问;
3.修改.htaccess文件,如果有用户访问xmlrpc.php文件,让其跳转到其他不存在的页面,降低自身网站的负担。
4.修改xmlrpx文件名;
修改文件名可保证该功能的使用,又避免了以上问题,除非又被人扫描到了。。。
发表评论 取消回复