zoukankan      html  css  js  c++  java
  • 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进行置顶显示。 

  • 相关阅读:
    网站页面底部的著作权(版权)声明应该怎么写?
    有没有主宰世界的主算法?
    CSS cursor 和 opacity 属性
    Html中文字过多,单行超出和多行超出显示省略号
    CSS overflow 属性
    Android之利用JSBridge库实现Html,JavaScript与Android的所有交互
    AndroidStudio怎样导入library项目开源库
    HTMl与CSS
    Android之仿微信发朋友圈图片选择功能
    Android 之WebView实现下拉刷新和其他相关刷新功能
  • 原文地址:https://www.cnblogs.com/kwliu/p/4794219.html
Copyright © 2011-2022 走看看