wordpress提供了丰富的xmlrpc接口api来供我们远程操控wp的内容。伟大的开源社区有人就将这些api做了一下封装,提供了一个功能比较完整的python库,库的使用文档地址http://python-wordpress-xmlrpc.readthedocs.org/ , 文档内容还是很全面的。这里我将自己试验的一些内容做一下总结。
使用前,先安装第三方库:
easy_install python-wordpress-xmlrpc 或者 pip install python-wordpress-xmlrpc
带有自定义栏目字段的发布文章代码
#coding:utf-8 from wordpress_xmlrpc import Client, WordPressPost from wordpress_xmlrpc.methods.posts import GetPosts, NewPost from wordpress_xmlrpc.methods.users import GetUserInfo from wordpress_xmlrpc.methods import posts from wordpress_xmlrpc.methods import taxonomies from wordpress_xmlrpc import WordPressTerm from wordpress_xmlrpc.compat import xmlrpc_client from wordpress_xmlrpc.methods import media, posts import sys reload(sys) sys.setdefaultencoding('utf-8') wp = Client('http://您的域名/xmlrpc.php', '后台账号', '后台密码') post = WordPressPost() post.title = '文章标题' post.content = '文章内容' post.post_status = 'publish' #文章状态,不写默认是草稿,private表示私密的,draft表示草稿,publish表示发布 post.terms_names = { 'post_tag': ['test', 'firstpost'], #文章所属标签,没有则自动创建 'category': ['Introductions', 'Tests'] #文章所属分类,没有则自动创建 } post.custom_fields = [] #自定义字段列表 post.custom_fields.append({ #添加一个自定义字段 'key': 'price', 'value': 3 }) post.custom_fields.append({ #添加第二个自定义字段 'key': 'ok', 'value': '天涯海角' }) post.id = wp.call(posts.NewPost(post))
带有特色图像缩略图的发布文章
#coding:utf-8 from wordpress_xmlrpc import Client, WordPressPost from wordpress_xmlrpc.methods.posts import GetPosts, NewPost from wordpress_xmlrpc.methods.users import GetUserInfo from wordpress_xmlrpc.methods import posts from wordpress_xmlrpc.methods import taxonomies from wordpress_xmlrpc import WordPressTerm from wordpress_xmlrpc.compat import xmlrpc_client from wordpress_xmlrpc.methods import media, posts import sys reload(sys) sys.setdefaultencoding('utf-8') wp = Client('http://您的域名/xmlrpc.php', '后台账号', '后台密码') filename = './my.jpg' #上传的图片文件路径 # prepare metadata data = { 'name': 'picture.jpg', 'type': 'image/jpeg', # mimetype } # read the binary file and let the XMLRPC library encode it into base64 with open(filename, 'rb') as img: data['bits'] = xmlrpc_client.Binary(img.read()) response = wp.call(media.UploadFile(data)) # response == { # 'id': 6, # 'file': 'picture.jpg' # 'url': 'http://www.example.com/wp-content/uploads/2012/04/16/picture.jpg', # 'type': 'image/jpeg', # } attachment_id = response['id'] post = WordPressPost() post.title = '文章标题' post.content = '文章正文' post.post_status = 'publish' #文章状态,不写默认是草稿,private表示私密的,draft表示草稿,publish表示发布 post.terms_names = { 'post_tag': ['test', 'firstpost'], #文章所属标签,没有则自动创建 'category': ['Introductions', 'Tests'] #文章所属分类,没有则自动创建 } post.thumbnail = attachment_id #缩略图的id post.id = wp.call(posts.NewPost(post))
单独创建新的分类和标签
#coding:utf-8 from wordpress_xmlrpc import Client, WordPressPost from wordpress_xmlrpc import WordPressTerm from wordpress_xmlrpc.methods import taxonomies import sys reload(sys) sys.setdefaultencoding('utf-8') wp = Client('http://您的域名/xmlrpc.php', '后台账号', '后台密码') #新建标签 tag = WordPressTerm() tag.taxonomy = 'post_tag' tag.name = 'My New Tag12'#标签名称 tag.slug = 'bieming12'#标签别名,可以忽略 tag.id = wp.call(taxonomies.NewTerm(tag))#返回的id #新建分类 cat = WordPressTerm() cat.taxonomy = 'category' cat.name = 'cat1'#分类名称 cat.slug = 'bieming2'#分类别名,可以忽略 cat.id = wp.call(taxonomies.NewTerm(cat))#新建分类返回的id #新建子分类 parent_cat = client.call(taxonomies.GetTerm('category', 20))#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(taxonomies.NewTerm(child_cat))#新建分类返回的id
查询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,和新建基本上一样, 还是依赖于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进行置顶显示。