DokuWiki

It's better when it's simple

User Tools

Site Tools


devel:xmlrpc

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Next revisionBoth sides next revision
devel:xmlrpc [2017-09-02 10:08] – [XML-RPC] 59.63.249.176devel:xmlrpc [2018-05-29 13:48] andi
Line 1: Line 1:
 ====== XML-RPC ====== ====== XML-RPC ======
-[[:experimental]] 
  
-DokuWiki has an experimental [[wp>XML-RPC]] API which can be used to access/interact with your wiki from other applications. The API implements the [[http://www.ecyrd.com/JSPWiki/wiki/WikiRPCInterface2|Wiki RPC Interface 2.0 Specifications]] in the ''wiki.*'' namespace and adds additional DokuWiki specific calls in the ''dokuwiki.*'' namespace. See [[custom_webservices|web services]] for some general notes about DokuWikis possibilities.+DokuWiki has [[wp>XML-RPC]] API which can be used to access/interact with your wiki from other applications. The API implements the [[http://www.ecyrd.com/JSPWiki/wiki/WikiRPCInterface2|Wiki RPC Interface 2.0 Specifications]] in the ''wiki.*'' namespace and adds additional DokuWiki specific calls in the ''dokuwiki.*'' namespace. See [[custom_webservices|web services]] for some general notes about DokuWikis possibilities
 + 
 +Plugins can add their own calls to the API using [[devel:remote_plugins|Remote Plugin components]].
  
 Questions and suggestions to extend and improve the API should be directed to the [[:mailinglist]]. Questions and suggestions to extend and improve the API should be directed to the [[:mailinglist]].
 +
 ===== Get It Working ===== ===== Get It Working =====
   - You need at least the 2008-03-31 release of DokuWiki.   - You need at least the 2008-03-31 release of DokuWiki.
Line 19: Line 21:
  
 ===== Sample XML Requests ===== ===== Sample XML Requests =====
 +
 +Note: you should use an XML-RPC library instead of hand-crafting your requests.
 +
 Here is an example of how to post to the API: Here is an example of how to post to the API:
 +
 <code xml> <code xml>
 POST /RPC2 HTTP/1.0 POST /RPC2 HTTP/1.0
Line 62: Line 68:
  <param>   <param> 
  <value>  <value>
- <string>======  Devices List ====== + <string>This is my page content</string>
-Report Created on 2017-05-25 16:23:37 +
-===== Servers ===== +
-^ID ^Name ^Description ^IP ^Type ^OS ^Last Scan ^ +
-|18 |[[:inventory:devices:Computer:adminserver ID-18|adminserver]] |AT/AT COMPATIBLE |192.168.1.1 |Server |Microsoft Windows 2000 Server |2017-05-25 16:09:10 | +
- +
- </string>+
  </value>  </value>
  </param>  </param>
Line 162: Line 162:
 ^ Description | Allows you to lock or unlock a whole bunch of pages at once. Useful when you are about to do an operation over multiple pages. | ^ Description | Allows you to lock or unlock a whole bunch of pages at once. Useful when you are about to do an operation over multiple pages. |
 ^ Since       | 2009-03-06 (1) | ^ Since       | 2009-03-06 (1) |
 +
 +==== dokuwiki.deleteUsers ====
 +
 +^ Name        | ''dokuwiki.deleteUsers'' |
 +^ Parameters  | (array) list of usernames to delete |
 +^ Data        | (bool) true if the users were deleted |
 +^ Description | Allows you to delete one or more users. Useful to implement GDPR right to be forgotten tools. |
 +^ Since       | 2018-05-24 |
  
 ==== wiki.getRPCVersionSupported ==== ==== wiki.getRPCVersionSupported ====
Line 382: Line 390:
   * -99999 -> Unknown server error.   * -99999 -> Unknown server error.
  
-===== Sample Java Client ===== +===== Sample Clients =====
-A java client for Dokuwiki is available on [[https://github.com/gturri/dokujclient|github]]. +
- +
-Example which displays the title of the wiki and the list of its pages: +
-<code java> +
-import dw.xmlrpc.DokuJClient; +
-import dw.xmlrpc.Page; +
- +
-public class Main { +
-  public static void main(String[] args) throws Exception{ +
-    String url = "http://mywiki/lib/exe/xmlrpc.php"; +
-    String user = "myUser"; +
-    String pwd = "myPassword"; +
- +
-    DokuJClient client = new DokuJClient(url, user, pwd); +
-    System.out.println("Pages in the wiki " + client.getTitle() + " are:"); +
-    for(Page page : client.getAllPages()){ +
-      System.out.println(page.id()); +
-    } +
- +
-  } +
-+
-</code> +
- +
-===== Sample PHP Client ===== +
-This simple example will pull the version information from the given DokuWiki. +
- +
-  * You need to download and install the library [[http://phpxmlrpc.sourceforge.net/|XML-RPC for PHP]] for this example. +
-  * The URL of the DW-Server must be given **without** the procotol (<nowiki>http://</nowiki>). +
- +
-<code php> +
-<?php +
-include('lib/xmlrpc.inc');  // or whereever you have downloaded and put the XML-RPC for PHP libraries +
- +
-// create a new client instance +
-$c = new xmlrpc_client('/lib/exe/xmlrpc.php', 'adminwiki.kreisbote.de', 80); +
- +
-// enable debugging to see more infos :-) (well, not for production code) +
-$c->setDebug(1); +
- +
-// create the XML message to send +
-$m = new xmlrpcmsg('dokuwiki.getVersion'); +
- +
-// send the message and wait for response +
-$r = $c->send($m); +
-if($r == false) die('error'); +
-if(!$r->faultCode()){ +
-    // seems good. Now do whatever you want with the data +
-    $v = php_xmlrpc_decode($r->value()); +
-    echo "$v"; +
-+
-</code> +
- +
-<code php> +
-<?php +
-include('/lib/xmlrpc.inc'); +
- +
-$c = new xmlrpc_client('/lib/exe/xmlrpc.php', 'localhost', 80); +
-$c->setDebug = 1; +
- +
-$m = new xmlrpcmsg('wiki.putAttachment'); +
-$m->addParam(new xmlrpcval("file.png", "string")); +
-$m->addParam(new xmlrpcval("iVBORw0KGgoAAAANSUhEUgAAADAAAAAwC.....<base64 string here>...", "base64")); +
-$m->addParam(new xmlrpcval(array("ow" => new xmlrpcval(true, "boolean")), "struct")); +
- +
-$r = $c->send($m); +
-if($r == false) die('foo!'); +
- +
-// Output the response object +
-// var_dump($r); +
-$r = $c->send($m); +
- +
-if(!$r->faultCode()) { +
-    $v = php_xmlrpc_decode($r->value()); +
-    echo $v; +
-} else { +
-    echo $r->faultString(); +
-+
- +
-?> +
-</code> +
- +
-DokuWiki has its own XML-RPC library which could also be used. A simple client using that library looks like this: +
- +
-<code php> +
-<?php +
-require_once('inc/init.php'); +
- +
-$client = new IXR_Client('http://localhost/devel/dokuwiki/lib/exe/xmlrpc.php'); +
-$client->debug = 1; // enable for debugging +
-$client->query('dokuwiki.login','admin','pass'); +
-$ok = $client->getResponse(); +
-if($ok) { +
-   $client->query('wiki.getPage','wiki:syntax'); +
-   echo $client->getResponse(); +
-+
-</code> +
- +
-===== Sample Perl Client ===== +
- +
-[[https://metacpan.org/pod/Dokuwiki::RPC::XML::Client|Dokuwiki::RPC::XML::Client]] is simple dokuwiki client written on top of [[https://metacpan.org/pod/RPC::XML::Client|RPC::XML::Client]], it comes with a  [[https://metacpan.org/pod/distribution/Dokuwiki-RPC-XML-Client/scripts/dokuwiki-client|CLI command]] you can use from shell. +
- +
-you can also write RPC::XML::Client code directly following this simple example will pull the version information and the list of documents in the ''wiki'' namespace from the given Dokuwiki. It also lists all ''.png'' mediafiles from the same namespace and its child namespaces. +
- +
-<code perl> +
-use strict; +
-use warnings; +
-use feature 'say'; +
-use RPC::XML::Client; +
-use Data::Dumper; +
- +
-my $client = +
-  RPC::XML::Client->new('https://www.example.com/wiki/lib/exe/xmlrpc.php'); +
- +
-my $res = $client->send_request('dokuwiki.getVersion'); +
-say 'dokuwiki.getVersion = ' . $res->value; +
- +
-my $namespace = 'wiki'; +
-my $req = +
-  RPC::XML::request->new( 'dokuwiki.getPagelist', +
-    RPC::XML::string->new($namespace), +
-    RPC::XML::struct->new() ); +
-$res = $client->send_request($req); +
-say "dokuwiki.getPagelist = \n" . Dumper $res->value; +
- +
- +
-# if given and >0 'depth' is relative to the searched namespace and is a maximum. +
-# setting 'hash' to 1 will put extra load on server. +
-$res = $client->send_request( +
- RPC::XML::request->new( 'wiki.getAttachments', +
- RPC::XML::string->new('$namespace'), +
- RPC::XML::struct->new( {depth => 2, skipacl => 1, hash => 0, pattern => '/\.png$/' } ) +
-+
-); +
-say "wiki.getAttachments = \n" . Dumper $res->value; +
- +
- +
-</code> +
- +
-===== Sample Ruby Client ===== +
-This simple example will pull the version information from the given Dokuwiki. No plugin required (in the Windows default package). +
-<code ruby> +
-require "xmlrpc/client" +
-server = XMLRPC::Client.new( "localhost","/dokuwiki/lib/exe/xmlrpc.php"+
-begin +
-    puts server.call("dokuwiki.getVersion"+
-rescue XMLRPC::FaultException => e +
-    puts "Error:" +
-    puts e.faultCode +
-    puts e.faultString +
-end +
-</code> +
- +
-This example demonstrates how to upload attachments: +
- +
-<code ruby> +
-require "xmlrpc/client" +
-server = XMLRPC::Client.new( "localhost","/dokuwiki/lib/exe/xmlrpc.php"+
-begin +
-    puts server.call("wiki.putAttachment", "wiki/example.png", XMLRPC::Base64.new(IO.read("/path/to/example.png"))) +
-rescue XMLRPC::FaultException => e +
-    puts "Error:" +
-    puts e.faultCode +
-    puts e.faultString +
-end +
-</code> +
- +
-===== Sample jQuery Client ===== +
-<code javascript> +
-var xml='<?xml version="1.0"?><methodCall><methodName>wiki.getRPCVersionSupported</methodName><params></params></methodCall>'; +
- $.ajax({ +
-   url: "http://<your wiki>/wiki/lib/exe/xmlrpc.php", +
-   data: xml, +
-   contentType:"text/xml", +
-   type:"post", +
-   beforeSend: function (xhr) { +
-     xhr.setRequestHeader ("Authorization", "Basic " + btoa('username' + ":" + 'password')); +
-   }, +
- }); +
-</code> +
- +
-===== Python Module ===== +
-A Python module for DokuWiki's XML-RPC API can be found at the [[http://pypi.python.org/pypi?name=dokuwikixmlrpc&:action=display|Python package index]] and on [[https://github.com/kynan/dokuwikixmlrpc|GitHub]]. +
- +
-Alternative: [[http://python-dokuwiki.readthedocs.io/en/latest/|python-dokuwiki]] +
- +
- +
-===== Sample AutoIt3 Client ===== +
-My AutoIt3 client is mainly a proof of concept: +
- +
-<code autoit> +
-#cs ---------------------------------------------------------------------------- +
- +
- AutoIt Version: 3.2.12.1 +
- Author:         Hugo Bossard +
- +
- Script Function: +
-    XML-RPC sample client AutoIt3 script. +
- +
-#ce ---------------------------------------------------------------------------- +
- +
-; this script uses the UDF WinHttp +
-#include "WinHTTP.au3" +
- +
-; get the info from page 'wiki:syntax' using wiki.getPageInfo() +
-$Xml = '<?xml version="1.0"?>'  +
-$Xml = $Xml  & @CRLF & '<methodCall>' +
-$Xml = $Xml  & @CRLF & '<methodName>wiki.getPageInfo</methodName>' +
-$Xml = $Xml  & @CRLF & '<params>' +
-$Xml = $Xml  & @CRLF & '<param>'  +
-$Xml = $Xml  & @CRLF & '<value>' +
-$Xml = $Xml  & @CRLF & '<string>wiki:syntax</string>' +
-$Xml = $Xml  & @CRLF & '</value>' +
-$Xml = $Xml  & @CRLF & '</param>'  +
-$Xml = $Xml  & @CRLF & '</params>'  +
-$Xml = $Xml  & @CRLF & '</methodCall>' +
-$XmlSize = StringLen($Xml) +
- +
-; initializes the use of WinHTTP functions and returns a WinHTTP-session handle. +
-$hw_open = _WinHttpOpen() +
- +
-; creates a HTTP request handle to a lokal DokuWikiStick installation on port 8800 +
-$hw_connect = _WinHttpConnect($hw_open, "localhost", 8800) +
- +
-; creates a HTTP request handle +
-$h_openRequest = _WinHttpOpenRequest($hw_connect, "POST", "/lib/exe/xmlrpc.php", "/RPC2 HTTP/1.0", "localhost", "text/xml"+
- +
-; sends the specified request to the HTTP server +
-_WinHttpSendRequest($h_openRequest, "", $Xml, $XmlSize) +
- +
-; waits to receive the response to a HTTP request initiated by WinHttpSendRequest(). +
-_WinHttpReceiveResponse($h_openRequest) +
- +
-$Data = "" +
-Do +
-  ; reads data from a handle opened by the _WinHttpOpenRequest() function. +
-  $Data&=_WinHttpReadData($h_openRequest) +
-Until @error +
- +
-; close connection and clean up +
-_WinHttpCloseHandle($h_openRequest) +
-_WinHttpCloseHandle($hw_connect) +
-_WinHttpCloseHandle($hw_open) +
- +
-; show error number and resulting data +
-MsgBox(4096,"Error: " & @error, $Data) +
-</code> +
- +
-===== Sample Emacs Lisp Client ===== +
-<code lisp> +
- +
-(require 'xml-rpc) +
-(defvar *dokuwiki-xml-rpc-url* "https://dokuwiki.url/lib/exe/xmlrpc.php"+
-(xml-rpc-method-call +
-  *dokuwiki-xml-rpc-url* +
-  'dokuwiki.getTime) +
- +
-</code> +
- +
  
 +A number of [[devel:xmlrpc:clients|clients written in different languages]] are available.
devel/xmlrpc.txt · Last modified: 2024-01-31 23:57 by Klap-in

Except where otherwise noted, content on this wiki is licensed under the following license: CC Attribution-Share Alike 4.0 International
CC Attribution-Share Alike 4.0 International Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki