Outils pour utilisateurs

Outils du site


tech:notes_dokuwiki_api_xml-rpc

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
tech:notes_dokuwiki_api_xml-rpc [2025/03/24 15:06] – créée - modification externe 127.0.0.1tech:notes_dokuwiki_api_xml-rpc [2026/06/07 19:12] (Version actuelle) – modification externe 127.0.0.1
Ligne 1: Ligne 1:
 +<!DOCTYPE markdown>
 +{{tag>Brouillon Python Prog}}
 +
 +# Notes DokuWiki API XML-RPC
 +
 +Voir :
 +* https://www.dokuwiki.org/devel:xmlrpc
 +* https://www.dokuwiki.org/devel:jsonrpc
 +* https://www.patreon.com/posts/96036243
 +* dokujclient
 +
 +
 +** Il vaut mieux utiliser JSON-RPC ** Voir https://www.dokuwiki.org/devel:remote_api
 +
 +
 +## Généralités
 +
 +Penser à restreindre l'accès à https://wiki.acme.fr/lib/exe/xmlrpc.php depuis le serveur web
 +
 +Il faut activer l'option : 
 +
 +**remote**
 +~~~
 +Active l'API système distante. Ceci permet à d'autres applications d'accéder au wiki via XML-RPC ou d'autres mécanismes.
 +~~~
 +
 +Voir aussi l'option :
 +
 +**remoteuser**
 +~~~
 +Restreindre l'accès à l'API à une liste de groupes ou d'utilisateurs (séparés par une virgule). Laisser vide pour donner l'accès tout le monde.
 +~~~
 +
 +## Exemple en Python
 +
 +~~~bash
 +pip3 install --user dokuwiki
 +~~~
 +
 +~~~python
 +import dokuwiki
 +
 +wiki=dokuwiki.DokuWiki('https://wiki.acme.fr', 'remoteuser', 'P@ssw0rd')
 +wiki.version
 +wiki.send('dokuwiki.getVersion')
 +wiki.title
 +wiki.pages.list()
 +[page['id'] for page in wiki.pages.list('Tech')]
 +
 +# Info
 +wiki.pages.info('Test')
 +wiki.send('wiki.getPageInfo','Test')
 +wiki.pages.versions('Test')
 +
 +# Modification, ajout à une page existente
 +wiki.pages.append('Test', 'http://linuxfr.org/\n\n', sum='Via XML-RPC', minor=True)
 +
 +# Création nouvelle page avec son lien
 +wiki.pages.set('Test1', 'Test1 : \n * http://linuxfr.org/')
 +wiki.pages.append('Test', '[[Test1]]', sum='Via XML-RPC', minor=True)
 +
 +# Recherche motif textuel
 +[x['id'] for x in wiki.pages.search('linuxfr')]
 +
 +# Effacement page ':Test1' et de son lien présent sur ':Test'
 +import re
 +wiki.pages.delete('Test1')
 +newpage=re.sub('\[\[Test1\]\]', `, wiki.pages.get('Test'))
 +wiki.pages.set('Test', newpage, sum='XML-RPC', minor=True)
 +~~~
 +
 +Recherche par date
 +~~~bash
 +from datetime import datetime
 +wiki.pages.changes(datetime(2023, 9, 1).timestamp())
 +~~~
 +
 +## Trouver les pages non référencées
 +
 +Avec l'extension Dokuwiki
 +* orphanswanted plugin
 +
 +Avec l'API
 +~~~python
 +no_backlink = []
 +
 +for page in wiki.pages.list():
 +    back_links = wiki.pages.backlinks(page['id'])
 +    #print(page['id'], '\t', back_links)
 +    if not back_links:
 +        no_backlink.append(page['id'])
 +        #print('\t\t\t', page['id'])
 +print(no_backlink)
 +~~~
 +
 +En ligne de commande avec PHP
 +~~~bash 
 +su - dokuwiki -s /bin/bash -c "php ${DOKUROOT}/bin/wantedpages.php | egrep -v 'playground:playground|sidebar|some:namespaces|wiki:nonexisting|wiki:pagename'"
 +~~~
 +
  

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki