Translations of this page?:

XML-RPC

:!: This page needs improvements :!:

experimental

DokuWiki has an experimental XML-RPC API which can be used to access/interact with your wiki from other applications. Up to now the provided API implements the Wiki RPC Interface 2.0 Specifications.

Get It Working

  1. You need at least the 2008-03-31 release of DokuWiki.
  2. Enable the XML-RPC interface in the “Advanced Options” section
  3. For security reasons it's safer to allow access to the XML-RPC over HTTPS only. The .htaccess.dist in the development version of DokuWiki contains some rewrite rules to do that.

Available Functions

Functions are listed in the following format:

Name The name of the function
Parameters A list of parameters to pass to the function
Data The type of the returned data
Description Short explanation what the function does

dokuwiki.getVersion

Name dokuwiki.getVersion
Parameters -
Data (string) version number
Description Returns the DokuWiki version of the remote Wiki.

wiki.getRPCVersionSupported

Name wiki.getRPCVersionSupported
Parameters -
Data (string) version number
Description Returns 2 with the supported RPC API version.

wiki.getPage

Name wiki.getPage
Parameters (string) pagename
Data (string) raw Wiki text
Description Returns the raw Wiki text for a page.

wiki.getPageVersion

Name wiki.getPageVersion
Parameters (string) pagename, (int) Timestamp
Data (string) raw Wiki text
Description Returns the raw Wiki text for a specific revision of a Wiki page.

wiki.getPageVersions

Name wiki.getPageVersions
Parameters (string) pagename, (int) offset
Data (array) each array item holds the following data:

$data['user'] = username
$data['ip'] = ip address
$data['type'] = type of change
$data['sum'] = summary
$data['modified'] =  modification date as UTC timestamp
$data['version'] = page version as timestamp
Description Returns the available versions of a Wiki page. The number of pages in the result is controlled via the recent configuration setting. The offset can be used to list earlier versions in the history.

wiki.getPageInfo

Name wiki.getPageInfo
Parameters (string) pagename
Data (array) each array item holds the following data:

$data['name'] = [[wiki:pagename]]
$data['lastModified'] = modifaction date as UTC timestamp
$data['author'] = author of the Wiki page.
$data['version'] = page version as timestamp
Description Returns informations about a Wiki page.

wiki.getPageInfoVersion

Name wiki.getPageInfoVersion
Parameters (string) pagename, (int) timestamp
Data (array) each array item holds the following data:

$data['name'] = [[wiki:pagename]]
$data['lastModified'] = modifaction date as UTC timestamp
$data['author'] = author of the Wiki page.
$data['version'] = page version as timestamp
Description Returns information about a specific version of a Wiki page.

wiki.getPageHTML

Name wiki.getPageHTML
Parameters (string) pagename
Data (string) rendered HTML
Description Returns the rendered XHTML body of a Wiki page.

wiki.getPageHTMLVersion

Name wiki.getPageHTMLVersion
Parameters (string) pagename, (int) timestamp
Data (string) rendered HTML
Description Returns the rendered HTML of a specific version of a Wiki page.

wiki.putPage

Name wiki.putPage
Parameters (string) pagename, (string) raw Wiki text, (array('sum'⇒(string) summary, 'minor'⇒(boolean)) parameter
Data (boolean)
Description Saves a Wiki Page.

wiki.listLinks

Name wiki.listLinks
Parameters (string) pagename
Data (array) each array item holds the following data:

$data['type'] = internal/external/interwiki
$data['page'] = the wiki page
$data['href'] = the complete URL
Description Returns a list of all links contained in a Wiki page.

wiki.getAllPages

Name wiki.getAllPages
Parameters -
Data (array)
Description Returns a list of all Wiki pages in the remote Wiki.

wiki.getBackLinks

Name wiki.getBackLinks
Parameters (string) pagename
Data (array)
Description Returns a list of backlinks of a Wiki page.

wiki.getRecentChanges

Name wiki.getRecentChanges
Parameters (int) timestamp
Data (array) each array item holds the following data:

$data['name'] = page id
$data['lastMmodified'] =  modification date as UTC timestamp
$data['author'] = author
$data['version'] = page version as timestamp
Description Returns a list of recent changes since given timestamp.

Sample Client

This is a small (and not really smart ;-)) sample client implemented in python, just save it to maybe ~/bin/dokuxmlrpc.py and make it executable. You can use it to test the XMLRPC interface, but it's not intended to be useful beyond that ;-). You'll need to install pythons xmlrpclib module in order to use it! You also have to change the settings WIKI, USER and PWD.

#!/usr/bin/env python
# ###################################################################
# @file     ~/bin/dokuxmlrpc.py
# @author   Michael Klier <chi@chimeric.de>
# @modified Jan 25, 2008 19:08:05
#
# utility to query DokuWikis' XMLRPC interface
# ###################################################################
 
__author__ = "Michael Klier"
__version__ = "0.1"
 
# CONFIG
WIKI='WIKIURL'
USER='USERNAME'
PWD='PASSWORD'
 
import sys
import getopt
from urllib import urlencode
 
try:
    import xmlrpclib
except ImportError:
    print "This script needs the xmlrpclib module!"
    sys.exit(1)
 
# prints a hopefully usefull help message
def help():
    print """
NAME
        dokuwikixmlrpc.py - utility to query DokuWikis' XMLRPC interface
 
SYNOPSIS
        dokuxmlrpc.py --help
        dokuxmlrpc.py -h
        dokuxmlrpc.py [option]
 
DESCRIPTION
        dokuxmlrpc.py is a small utility to query DokuWikis' XMLRPC interface.
        It supports all provided callbacks.
 
OPTIONS
        -h or --help
                This options displays this help mesage.
 
        --backlinks [wikipage]
                Shows a list of links which link to the given wikipage.
 
        --getpage [wikipage]
                Returns the wiki markup of the given wikipage.
 
        --gethtml [wikipage]
                Returns the HTML body of the given wikipage.
 
        --pageinfo [wikipage]
                Shows some information about the given wikipage like author,
                date of last modification a.s.o..
 
        --listpages
                Shows a list of all pages of the wiki.
 
        --listlinks [wikipage]
                Shows a list of all links contained in a given wiki page.
 
        --recent [timestamp]
                Shows a list of changed pages since the given timestamp.
 
        --putpage [wikipage]
                Asks for a wiki text and a summary and saves the given wikpage.
 
AUTHOR
        Michael Klier <chi@chimeric.de>
 
"""
 
## BEGIN MAIN
if __name__ == '__main__':
    url = WIKI + "/lib/exe/xmlrpc.php?" + urlencode({'u':USER,'p':PWD})
    rpc = xmlrpclib.ServerProxy(url)
 
    opts_short = 'h'
    opts_long  = ['help', 'dokuversion', 'backlinks=', 'getpage=', 'gethtml=', 'pageinfo=', 'listpages', 'listlinks=', 'recent=', 'putpage=']
 
    try:
        argv = sys.argv[1:]
        opts, args = getopt.getopt(argv, opts_short, opts_long)
 
        for opt, arg in opts:
 
            try:
 
                if opt in ('-h', '--help'):
                    help()
 
                if opt == '--dokuversion':
                    print rpc.dokuwiki.getVersion()
 
                if opt == '--backlinks':
                    backlinks = rpc.wiki.getBackLinks(arg)
                    for link in backlinks:
                        print link
 
                if opt == '--getpage':
                    print rpc.wiki.getPage(arg)
                    sys.exit(0)
 
                if opt == '--gethtml':
                    print rpc.wiki.getPageHTML(arg)
 
                if opt == '--pageinfo':
                    info = rpc.wiki.getPageInfo(arg)
                    print "name:\t\t", info['name']
                    print "author:\t", info['author']
                    print "lastModified:\t", info['lastModified']
                    print "version:\t", info['version']
 
                if opt == '--listpages':
                    pages = rpc.wiki.getAllPages()
                    for page in pages:
                        print page
 
                if opt == '--listlinks':
                    links = rpc.wiki.listLinks(arg)
                    for link in links:
                        print "type: %(type)s \tpage: %(page)s href: %(href)s" % link
 
                if opt == '--recent':
                    changes = rpc.wiki.getRecentChanges(int(arg))
                    for change in changes:
                        print "last modified: %(lastModified)s author: %(author)s name: %(name)s" % change
 
                if opt == '--putpage':
                    params = {}
 
                    print "insert text to write:"
                    text = sys.stdin.read()
 
                    print "insert summary:"
                    params['sum'] = sys.stdin.read()
 
                    print "insert minor (1)"
                    params['minor'] = sys.stdin.read()
 
                    rpc.wiki.putPage(arg, text, params)
 
                sys.exit(0)
 
            # catch XMLRPC fault
            except xmlrpclib.Fault, err:
                print "dokuxmlrpc.py: %s" % err
                sys.exit(0)
 
    except getopt.GetoptError, err:
        print "dokuxmlrpc.py: %s" % err
        print "Try 'dokuxmlrpc --help' for more information."
        sys.exit(2)
 
# vim:ts=4:sw=4:enc=utf-8:

Discussion

How about authentication? I'm hacking together a small application which will allow me to insert pages into my wiki from my Workstation (more on that later) but how can I be sure that noone else is modifying my files? – Mike (x [at] xarumanx [dot] net - 08/04/09 - 16:48)
Don't bother, I just found out that reading the page does really help…

Just as clarification, the XMLRPC interface is aware of authentication (basic http auth, though I'd recommend to always use https if possible) and DokuWikis ACL feature. — Michael Klier 2008/04/09 23:31

How about image (and file) upload ? — Aurélien Bompard 2008/05/07 16:44
That's not implemented yet, but it's planned. — Michael Klier 2008/05/07 17:36
 
wiki/xmlrpc.txt · Last modified: 2008/05/07 17:37 by chi
 
Imprint Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki
WikiForumIRCBugsTranslate