Python-Programmierung: Pywikipediabot
Aus Wikibooks
Das pythonbasierte Bot-Framework
Pywikipediabot des Niederländers Rob W.W. Hooft erledigt nützliche Aufgaben im Wiki, sei es Wikipedia, Wikibooks oder Dein eigenes MediaWiki-unterstützes Projekt.
Für Projekte der WikiMedia-Foundation (Wikipedia, Wikibooks,…) gelten bestimmte Bedingungen und Regeln für den Einsatz von Bots. Bitte erkundige dich vorher!!
Inhaltsverzeichnis |
[Bearbeiten] Voraussetzungen für die Installation
[Bearbeiten] Installation
- Lade den BOT herunter unter http://sourceforge.net/projects/pywikipediabot/ und entpacke ihn!
- Python oder ActivePython muss installiert sein (möglichst die aktuelle Version).
[Bearbeiten] Vorbereitungen
- Zunächst musst Du die Datei user-config.py in dem Bot-Ordner erstellen; diese Datei überschreibt und erweitert Einstellungen der Datei config.py.
- Wechsele also mit einem Dateimanager oder einem Terminal in den Bot-Ordner, und erstelle die Datei user-config.py, mit folgendem Inhalt (die einzelnen Werte sind entsprechend anzupassen):
Minimal:
family = 'wikibooks' mylang = 'de' usernames['wikibooks']['de'] = 'BOT-NAME'
Erweitert:
family = 'wikibooks' mylang = 'de' usernames['wikibooks']['de'] = 'BOT-NAME' usernames['wikibooks']['en'] = 'BOT-NAME' usernames['wikibooks']['fr'] = 'BOT-NAME' minthrottle = 3 maxthrottle = 60 put_throttle = 30
- Generelle Parameter
Die Scripte verstehen folgende generelle Parameter:
- -family: die Scripte lassen sich mit diesem Parameter für verschiedene MediaWiki-Projekte verwenden
- -family:FAMNAME
- -throttle: fügt eine Wartezeit (in Sekunden) beim Aufrufen der Seiten hinzu, um den Server nicht zu überlasten
- -minthrottle = 15
- -maxthrottle = 60
- -put_throttle: fügt eine Wartezeit (in Sekunden) beim Abspeichern der Seiten hinzu, um den Server nicht zu überlasten
- -put_throttle = 45
- Wiki-Projekt
- Falls der BOT für die Wikipedia/Wikibooks o.ä. gedacht ist, bist du nun schon fertig!
Rufe einmalig login.py auf, und zwar mit dem Nutzernamen und Passwort!
python login.py -user:BOT-NAME -pass:***
Damit wird eine Datei login-data/de-*.py angelegt, in der das Passwort verschlüsselt enthalten ist. Anschließend kann sich der Bot selber einloggen.
Lies ab dem nächsten Kapitel weiter…
- Soll der BOT auf dein eigenes MediaWiki-Projekt zugreifen, dann erstelle die Datei MEINPROJEKT_family.py im Unterordner families, wobei das MEINPROJEKT durch deinen WikiMedia-Projektnamen ersetzt wird!
# -*- coding: utf-8 -*- import family # MEINPROJEKT Wiki # Beschreibung deiner Seite (optional) class Family(family.Family): def __init__(self): family.Family.__init__(self) self.name = 'MEINPROJEKT' # Ersetzen self.langs = { 'de': 'www.MEINPROJEKT.de', # Hostname deines Projektes } self.namespaces[1] = { '_default': u'Diskussion' } self.namespaces[2] = { '_default': u'Benutzer' } self.namespaces[3] = { '_default': u'Benutzer Diskussion' } self.namespaces[4] = { '_default': u'MEINPROJEKT' } # Ersetzen self.namespaces[5] = { '_default': u'MEINPROJEKT Diskussion' } # Ersetzen self.namespaces[6] = { '_default': u'Bild' } self.namespaces[7] = { '_default': u'Bild Diskussion' } def path(self, code): return '/w' # Pfad zur index.php anpassen. Üblicherweise /w oder /wiki. # index.php darf _nicht_ Teil des Pfades sein.
[Bearbeiten] Voraussetzungen für die Benutzung des Bots
Ein Benutzerkonto für den Bot muss beim Wiki bereits angelegt worden sein. Der Name des Benutzerkontos muss mit dem in der Datei user-config.py angegebenen (siehe oben) übereinstimmen.
[Bearbeiten] Benutzung des Bots
Zunächst muss der BOT sich über das login.py-Script auf der MediaWiki-Seite einloggen. Um das Script auszuführen, wechsele in der Kommandozeile in den Ordner des BOT, und gib dort ein:
python login.py
Du wirst nach dem Wiki-Benutzer-Passwort des BOT gefragt. Wenn die Eingaben stimmen, bist du eingeloggt. (Normalerweise bleibt der BOT eingeloggt, das Script muss also nur beim Systemstart aufgerufen werden)
Das war's, nun kannst du alle weiteren Scripte mit
python SCRIPTNAME
aufrufen.
[Bearbeiten] Zur Verfügung stehende Skripte
[Bearbeiten] category.py
Ein Skript, um mit Kategorien zu arbeiten.
python category.py aktion [-option]
Aktion kann einer der folgenden Befehle sein:
- add – Massenänderung; mehrere Artikel (als Liste) einer Kategorie zuordnen
- remove – Die Kategoriezuordnung von allen Artikeln in dieser Kategorie entfernen
- move – Alle Seiten einer Kategorie einer anderen Kategorie zuordnen
- tidy – Eine Kategorie aufräumen, durch Verschieben der Artikel dieser Kategorie in Unterkategorien
- tree – Erzeuge eine Baumansicht der Unterkategorien einer Kategorie
Option kann einer der folgenden Schalter sein
- person – Sortiere Personenartikel nach ihrem Nachnamen (für die Aktion add)
- rebuild – Baue die lokale Datenbank neu auf
Bei den Aktionen tidy und tree speichert der Bot die Kategorie-Struktur lokal in der Datei category.dump. Das spart Zeit und bedeutet weniger Serverzugriffe. Wenn diese Daten aber später wiederverwendet werden, kann es sein, dass sie veraltet sind; für diesen Fall ist die Option rebuild gedacht.
Beispiel:
Für Version 1.71 2005/03/09:
Um eine neue Kategorie für mehrere Personen-Artikel anzulegen folgenden Befehl eingeben und den Anweisungen folgen: python category.py add -person
[Bearbeiten] check_extern.py
Dieses Script checkt alle Seiten durch (beginnend bei Spezial:Allpages), ob die in den Artikeln angegebenen externen Links auch funktionieren, und druckt seine Ergebnisse sowohl auf der Konsole aus als auch in die Textdatei "check_extern.log"
python check_extern.py [-option]
- wobei Optionen sein können:
- -start:SEITENNAME <-- um an einer bestimmten Seite zu starten
- -nolog <-- es wird KEIN logfile angelegt
[Bearbeiten] interwiki.py
Siehe dazu die einleitende Beschreibung in der Datei interwiki.py.
[Bearbeiten] redirect.py
Aufrufen mit:
python redirect.py ACTION [-argument]
- action
- double - fixt redirects, die auf andere redirects verweisen
- broken - löscht redirects, die ins Leere verweisen. (benötigt sysop-rechte)
[Bearbeiten] replace.py
Dieses Skript nimmt Änderungen direkt im Artikel vor. Einzelne Seiten können online bearbeitet werden, will man einen Stapelbetrieb für eine bestimmte Aufgabe durchführen (z. B. ersetze in allen Artikeln "eigendlich" -> "eigentlich"), benötigt man ein sql-dumpfile der Wikidatenbank ("cur"-Tabelle genügt).
- Parameter:
- -sql:FILNAME_DES_DUMP – benutzt das dumpfile FILNAME
- -file:TEXTFILE – bezieht die Infos aus einer Textdatei, liest dort alle [[wiki links]] und benutzt diese Artikel
- -page:SEITENNAME – führt (online) Änderungen nur auf dieser Seite durch. Man kann durch mehrfache Angabe mehrere Seiten bearbeiten lassen
- BEACHTE: man kann nur entweder -sql oder -file oder -page angeben, aber diese nicht vermischen.
- -regex – Make replacements using regular expressions. If this argument isn't given, the bot will make simple text replacements.
- -except:XYZ – ignoriert alle Seiten, die XYZ beinhalten. Wenn das -regex-Argument gesetzt ist, wird XYZ als „regular expression“ behandelt.
- -fix:XYZ – führt Default-Aktionen aus. Derzeit gibt es:
- -fix:HTML – wandelt HTML-Tags in Wiki-Tags um
- -namespace:n – mache Änderungen nur im NameSpace "n". Funnzt nur mit einem SQL-dump
- -always – führt Änderungen durch, ohne zu fragen
- Ersetzen
- Gib zuerst das zu suchende Argument ein und dann die Ersetzung in Anführungszeichen an!
- Beispiele:
- Du möchtest beim Aufrufen von Vorlagen die alte Schreibweise {{msg:Stub}} in das neue Syntax {{Stub}} ändern, dann gib ein:
python replace.py -sql -regex "{{msg:(.*?)}}" "{{\\1}}"
-
- Du möchtest typische Tippfehler korrigieren, z. B. "Errror" -> "Error", dann gib ein:
python replace.py -sql:DUMPFILENAME "Errror" "Error"
-
- Du möchtest auf der Seite "John_Doe" alle HTML-Tags in Wiki-Tags ändern, dann gib ein:
python replace.py -page:John_Doe -fix:HTML
[Bearbeiten] login.py
Dieses Script muss aufgerufen werden, um den BOT beim MediaWiki-Projekt anzumelden (einloggen)
- Aufrufen:
python login.py
[Bearbeiten] FAQ
- Wie hält man den Bot an, wenn man noch während eines Prozesses abbrechen möchte/muss?
- Drücke "Strg + C" beim PC und "ctrl + c" beim Mac, um den Prozess zu beenden