WordPress自动发布文章-Python模块wordpress_xmlrpc

鳄鱼君

发表文章数:642

Vieu四代商业主题

高扩展、安全、稳定、响应式布局多功能模板。

¥69 现在购买
首页 » Python » WordPress自动发布文章-Python模块wordpress_xmlrpc

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

未经允许不得转载:作者:鳄鱼君, 转载或复制请以 超链接形式 并注明出处 鳄鱼君
原文地址:《WordPress自动发布文章-Python模块wordpress_xmlrpc》 发布于2020-02-26

分享到:
赞(0) 赏杯咖啡

评论 抢沙发

4 + 1 =


文章对你有帮助可赏作者一杯咖啡

支付宝扫一扫打赏

微信扫一扫打赏

Vieu4.6主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。
切换注册

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录
切换登录

注册