{{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
pip3 install --user dokuwiki
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
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
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
su - dokuwiki -s /bin/bash -c "php ${DOKUROOT}/bin/wantedpages.php |egrep -v 'playground:playground|sidebar|some:namespaces|wiki:nonexisting|wiki:pagename'"