You need at least the 2008-03-31 release of
DokuWiki.
Enable the
XML-
RPC interface in the “Advanced Options” section
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.
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 |
| Name | dokuwiki.getVersion |
| Parameters | - |
| Data | (string) version number |
| Description | Returns the DokuWiki version of the remote Wiki. |
| Name | wiki.getRPCVersionSupported |
| Parameters | - |
| Data | (string) version number |
| Description | Returns 2 with the supported RPC API version. |
| Name | wiki.getPage |
| Parameters | (string) pagename |
| Data | (string) raw Wiki text |
| Description | Returns the raw Wiki text for a page. |
| 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. |
| 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. |
| 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. |
| 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. |
| Name | wiki.getPageHTML |
| Parameters | (string) pagename |
| Data | (string) rendered HTML |
| Description | Returns the rendered XHTML body of a Wiki page. |
| 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. |
| Name | wiki.putPage |
| Parameters | (string) pagename, (string) raw Wiki text, (array('sum'⇒(string) summary, 'minor'⇒(boolean)) parameter |
| Data | (boolean) |
| Description | Saves a Wiki Page. |
| 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. |
| Name | wiki.getAllPages |
| Parameters | - |
| Data | (array) |
| Description | Returns a list of all Wiki pages in the remote Wiki. |
| Name | wiki.getBackLinks |
| Parameters | (string) pagename |
| Data | (array) |
| Description | Returns a list of backlinks of a Wiki page. |
| 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. |
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:
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
That's not implemented yet, but it's planned. —
Michael Klier 2008/05/07 17:36