Search form

Python: XML-RPC Requests

Tinkering with Python xmlrpclib, in this case for updating a WordPress blog from the command line. Using Python 2.7.6 here. xmlrpclib is included with Python 2.7, but if you need it, install with Pip.

import xmlrpclib

server = xmlrpclib.Server("http://www.mywordpress.com/xmlrpc.php", verbose=True)
user = "my_username"
password = "my_password"

#List available methods supported by WordPress
methods = server.system.listMethods()
for method in methods:
    print method

def wpGetComments():
    """ Get comments from a given WP post """
    """ https://codex.wordpress.org/XML-RPC_WordPress_API/Comments#wp.getComments """
    listComments = server.wp.getComments(0, user, password, {'post_id': 1302, 'number': 10})
    for comment in listComments:
        print "Status: {0}\nAuthor: {1}\nDate: {2}\nComment: {3}\n\n".format(comment["status"], \
            comment["author"], \
            comment["date_created_gmt"], \
            comment["content"][:50])
    
wpGetComments()

def wpGetPosts():
    """ Get all the posts from your WP blog """
    """ https://codex.wordpress.org/XML-RPC_WordPress_API/Posts """
    listPosts = server.wp.getPosts(0, user, password, {'post_status': 'publish'})
    for post in listPosts:
        print "Title: {0}\nAuthor: {1}\nDate: {2}\nText: {3}\n\n".format(post["post_title"], \
        post["post_author"], \
        post["post_date"], \
        post["post_content"][:50])        
        
wpGetPosts()

def wpCreatePost():
    """ Create a new post on your WP blog """
    """ https://codex.wordpress.org/XML-RPC_WordPress_API/Posts#wp.newPost """
    createPost = server.wp.newPost(0, user, password, 
                                  {'post_type': 'post', 'post_status': 'draft', 
                                   'post_author': 1, 'post_title': 'Test XMLRPC', 
                                   'post_content': 'abcdefghijklm'})
    
    # WordPress returns post ID if successful
    if server.methodReponse.value is not None:
        # Needs better logic but you get the point
        print "Post created!"

wpCreatePost()

def wpEditPost():
    """ Edit an existing post on your WP blog """
    """ https://codex.wordpress.org/XML-RPC_WordPress_API/Posts#wp.editPost """
    editPost = server.wp.editPost(0, user, password, 1343, \ 
                   {'post_title': 'Create WordPress Posts from an RSS Feed'})
               
    # WordPress returns 1 if successful    
    if server.methodResponse.value is not None:
        # Needs better logic but you get the point
        print "Post edited!"                              
                                  
wpEditPost()

Categories: