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进行置顶显示。
wordpress学习五: 通过wordpress_xmlrpc的python包远程操作wordpress的更多相关文章
- python fabric远程操作和部署
博客迁往:新地址(点击直达) 新博客使用markdown维护,线下有版本号库,自己写的所以会定时更新同步.同一时候提供更好的导航和阅读体验 csdn对markdown支持不好.所以旧版不会花时间进行同 ...
- 全面学习 Python 包:包的构建与分发
首发于公众号:Python编程时光 1. 为什么需要对项目分发打包? 平常我们习惯了使用 pip 来安装一些第三方模块,这个安装过程之所以简单,是因为模块开发者为我们默默地为我们做了所有繁杂的工作,而 ...
- 常用统计分析python包开源学习代码 numpy pandas matplotlib
常用统计分析python包开源学习代码 numpy pandas matplotlib 待办 https://github.com/zmzhouXJTU/Python-Data-Analysis
- Python基础学习五
Python基础学习五 迭代 for x in 变量: 其中变量可以是字符串.列表.字典.集合. 当迭代字典时,通过字典的内置函数value()可以迭代出值:通过字典的内置函数items()可以迭代出 ...
- Python包模块化调用方式详解
Python包模块化调用方式详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一般来说,编程语言中,库.包.模块是同一种概念,是代码组织方式. Python中只有一种模块对象类型 ...
- 小猪的Python学习之旅 —— 16.再尝Python数据分析:采集拉勾网数据分析Android就业行情...
一句话概括本文: 爬取拉钩Android职位相关数据,利用numpy,pandas和matplotlib对招人公司 情况和招聘要求进行数据分析. 引言: 在写完上一篇<浅尝Python数据分析: ...
- Python 包管理工具解惑
Python 包管理工具解惑 本文链接:http://zengrong.net/post/2169.htm python packaging 一.困惑 作为一个 Python 初学者,我在包管理上感到 ...
- 用python定时文章发布wordpress
用python定时文章发布wordpress: 流程: 采集 - 筛选文章 - wordpress文章发布. wordpress文章发布代码:python利用模块xmlrpclib发布文章非常便捷,省 ...
- python包管理-distutils,setuptools,pip,virtualenv等介绍
python包管理-distutils,setuptools,pip,virtualenv等介绍 对于每个编程语言来说打包和发布开发包往往非常重要,而作为一个编程者能够快速容易的获得并应用这些由第三方 ...
随机推荐
- [Python2]介绍关于Uiautomator的watcher使用场景及使用方法
[官方的介绍]: Watcher You can register watcher to perform some actions when a selector can not find a mat ...
- JSONP方法解决跨域请求
Ajax跨域请求的问题 跨域:跨域名, 一个域名下的文件去请求了和他不一样的域名下的资源文件(注意是请求文件,而不是数据接口),那么就会产生跨域请求,下面来写一个ajax来跨域请求的例子 <!D ...
- 【SDOI2011 第2轮 DAY1】消防 -[树的直径+树链剖分][解题报告]
[SDOI2011 第2轮 DAY1]消防 题面: SDOI2011 第2轮 DAY1]消防 时间限制 : 20000 MS 空间限制 : 565536 KB 问题描述 时限\(2s\) 某个国家有\ ...
- php 把一个一维数组的值依次赋值到二维数组中的每一项
Array( [0] => 1 [1] => 4 [2] => 2 [3] => 6 ) Array( [0] => Array ( [field_name] => ...
- nmap数据流
扫描者:1.1.1.1被扫描者:2.2.2.2 0x00 介绍 在日常工作对目标信息收集时,我们经常用到nmap这款网络探测工具和安全/端口扫描器,虽然我们关注的是结果(如目标开启了哪些危险端口,什么 ...
- 爬虫header和cookie
def on_start(self): self.crawl('http://bbs.byr.cn/board/Python', headers={'X-Requested-With': 'XMLHt ...
- JS输入框邮箱自动提示(带有demo和源码)
今天在javascriptQQ群里面 有童鞋问到 有没有 "JS输入框邮箱自动提示"插件,即说都找遍了github上源码 都没有看到这样类似的插件,然后我想了下 "JS输 ...
- Python2.7-gzip
gzip模块,提供了简单的压缩和解压缩文件的接口,和 GNU 程序的 gzip 和 gunzip 类似,数据压缩是通过 zlib 模块实现的 1.模块的类: gzip.GzipFile([filena ...
- JAVA框架 Spring 事务
一.我们之前在hibernate的时候,需要直接写事务,需要绑定当前线程保证获取同一个连接,虽然hibernate的帮我们封装绑定当前现成的操作,但是需要我们手动的去开启和关闭事务. 而spring帮 ...
- jq插件封装格式
(function($) { // closure $.fn.hilight = function( options ) { //将方法定义在$的fn上 var defaults = { textCo ...