Benutzer:StipenTreublatt/Bot

aus Wiki Aventurica, dem DSA-Fanprojekt
set path=%path%;F:\programme\python26
cd F:\programme\python26\pywikipediabot
python login.py
  • Parameter -help liefert oft eine Erklärung des Skriptes
  • Wichtig:Bei Artikelnamen mit Leerzeichen als Parameter muss ein _ das Leerzeichen ersetzen, sonst wird der Teil des Namens nach dem Leerzeichen als weiterer Parameter übernommen.
Beispiel:
-start:Arkos Schah
versucht von Arkos an die Artikel alphabetisch zu berühren, plus zusätzlich den Artikel Schah. Da beide Artikel nicht vorhanden sind passiert einfach nix.
Es funktioniert ebenfalls den Artikelnamen in "Anführungszeichen" zu schreiben.
  • Befehl zum Abbrechen eines MS-Windows-Kommandozeilen-Prozesses: "Strg+C"
  • Kategorie:WLH leeren - Bot schreiben, der die ganze Sache automatisiert?

touch.py

touch.py -start:Chrysir

Alle Seiten ab Chrysir werden berührt

touch.py -cat:Kategorie:Meisterinformationen_zu_Abenteuern

Alle Seiten in der Kategorie:Meisterinformationen zu Abenteuern werden berührt

redirect.py

redirect.py double

Doppelte Weiterleitungen werden repariert, mit Änderungsnachfrage.

redirect.py broken

Redirs auf nicht vorhandene Seiten werden nach Bestätigung gelöscht.

delete.py

delete.py -links:"Benutzer:StipenTreublatt/Wiki Aventurica/StipBot/Testseite" -always

Alle von Benutzer:StipenTreublatt/Wiki Aventurica/StipBot/Testseite verlinkten Artikel werden gelöscht, keine Nachfrage

delete.py -cat:"Löschen" -always

Alle Artikel in Kategorie:Löschen werden gelöscht, keine Nachfrage

template.py

template.py "Navigationsleiste Aventurischer Index" "Nav Aventurischer Index"

Ersetzt eine Vorlage durch eine andere auf allen Seiten, auf denen sie eingebunden ist. Praktisch wenn man Vorlagen umbenennt.
BUG: Stellen an denen die Vorlage mittels {{Vorlage:Vorlage}} eingebunden ist werden nicht verändert.

template.py -category:Soloabenteuer "Infobox Soloabenteuer" "Infobox Soloabenteuer/neues Format"

Ebenfalls eine Vorlagenersetzung, es wird auf allen geänderten Seiten die angegebene Kategorie hinzugefügt. Ungeschickt dass das Kategoriehinzufügen nicht ohne das Ersetzen der Vorlage funktioniert. Daher: Alternative zum Herausbrechen einer Kategorie aus einer Vorlage.

template.py -remove Spoiler

Vorlage wird komplett entfernt. Man kann jedoch keine Kategorie angeben, auf die das Entfernen eingeschränkt bleiben soll. Zweiter Minuspunkt für dieses Skript.

template.py -xml:WikiAventurica.xml -remove Spoiler

Entfernt die Einbindung der "Vorlage:Spoiler" auf allen im XML-Dump angegebenen Seiten durch ein Leerzeichen. Der Dump muss dabei im Ordner pywikipediabot liegen.

weblinkchecker.py

weblinkchecker.py -weblink:www.farben-der-tsa.de

Funktioniert bei uns noch nicht, wegen der fehlenden Spezialseite Spezial:Linksearch.

weblinkchecker.py -start:!

Lädt alle Wikiseiten und überprüft externe Links. Gefundene deadlinks werden ersteinmal in einer lokalen .dat-Datei gespeichert. Mindestens eine Woche später weiterhin als inaktiv angetroffene Links werden dann in einer Textdatei im Unterordner "deadlinks" gespeichert. Diese ist in Wikisyntax gehalten.

weblinkchecker.py -repeat

Überprüft alle beim letzten Durchlauf gemeldeten Seiten mit inaktiven externen Links.

Interessante Fehler:

Exception while processing URL http://www.alveran.org/index.php?id=157&publikationID=43 in page Das Grauen von Ranak
Exception in thread Das Grauen von Ranak - http://www.alveran.org/index.php?id=157&publikationID=43:
Traceback (most recent call last):
  File "F:\Programme\Python25\lib\threading.py", line 460, in __bootstrap
    self.run()
  File "weblinkchecker.py", line 512, in run
    ok, message = linkChecker.check()
  File "weblinkchecker.py", line 443, in check
    msg = error[1]
IndexError: tuple index out of range
Exception in thread Grafschaft Theg├╗n - http://www.veliris.de/schloss/horas/bar
onien/thegun.htm:
Traceback (most recent call last):
  File "F:\Programme\Python25\lib\threading.py", line 460, in __bootstrap
    self.run()
  File "weblinkchecker.py", line 521, in run
    self.history.setLinkDead(self.url, message, self.page)
  File "weblinkchecker.py", line 609, in setLinkDead
    archiveURL = iac.getArchiveURL()
  File "weblinkchecker.py", line 258, in getArchiveURL
    f = urllib2.urlopen(archiveURL)
  File "F:\programme\python25\lib\urllib2.py", line 121, in urlopen
    return _opener.open(url, data)
  File "F:\programme\python25\lib\urllib2.py", line 374, in open
    response = self._open(req, data)
  File "F:\programme\python25\lib\urllib2.py", line 392, in _open
    '_open', req)
  File "F:\programme\python25\lib\urllib2.py", line 353, in _call_chain
    result = func(*args)
  File "F:\programme\python25\lib\urllib2.py", line 1100, in http_open
    return self.do_open(httplib.HTTPConnection, req)
  File "F:\programme\python25\lib\urllib2.py", line 1073, in do_open
    r = h.getresponse()
  File "F:\programme\python25\lib\httplib.py", line 924, in getresponse
    response.begin()
  File "F:\programme\python25\lib\httplib.py", line 385, in begin
    version, status, reason = self._read_status()
  File "F:\programme\python25\lib\httplib.py", line 349, in _read_status
    raise BadStatusLine(line)
BadStatusLine

replace.py

Einige Notizen zur Regex:

"Suchen"-Regex:
  • Folgende Zeichen müssen entwertet werden:
. ^ $ * + ? { } [ ] \ | ( )
  • Zeilenumbruch
\r\n
"Ersetzen"-Regex:
  • Folgende Zeichen müssen entwertet werden:
"
  • Zeilenumbruch
\n

Einige beispielhafte, einfache Aufrufe (Speziellere auf einer Unterseite):

replace.py -page:"Alptraum ohne Ende (Meisterinformationen)" -regex "\{\{Spoiler.*?\}\}" ""

Ersetzt die Einbindung der "Vorlage:Spoiler" auf "Alptraum ohne Ende (Meisterinformationen)" durch nichts.

replace.py -xml:WikiAventurica.xml -regex "\{\{Spoiler.*?\}\}" ""

Ersetzt die Einbindung der "Vorlage:Spoiler" auf allen im XML-Dump angegebenen Seiten durch nichts. Der Dump muss dabei im Ordner pywikipediabot liegen.

replace.py -cat:Herrscherauflistung -regex "\{\{Prettytable\}\}" "class=\"wikitable\""

Ersetzt auf allen Seiten der Kategorie:Herrscherauflistung die die Vorlage:Prettytable durch die css-Klasse wikitable.

replace.py -cat:Gruppenabenteuer -regex "=Abenteuerbeschreibung=\s\s" ""

Entfernt die Zeile "=Abenteuerbeschreibung=" vollständig aus jeder Seite der Kat:Gruppenabenteuer.

replace.py -ref:"Zyklop (Rasse)" -regex "\[\[Zyklop \(Rasse\)(\]\]|/|#|\|)" "[[Zyklop\1"

Beispielhafter Aufruf für Kategorie:WLH leeren. \1 verstehe ich jedoch nicht... bedeutet vielleicht dass das letzte gefundene Zeichen nicht ersetzt wird.
( und ) bilden eine sogenannte konsumierende Gruppierung. Im Ersetze-String kann man mit \1, \2 usw. die gruppierten Teile wieder einbauen. Die Numerierung beginnt bei der am weitesten links stehenden sich öffenden Klammer. Du hast aber richtig geraten. Ich gruppiere etwas und füge es an gleicher Stelle wieder ein. Dadurch wird es nicht ersetzt. Aber mit der Angabe im Suchestring verhindere ich Treffer bei Begriffen die noch weitergehen. --Falk Steinhauer 23:04, 11. Nov. 2008 (CET)

replace.py -catr:Spielwelt -regex " usw\.=" "="

Entfernt "usw." aus allen Überschriften auf allen Seiten in allen Unterkategorien von Kat:Spielwelt.

replace.py -cat:Gruppenabenteuer -regex "<!-- Diese Seiteninformationen wurden vom AbListe2Mediawiki-Makro V0\.\d\d erstellt -->\s\s" ""

Entfernt den Kommentar mit allen aufgetretenen Versionsnummern.

replace.py -catr:Index -regex "( |')(?P<Zahl>\d|\d\d|)0( ff|ff| ff\.|ff\.)( |\s|'|,|;)" "\1\g<Zahl>0-\g<Zahl>2\4" "( |')(?P<Zahl>\d|\d\d|)1( ff|ff| ff.|ff.)( |\s|'|,|;)" "\1\g<Zahl>1-\g<Zahl>3\4"

replace.py -catr:Regelindex -regex "( |')(?P<Zahl>\d|\d\d|)0( f|f| f\.|f\.)( |\s|'|,|;)" "\1\g<Zahl>0-\g<Zahl>1\4" "( |')(?P<Zahl>\d|\d\d|)2( f|f| f\.|f\.)( |\s|'|,|;)" "\1\g<Zahl>2-\g<Zahl>3\4"

Zwei Aufrufe, die Seitenangaben mit ff oder f durch eine entsprechden Zahlenangabe ersetzen. Eine vollständige Liste zum Erwischen aller solcher Angaben findet sich in der Versionsgeschichte.

replace.py -cat:Roman -regex "\|(Nr|Seitenzahl|Autoren|Cover|Zeit|Ort|Erscheinungsdatum|Preis|ISBN|Direktlinks)=-\r\n" "|\1=\n"

Entfernt die - aus den Infoboxeinträgen der Romane, da diese die dpl-Listen stören.

replace.py -ref:"Benutzer:Geran Bot" -namespace:1 -regex "===LinkCheck-Ergebnis===" "===LinkCheck-Ergebnis===\n[[Kategorie:Stips Kat]]"

Fügt bei auf allen Diskussionseiten, bei denen Geran Bot defekte Links gemeldet hat, Kategorie:Stips Kat hinzu.

replace.py "-links:Benutzer:StipenTreublatt/Wiki Aventurica/StipBot/Testseite" -regex "\[\[" "In dieser Kategorie finden sich Personen mit der [[Profession]] [[{{subst:PAGENAME}}]].\n[["

Fügt auf allen von Benutzer:StipenTreublatt/Wiki Aventurica/StipBot/Testseite verlinkten Seiten den genannten Ausdruck hinzu. Habe ich dazu benutzt, den Bot Kategoriebeschreibungen ändern zu lassen. Liste wurde vorher mit category.py listify erstellt.

replace.py -xml:WikiAventurica.xml -regex "align=.*?right.*?.*?\{\{Prettytable\}\}\s\s!bgcolor=#ffff80\|Name\s\s!bgcolor=#ffff80\|Titel\s\s!bgcolor=#ffff80\|von\s\s!bgcolor=#ffff80\|bis\s\s" "class=\"wikitable\" align=\"right\"\n|-class=\"vordergrund\"\n!Name!!Titel!!von!!bis\n"

Funktioniert unerklärlicherweise nicht.

category.py

For the actions tidy and tree, the bot will store the category structure locally in category.dump. This saves time and server load, but if it uses these data later, they may be outdated; use the -rebuild parameter in this case.

Anscheinend benutzt das Script auch bei anderen Befehlen den dump. Ab und zu -rebuild scheint angebracht.

category.py tidy

Which category do you want to tidy up? Regelindex
Script bietet lädt nacheinander alle Seiten aus der Kategorie und bietet Auswahlmöglichkeiten zum Verändern der Kategorie.

category.py move -from:"Index einer Publikation" -to:"Offizieller Index"

Script schiebt alle Artikel von einer Kategorie in eine andere. Praktisch wenn man Kategorien umbenennt.

category.py listify -from:"Programmieren" -to:"Benutzer:StipenTreublatt/Wiki Aventurica/StipBot/Testseite"

Erstellt eine Liste der Artikel und Kategorien in Kategorie:Programmieren, die auf der Testseite gespeichert wird. Falls Seite schon vorhanden ist wird der Prozess abgebrochen.

category.py listify -overwrite -from:"Hörbuch" -to:"Benutzer:StipenTreublatt/Wiki Aventurica/StipBot/Testseite"

Dasselbe, Liste wird allerdings ersetzt falls schon vorhanden.

category.py add

Links from which page should be processed? Benutzer:StipenTreublatt/Wiki Aventurica/StipBot/Testseite
Category to add (do not give namespace): Datei
Von der angegebenen Seite werden alle Links gelesen. Man bekommt dann für jeden Artikel die Entscheidungsmöglichkeit, die angegebene Kategorie hinzuzufügen.
BUG: Links auf Seiten im Namensraum "Bild:" werden nicht beachtet.
Lösung: Standardnamensraum ist "Datei", Namensraum "Bild" muss in der WikiAventurica-family deklariert werden. Ebenso dann Bild Diskussion.

category.py remove -from:"Soloabenteuer"

Entfernt die Kategorie aus allen Seiten in der Kategorie.
Nach Entfernen versucht sich das Script mit einem Sysop-account einzuloggen und fragt dann ob die Kategorie gelöscht werden soll.

category.py tree

For which category do you want to create a tree view? Inoffiziell
Please enter the name of the file where the tree should be saved, or press enter to simply show the tree: tree.txt
Erstellt eine Baumansicht der gewählten Kategorie, wahlweise per Bildschirmausgabe oder als Ausdruck in eine Datei.
  1. Dateiausdruck funktioniert (mit tree.txt getestet, es wird ohne Nachfrage im Ordner pywikipediabot gespeichert)
  2. Bildschirmausdruck funktioniert leider nicht
Saving results in F:\Programme\Python25\pywikipediabot
Dumping to category.dump.bz2, please wait...
Traceback (most recent call last):
  File "F:\Programme\Python25\pywikipediabot\category.py", line 901, in <module>

    bot.run()
  File "F:\Programme\Python25\pywikipediabot\category.py", line 794, in run
    f = codecs.open(self.filename, 'a', 'utf-8')
  File "F:\Programme\Python25\lib\codecs.py", line 817, in open
    file = __builtin__.open(filename, mode, buffering)
IOError: [Errno 13] Permission denied: 'F:\\Programme\\Python25\\pywikipediabot'
Der Fehler ist seit r5551 behoben (siehe [1]) --Falk Steinhauer 22:28, 11. Nov. 2008 (CET)

Benutzer:FalkBot/CalculateAverage.py

CalculateAverage.py "-cat:Aventurischer Bote"

Rechnet den Durchschnitt aller Bewertungsboxen in der Kategorie:Aventurischer Bote aus.

Benutzer:FalkBot/SetSortKeys.py

SetSortKeys.py -start:!

Setzt bei allen Artikeln des Wikis die Kategoriensortierung bei Artikeln mit Umlauten richtig.