wordpress学习五: 通过wordpress_xmlrpc的python包远程操作wordpress

wordpress提供了丰富的xmlrpc接口api来供我们远程操控wp的内容。伟大的开源社区有人就将这些api做了一下封装,提供了一个功能比较完整的python库,库的使用文档地址http://python-wordpress-xmlrpc.readthedocs.org/ , 文档内容还是很全面的。这里我将自己试验的一些内容做一下总结。

wordpress有一个revision的机制,导致我们在通过api接口更新文档时,会在数据库中保存2条记录,一条是正文,另外一条 id-revision之类的记录,对我来说没什么用,所以先通过代码禁用掉。

define(‘WP_POST_REVISIONS‘, false);

在这个python类库中,WordPressPost对象的属性通过setattr来实现的。

查询Post

利用api可以获取指定的post的相关信息,具体有哪些信息可以参看下面新增post的那个表。一个简单的获取post列表的代码例子如下:

def TestGetPost():
    wp = wp_server.call(wordpress_xmlrpc.methods.posts.GetPosts())
    for w in wp:
        print w.title
        print w.post_status

此外,GetPosts函数接受不同的参数来进行条件查询, 例如下面的的语句返回最近更新的100个post

recently_modified = client.call(posts.GetPosts({‘orderby‘: ‘post_modified‘, ‘number‘: 100}))

下面的代码是返回从offset开始的指定条数的post条目:

posts = client.call(posts.GetPosts({‘number‘: increment, ‘offset‘: offset}))

新建Post

新建的post公国wordpress_xmlrpc.methods.posts.NewPost(WordPressPost)来创建,以下是一个简短的新建一个Post的代码段。

    post = WordPressPost()
    post.title = "test4"
    post.date_modified = datetime.datetime.now()
    post.content = "全英文界面,但有非官方的中文翻译。推荐直接阅读英语原文,既准确可靠又可提高英语水平。做题方式模拟正式比赛,采用标准测评机、文件输入输出、直接提交程序源文件的测评方式。"
    post.excerpt = "全英文界面,但有非官方的中文翻译"
    post.post_status = "publish"
    print wp_server.call( wordpress_xmlrpc.methods.posts.NewPost(post))

插入时支持的参数有:

 python中字段    xmlrpc对应字段   含义 
date post_date_gmt  
date_modified post_modified_gmt  post的修改时间
slug post_name  
post_status post_status  post的状态, 可选draft、publish,常用publish就可以直接发布post了
title     post标题
content post_content  post 内容 
excerpt post_excerpt  摘要 
link    
comment_status    
ping_status    
terms    
terms_names    
custom_fields    
enclosure    
post_format    
thumbnail post_thumbnail  
sticky    置顶显示, 设置True
post_type    post的类型, 默认为post, 也可以为page,
parent_id post_parent  上级文章的id
menu_order    
guid    
mime_type post_mime_type  

设置post的category和tag, Post的terms属性对应 WordPressTerm 对象。如果要新增一个term,可以用下面的代码来进行

post = WordPressPost()
post.title = ‘Post with new tags‘
post.content = ‘...‘
post.terms_names = {
        ‘post_tag‘: [‘tagA‘, ‘another tag‘],
        ‘category‘: [‘My Child Category‘],
}
post.id = client.call(posts.NewPost(post))

编辑Post

编辑已经发布的Post,和新建基本上一样, 还是依赖于WordPressPost结构类

def TestModifyPost():
    wp = wp_server.call(wordpress_xmlrpc.methods.posts.GetPost(1))
    wp.sticky = True
    print wp_server.call(wordpress_xmlrpc.methods.posts.EditPost(wp.id, wp))

上面的代码将postid是1的post进行置顶显示。

时间: 2024-11-13 08:05:41

wordpress学习五: 通过wordpress_xmlrpc的python包远程操作wordpress的相关文章

全面学习 Python 包:包的构建与分发

首发于公众号:Python编程时光 1. 为什么需要对项目分发打包? 平常我们习惯了使用 pip 来安装一些第三方模块,这个安装过程之所以简单,是因为模块开发者为我们默默地为我们做了所有繁杂的工作,而这个过程就是 打包. 打包,就是将你的源代码进一步封装,并且将所有的项目部署工作都事先安排好,这样使用者拿到后即装即用,不用再操心如何部署的问题(如果你不想对照着一堆部署文档手工操作的话). 不管你是在工作中,还是业余准备自己写一个可以上传到 PyPI 的项目,你都要学会如何打包你的项目. Pyth

Python基础学习五

Python基础学习五 迭代 for x in 变量: 其中变量可以是字符串.列表.字典.集合. 当迭代字典时,通过字典的内置函数value()可以迭代出值:通过字典的内置函数items()可以迭代出键值对. for key in dict: #迭代键 for val in dict.value(): #迭代值 for k,v in dict.items(): #迭代键值对 当迭代列表时,通过内置函数enumerate()可以迭代出索引加值. for i in list #迭代列表 for i

[转载]Python 包管理工具解惑

原文链接:http://zengrong.net/post/2169.htm Python 包管理工具解惑 python packaging 一.困惑 作为一个 Python 初学者,我在包管理上感到相当疑惑(嗯,是困惑).主要表现在下面几个方面: 这几个包管理工具有什么不同? distutils setuptools distribute disutils2 distlib pip 什么时候该用pip,什么时候该用 setup.py ,它们有关系么? easy_install.ez_setup

第三百五十八节,Python分布式爬虫打造搜索引擎Scrapy精讲—将bloomfilter(布隆过滤器)集成到scrapy-redis中

第三百五十八节,Python分布式爬虫打造搜索引擎Scrapy精讲-将bloomfilter(布隆过滤器)集成到scrapy-redis中,判断URL是否重复 布隆过滤器(Bloom Filter)详解 基本概念 如果想判断一个元素是不是在一个集合里,一般想到的是将所有元素保存起来,然后通过比较确定.链表,树等等数据结构都是这种思路. 但是随着集合中元素的增加,我们需要的存储空间越来越大,检索速度也越来越慢.不过世界上还有一种叫作散列表(又叫哈希表,Hash table)的数据结构.它可以通过一

Lynda.com学习体验之Become a Python Programmer

本人最近正好在学习http://Lynda.com的Python课程.Lynda上面确实有Python系列课程的,以我的学习经验,Lynda的课程质量惊艳,对于刚入门或者工作一段时间的同学来说,绝对是绝佳的材料.但是http://lynda.com是收费的,每月34.99美金的,本人在淘宝上买了一个lynda永久会员 (网址:Lynda会员账号 永久免费 离线下载观看 永久有效 一人一号) ,目前来看用着很爽,下面就Lynda上面针对Python的Learning Path做个简单介绍. Pyt

Python学习系列(四)Python 入门语法规则2

Python学习系列(四)Python 入门语法规则2 2017-4-3 09:18:04 编码和解码 Unicode.gbk,utf8之间的关系 2.对于py2.7, 如果utf8>gbk, utf8解码成Unicode,再将unicode编码成gbk 对于py3.5 如果utf8>gbk, utf8 直接编码成gbk(中间那一步直接被优化了) 3.很多时候,这个可以直接跳过,只有当编码出下问题的时候,再考虑这个知识点 二.运算符 1.算数运算: 2.比较运算: 3.赋值运算: 4.逻辑运算

Python 包管理工具解惑

Python 包管理工具解惑 本文链接:http://zengrong.net/post/2169.htm python packaging 一.困惑 作为一个 Python 初学者,我在包管理上感到相当疑惑(嗯,是困惑).主要表现在下面几个方面: 这几个包管理工具有什么不同? distutils setuptools distribute disutils2 distlib pip 什么时候该用pip,什么时候该用 setup.py ,它们有关系么? easy_install.ez_setup

Python学习之路——强力推荐的Python学习资料

资料一:程序媛想事儿(Alexia)总结 Python是一种面向对象.直译式计算机程序设计语言.它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用縮进来定义语句块.与Scheme.Ruby.Perl.Tcl等动态语言一样,Python具备垃圾回收功能,能够自动管理内存使用.它经常被当作脚本语言用于处理系统管理任务和网络程序编写,然而它也非常适合完成各种高级任务. Python上手虽然容易,但与其它任何语言一样要学好Python并非一日之功.我的Pyth

mongodb学习(五) 查询

1. 按条件查询: db.users.find({"name":"MM1"}) 2.find的第二个参数可以指定要返回的字段:这里1 表示要显示的字段,0 表示要剔除的字段 db.users.find({"name":"MM1"},{"name":1,"age":1}) db.users.find({"name":"MM1"},{"nam