Skip to content
Snippets Groups Projects
Name Last commit Last update
.gitignore
README.md
exampleconfig.py
wikibot.py

wikibot

Python Skripte um Interaktionen mit einem DokuWiki zu Automatisieren.

Nutzt das xmlrpc package um eine Verbindung zum wiki herzustellen.

Weil xmlrpc.ServerProxy von sich aus keine cookies speichert und somit keine session sachen, gibt es keine extra Login-Möglichkeit außer basic auth.

Funktionen

Verschieben von Seiten

Um einzelne Seiten zu verschieben oder umzubenennen, kann man move_page() verwenden.
Den alten Namen (original_page) und den neuen Namen (new_page) übergeben; dabei darauf achten, dass der Namespace mit enthalten ist (zB "kategorie:page" statt nur "page").
Links auf die alte Seite werden automatisch angepasst (Ein hoch auf Backlinks!).
Standardmäßig wird die alte Seite nur zum Löschen markiert aber nicht gelöscht.
Wenn man die alte Seite automatisch Löschen will, einfach beim Methodenaufruf delete=True setzen, hierbei wird nur der Inhalt der Seite gelöscht der attic bleibt soweit unverändert. Gelöschte Seiten tauchen nicht mehr in der Sitemap auf können aber wiederhergestellt werden, solange sie nicht aus dem attic gelöscht wurden.

Um mehrere Seiten auf einmal zu verschieben oder umzubennen kann move_page() merhmals aufgerufen werden oder man verwendet move_pages_regex().
move_pages_regex() nimmt einen regulären Ausdruck und eine Funktion die aus einem gematchten Namen einen neuen Namen erstellt. Es werden nur Seiten umbenannt/bewegt die komplett durch den regulären Ausdruck abgedeckt sind.
Das Löschverhalten von alten Seiten ist analog zu move_page().

Interne Links updaten

Manchmal sind die Inhalte einer Seite schon umgezogen und auf der alten Seite steht lediglich ein Link zur neuen. Dies passiert vor allem wenn Leute Seiten per Hand verschieben und nicht die Muße haben alle Backlinks durchzugehen. Mittels change_links() werden alle Links, die auf old_page zeigen, auf new_page gesetzt.

Finden alter Seiten

Durch find_old_pages() werden alle Seiten zurückgegeben, deren letzte Bearbeitung älter als eine gewisse Zeit ist (gegeben als datetime.timedelta oder datetime.datetime objekt).
Ein Namespace kann optional mit angegeben werden, um nur gewisse Seiten zu bekommen und nicht manuell die ids filtern zu müssen.

Markieren von Seiten

mark_page() fügt an den Anfang einer gegebenen Seite eine Nachricht hinzu.
mark_old_pages() markiert alle Seiten deren letzte Bearbeitung älter als eine gewisse Zeit ist (gegeben als datetime.timedelta oder datetime.datetime objekt). Seiten die bereits mit einem "FIXME" beginnen werden nicht markiert.
Ein Namespace kann optional angegeben werden, um nur gewisse Seiten zu Markieren.

CLI

Unter verwendung von argparse gibt es ein paar rudimentäre cli Optionen. Mittels python wikibot.py -h können die bisher umgesetzen Funtkionen begutachtet werden. Das Ergbeniss einer Funktion wird am ende per print-Befehl ausgegeben

Geplante Funktionen

  • Wiki-Graph mit networkx
  • Was mir an Statistikgedöns einfällt
  • CLI basics
  • Vernünftiges Error-handling
  • Rückmeldung ob Aktionen erfolgreich waren (zB Seiten verschiebung)
  • Client erweitern um die login methode zu unterstützen (xmlrpc kann von sich aus keine cookies)