当前位置: 首页 > 工具软件 > XMLRPC > 使用案例 >

python csv wordpress xmlrpc_WordPress自动发布文章-Python模块wordpress_xmlrpc

燕青青
2023-12-01

wordpress_xmlrpc模块

Client类是连接登录WordPress的接口,使用该类就初始化一个wp的客户端。然后就可以通过这个客户端对wp进行相关的操作。

class Client(url, username, password[, blog_id, transport])

参数说明:

url:WordPress站点的xmlrpc文件所在的url

username: 站点后台用户名

password: 站点后台的密码

blog_id:博客的id(WordPress会忽略这个值)(不需要填)

transport: 自定义XML-RPC传输实现(不需要填)

Client类:返回wordpress_xmlrpc.base.Client对象。如果返回了wordpress_xmlrpc.base.Client对象则可以表明登录成功了。

Client对象还有一个call方法,该方法用来调用xml-rpc的方法的,也就是说所有的xml-rpc方法都是要通过call方法调用才能执行。

WordPress_xmlrpc对象

登录成功后我们就可以对WordPress_xmlrpc的一些对象进行操作了,这里有一份官方文档,列举了WordPress的所有可操作对象及其属性。官方文档:http://python-wordpress-xmlrpc.readthedocs.io/en/latest/ref/wordpress.html

WordPress_xmlrpc方法

官方文档:http://python-wordpress-xmlrpc.readthedocs.io/en/latest/ref/methods.html。这里需要重点说明Methods类,我们的发文工具主要就是运用这个类的多种方法来实现的。Methods类中有几个常用的方法:

GetPosts方法(获取文章信息)

class wordpress_xmlrpc.methods.posts.GetPosts([filter, fields])

获取所有文章,返回WordPressPost实例,以文章列表形式。我们可以通过下面的代码简单测试一下,获取WordPress文章的标题,内容,content,但是不是所有的,好像是最近更新的吧!

from wordpress_xmlrpc import Client

from wordpress_xmlrpc.exceptions import ServerConnectionError

from wordpress_xmlrpc.methods import posts

from wordpress_xmlrpc.methods.posts import GetPosts

try:#检测登录是否成功,我们登录WordPress后台

#前提不要禁用xmlrpc

# url=input('输入你的xmlrpc地址(XX/xmlrpc.php):')

# wordpress_admin=input('输入WordPress后台用户名:')

# wordpress_password=input('输入WordPress后台密码:')

# client=Client(url,wordpress_admin,wordpress_password)

client=Client(url,wordpress_admin,wordpress_password)

except ServerConnectionError as e:

print('登录失败',e)

else:

print('登陆成功')

#获取所有文章,返回WordPressPost实例,文章列表

post_list=client.call(posts.GetPosts())

#from wordpress_xmlrpc.methods import posts

#from wordpress_xmlrpc.methods.posts import GetPosts

#所有的xml_rpc方法都需要通过call方法调用

for i in post_list:

print(i.title)#打印标题

#print(i.content)

print(i.link)#打印链接

NewPost()方法(发布文章)

class wordpress_xmlrpc.methods.posts.NewPost(content)

创建一篇新文章。需要用到WordPressPost实例的至少两个参数:title和content。但是我们发现NewPost()方法将文章发布到了后台保存的是草稿,这是因为发布状态默认选择的是草稿。如果需要更改发布状态,可以通过修改WordPressPost()实例post_status属性的值:

publish:已发布

pending:等待复审

draft:草稿

from wordpress_xmlrpc import Client

from wordpress_xmlrpc import WordPressPost

from wordpress_xmlrpc.methods import posts

from wordpress_xmlrpc.exceptions import ServerConnectionError

try:

client=Client(url,wordpress_admin,wordpress_password)

except ServerConnectionError as e:

print('登录失败',e)

else:

print('登录成功')

#NewPost()方法,新建一篇文章

newpost=WordPressPost() #创建类实例

newpost.title='hello wordpress' #文章标题

newpost.content='这是你的第一篇WordPress文章,你可以编辑或者发布它'#文章内容

#设置发布状态,默认是草稿

newpost.post_status='publish'

#发布新建的文章,返回的是文章id,自己尝试

print(client.call(posts.NewPost(newpost)))

这个时候我们又发现,所有的文章都是发布到默认的“未分类”目录下,那我们想将发布到指定目录下该如何操作呢?WordPressPost类有一个属性是terms_names ,通过设置这里的值(字典格式:来指定栏目目录,因为一篇文章可以属于多个栏目,所以字典的值是一个列表,里面包含了所选栏目。当然了有了分类目录肯定还有标签了,WordPressPost类的terms_names 属性不仅可以指定栏目目录,还可以指定文章标签,在字典内新增标签的键值对就好了,多个标签用英文逗号分隔

{'category': ['栏目名 1','栏目名 2','栏目名 3',...],

'post_tag':['tag1','tag2','tag3',...]})

那么具体代码可参考:

from wordpress_xmlrpc import Client

from wordpress_xmlrpc import WordPressPost

from wordpress_xmlrpc.methods import posts

from wordpress_xmlrpc.exceptions import ServerConnectionError

try:

client=Client(url,wordpress_admin,wordpress_password)

except ServerConnectionError as e:

print('登录失败',e)

else:

print('登录成功')

#NewPost()方法,新建一篇文章

newpost=WordPressPost() #创建类实例

newpost.title='hello wordpress' #文章标题

newpost.content='这是你的第一篇WordPress文章,你可以编辑或者发布它'#文章内容

#设置发布状态,默认是草稿

newpost.post_status='publish'

#设置发布目录(一篇文章可以属于多个分类目录)

newpost.terms_names={

'category':['Python3教程'],#我这里就添加一个,可以参考添加多个分类目录

'post_tag':['tag1','tag2'],#添加多个标签

}

#发布新建的文章,返回的是文章id,自己尝试

print(client.call(posts.NewPost(newpost)))

wordpress-xmlrpc里Methods类的taxonomies()方法。taxonomies方法主要用于获取文章分类,当然,这个分类不是指文章的栏目分类,具体是什么分类呢?我们使用taxonomies方法的GetTaxonomies()属性来获取一下所以分类试试,看获取到的分类是什么内容:

from wordpress_xmlrpc import Client

from wordpress_xmlrpc.methods import taxonomies

from wordpress_xmlrpc.exceptions import ServerConnectionError

try:

client=Client(url,wordpress_admin,wordpress_password)

except ServerConnectionError as e:

print('登录失败',e)

else:

print('登录成功')

for i in client.call(taxonomies.GetTaxonomies()):

print(i)

#打印结果如下:

#category

#post_tag

#post_format

发现跟我们之前写的文章发布分类字典内的键是一致的,所以GetTaxonomies()获取到的分类是指写文章发布代码时用到的分类变量名。

taxonomies方法还有一个比较重要的属性是GetTerms(),这个属性可以获取到某个分类下所有的值,这里的分类就是我们刚才用GetTaxonomies()获取到的“category、post_tag、post_format”三个分类。怎么应用呢?比如我们想知道网站总共有哪些标签,就可以使用GetTerms(‘post_tag’)来获取:

from wordpress_xmlrpc import Client

from wordpress_xmlrpc.methods import taxonomies

from wordpress_xmlrpc.exceptions import ServerConnectionError

try:

client=Client(url,wordpress_admin,wordpress_password)

except ServerConnectionError as e:

print('登录失败',e)

else:

print('登录成功')

for i in client.call(taxonomies.GetTerms('category')):

print(i.name)#打印所有的分类目录,标签同理

同样能查看所有的分类目录,我们也可以使用NewTerms()来创建一个新的分类目录,参考代码:

from wordpress_xmlrpc import Client

from wordpress_xmlrpc.methods import taxonomies

from wordpress_xmlrpc import WordPressTerm

from wordpress_xmlrpc.exceptions import ServerConnectionError

try:

client=Client(url,wordpress_admin,wordpress_password)

except ServerConnectionError as e:

print('登录失败',e)

else:

print('登录成功')

#NewTerms()属性,创建一个新的分类

cate=WordPressTerm() #实例化

cate.name='小说'

cate.slug='novel'#别名就是在url显示的内容

cate.taxonomy='category'#指定新建到哪个分类下

print(client.call(taxonomies.NewTerm(cate)))# 返回新创建的分类栏目id,已经新建成功!

封装函数

当然了,我们发布一篇正常的文章出了需要分类目录和标签,还是需要添加描述符的,那么具体代码可参考:

from wordpress_xmlrpc import Client

from wordpress_xmlrpc import WordPressPost

from wordpress_xmlrpc.methods import posts

def post(client,title,content,category):

newpost = WordPressPost()

newpost.title = title# 标题

newpost.content = content# 正文

newpost.terms_names = {

'category':[category]} # 分类目录

newpost.post_status = 'publish'# 发布状态设置为已发布

try:

pid = client.call(posts.NewPost(newpost))

purl = 'XXX/?p=%s' % pid# 发布的文章url

except:

return False

else:

return purl

if __name__== '__main__':

try:

client=Client(url,wordpress_admin,wordpress_password)

except:

print('登录失败')

else:

#print('登录成功')

print('文章发布成功:{0}'.format(post(client,title,content,'休闲文章')))# 传入post()函数

一般来说我们发布的内容可能你是采集到本地的文件夹中,这里直接提取带标签的内容,我们直接就可以在WordPress后台使用代码编辑发布。那么我们可以使用下面的代码进行遍历读取,然后发布,具体的内容可以设置不同的正则提取出来,比方说标签,可以提取strong标签(观察数量是否合适),描述符的话随便提取能概括的一段吧!这个比较困难。

def read_text():

path='E:/休闲文章'

files=os.listdir(path)#返回文件夹下所有的文件名字

for file in files: #遍历

if not os.path.isdir(file): #判断是否是文件

with open(path+'/'+file,'r',encoding='utf-8') as f:

iter_i=f.read()

#通过具体的正则,提取相关内容

pattern=re.compile('(.*?)

data=pattern.match(iter_i)

title=data.group(1)

content=re.sub(title,'',iter_i)

content_list={}

content_list['title']=title

content_list['content']=content

yield content_list

 类似资料: