def updateArticle(staaten): #Ajin ignorieren #toRemove = [] #for staat in alleStaaten: # if "Singa Shang" in staat["uri"] or "Ajin" in staat["uri"]: # toRemove.append(staat) #for el in toRemove: # alleStaaten.remove(el) #Infoboxen normalisieren for staat in staaten: if not staat["infobox"] == None: staat["infobox"] = normalizeInfobox(staat["infobox"], staat["uri"]) #Einzeleinträge aufsetzen #Jahr ausrechnen heute = datetime.now() datum = { "tag" : int(heute.day), "monat" : int(heute.month), "jahr" : int(heute.year), "stunde" : int(heute.hour), "minute" : int(heute.minute) } jahr = sydatum.rltosy(datum)["jahr"] gesamt = { "flaeche":[], "ew":[], "bip":[], "waehrung":[], } #Infotabellen-dicts auslesen und Vorlageneinträge zusammensetzen text_stats = "" text_info = "" for staat in staaten: #Fläche flaeche = None flaeche_int = None if not "infobox" in staat: print("Warnung - "+staat["uri"]+" hat keine Infobox") continue elif "Fläche" in staat["infobox"]: flaeche = parseNumberToInt(staat["infobox"]["Fläche"]) flaeche_int = flaeche if flaeche is None: flaeche = unknown gesamt["flaeche"].append(flaeche) #Nicht in Infobox oder nicht parsebar if flaeche is None or flaeche == 0 or flaeche == unknown: flaeche = unknown else: flaeche = parseNumberToString(flaeche) #BIP, BIP pro Kopf, EW bip_ew = None bip = None ew = None ew_int = None if "infobox" in staat: n = parseEwBip(staat) if n["bip"] is None: bip = unknown else: bip = parseNumberToString(n["bip"]) if n["bip-ew"] is None: bip_ew = unknown else: bip_ew = parseNumberToString(n["bip-ew"]) if n["ew"] is None: ew = unknown else: ew = parseNumberToString(n["ew"]) ew_int = n["ew"] if n["bip"] is not None: gesamt["bip"].append(n["bip"]) if n["ew"] is not None: gesamt["ew"].append(n["ew"]) else: bip = unknown bip_ew = unknown ew = unknown if not "infobox" in staat: pass #EW pro Fläche ew_flaeche = None if ew_int is not None and flaeche_int is not None: ew_flaeche = float(ew_int) / float(flaeche_int) ew_flaeche = parseNumberToString(ew_flaeche) else: ew_flaeche = unknown #Währung waehrung = None if "Währung" in staat["infobox"]: waehrung = staat["infobox"]["Währung"] if waehrung is None or re.match(r'^\s*$', waehrung) is not None: waehrung = unknown else: d = { "name":extractWaehrung(waehrung), "ew":ew_int, } gesamt["waehrung"].append(d) else: waehrung = unknown waehrung = normalizeWaehrung(waehrung) #Amtssprache sprache = normalizeSprache(staat["infobox"]["Amtssprache"]) #TLD tld = normalizeTLD(staat["infobox"]["TLD"]) if tld is None or tld == "": tld = unknown #KFZ-Kennzeichen kfz = normalizeKFZ(staat["infobox"]["KFZ"]) #Vorwahl vorwahl = normalizeVorwahl(staat["infobox"]["Telefonvorwahl"]) #Zeitzone zeitzone = normalizeZeitzone(staat["infobox"]["Zeitzone"]) #Vorlagentext zusammensetzen: Statistik flagge = "Flagge-None.png" flagge = staat["infobox"]["Flagge"] eintrag = "{{IAS Eintrag Statistik\n" eintrag += "|Sortierungsname="+staat["sortname"]+"\n" eintrag += "|Flagge="+flagge+"\n" eintrag += "|Name="+staat["name"]+"\n" eintrag += "|Artikel="+staat["uri"]+"\n" eintrag += "|Fläche="+flaeche+"\n" eintrag += "|Einwohnerzahl="+ew+"\n" eintrag += "|EW-Fläche="+ew_flaeche+"\n" eintrag += "|BIP="+bip+"\n" eintrag += "|BIP-EW="+bip_ew+"\n" eintrag += "}}\n" text_stats = text_stats + eintrag #Vorlagentext zusammensetzen: Allgemeine Informationen flagge = staat["infobox"]["Flagge"] eintrag = "{{IAS Eintrag Info\n" eintrag += "|Sortierungsname="+staat["sortname"]+"\n" eintrag += "|Flagge="+flagge+"\n" eintrag += "|Name="+staat["name"]+"\n" eintrag += "|Artikel="+staat["uri"]+"\n" eintrag += "|Kürzel="+staat["infobox"]["Kürzel"]+"\n" eintrag += "|Amtssprache="+sprache+"\n" eintrag += "|Währung="+waehrung+"\n" eintrag += "|TLD="+tld+"\n" eintrag += "|KFZ="+kfz+"\n" eintrag += "|Vorwahl="+vorwahl+"\n" eintrag += "|Zeitzone="+zeitzone+"\n" eintrag += "}}\n" text_info = text_info + eintrag #Allgemeine Statistiken pre = "<onlyinclude>{{IAS Anfang\n" pre += "|Jahr="+str(int(jahr))+"\n" flaeche_gesamt = 0 for el in gesamt["flaeche"]: if el is not unknown: flaeche_gesamt += el flaeche_schnitt = flaeche_gesamt / len(gesamt["flaeche"]) pre += "|Gesamt-Fläche="+parseNumberToString(flaeche_gesamt)+"\n" pre += "|Schnitt-Fläche="+parseNumberToString(flaeche_schnitt)+"\n" ew_gesamt = 0 for el in gesamt["ew"]: ew_gesamt += el ew_schnitt = float(ew_gesamt) / float(len(gesamt["ew"])) pre += "|Gesamt-EW="+parseNumberToString(round(ew_gesamt))+"\n" pre += "|Schnitt-EW="+niceFloatStr(ew_schnitt)+"\n" bip_gesamt = 0 for el in gesamt["bip"]: bip_gesamt += el bip_schnitt = bip_gesamt / len(gesamt["bip"]) pre += "|Gesamt-BIP="+parseNumberToString(bip_gesamt)+"\n" pre += "|Schnitt-BIP="+parseNumberToString(bip_schnitt)+"\n" ew_fl_gesamt = float(ew_gesamt) / float(flaeche_gesamt) bip_ew_gesamt = float(bip_gesamt) / float(ew_gesamt) pre += "|EW-Fläche="+niceFloatStr(ew_fl_gesamt)+"\n" pre += "|BIP-EW="+parseNumberToString(int(bip_ew_gesamt))+"\n" #Währungen nach Anzahl Staaten erg = sumUpWaehrung(gesamt["waehrung"], lambda w:1) pre += "|WährungSt1="+erg[2]["name"]+"\n" pre += "|WährungStAnz1="+parseNumberToString(erg[2]["anz"])+"\n" pre += "|WährungSt2="+erg[1]["name"]+"\n" pre += "|WährungStAnz2="+parseNumberToString(erg[1]["anz"])+"\n" pre += "|WährungSt3="+erg[0]["name"]+"\n" pre += "|WährungStAnz3="+parseNumberToString(erg[0]["anz"])+"\n" #Währung nach EW erg = sumUpWaehrung(gesamt["waehrung"], lambda w:w["ew"]) pre += "|WährungEw1="+erg[2]["name"]+"\n" pre += "|WährungEwAnz1="+parseNumberToString(erg[2]["anz"])+"\n" pre += "|WährungEw2="+erg[1]["name"]+"\n" pre += "|WährungEwAnz2="+parseNumberToString(erg[1]["anz"])+"\n" pre += "|WährungEw3="+erg[0]["name"]+"\n" pre += "|WährungEwAnz3="+parseNumberToString(erg[0]["anz"])+"\n}}\n" #IAS Anfang Statistik und Tabber pre += "<Tabber>\nStatistiken={{IAS Anfang Statistik}}" text = pre + text_stats text += "\n|}\n" text += "|-|\nWeitereInformationen=" text += "{{IAS Anfang Info}}\n" text += text_info text += "|}\n" text += "|-|</tabber>\n\n" text += "</onlyinclude>\n" text += "[[Kategorie:Internationales Amt für Statistiken]]" text += "[[Kategorie:Fluggbot]]" wiki.editArticle("Vorlage:IAS", text) #Staaten zählen bespielt = 0 spielerlos = 0 for staat in staaten: if staat["spielerlos"]: spielerlos += 1 else: bespielt += 1 #Vorlage:Anzahl Staaten text = "<onlyinclude><includeonly>" + str(len(staaten)) text = text + "</includeonly></onlyinclude>\n" text = text + "Diese Vorlage gibt die aktuelle Anzahl der Staaten in Simocracy " text = text + "zurück. Gezählt werden alle Staaten des Planeten.<br>\nSie wird auf " text = text + "Basis der Staatenliste im [[Wikocracy:Portal|Portal]] berechnet.\n\n" text = text + "[[Kategorie:Fluggbot]]" wiki.editArticle("Vorlage:Anzahl_Staaten", text) #Vorlage:Anzahl Freie Staaten text = "<onlyinclude><includeonly>" + str(spielerlos) text = text + "</includeonly></onlyinclude>\n" text = text + "Diese Vorlage gibt die aktuelle Anzahl der freien Staaten in " text = text + "Simocracy zurück. Gezählt werden alle Staaten des Planeten.<br>\nSie " text = text + "wird auf Basis der Staatenliste im [[Wikocracy:Portal|Portal]] berechnet." text = text + "\n\n[[Kategorie:Fluggbot]]" wiki.editArticle("Vorlage:Anzahl_Freie_Staaten", text) #Vorlage:Anzahl Bespielte Staaten text = "<onlyinclude><includeonly>" + str(bespielt) text = text + "</includeonly></onlyinclude>\n" text = text + "Diese Vorlage gibt die aktuelle Anzahl der bespielten Staaten in " text = text + "Simocracy zurück.<br>\nSie wird auf Basis der Staatenliste im " text = text + "[[Wikocracy:Portal|Portal]] berechnet.\n\n[[Kategorie:Fluggbot]]" wiki.editArticle("Vorlage:Anzahl_Bespielte_Staaten", text) #Vorlage:Anzahl Spieler spielerliste = [] for staat in staaten: if staat["spielerlos"]: continue spieler = staat["spieler"] spieler = spieler.replace("[[", "").replace("]]", "") spieler = spieler.replace(",", ";").replace(" und ", ";") spieler = spieler.split(";") for el in spieler: el = el.strip() if not el in spielerliste: spielerliste.append(el) spielerliste = sorted(spielerliste, key=lambda s: s.lower()) text = "<onlyinclude><includeonly>" + str(len(spielerliste)) text = text + "</includeonly></onlyinclude>\n" text = text + "Diese Vorlage gibt die aktuelle Anzahl der aktiven Spieler " text = text + "in Simocracy zurück.<br>\nSie wird auf Basis der Staatenliste im " text = text + "[[Wikocracy:Portal|Portal]] berechnet.<br>\n===Derzeitige Spieler===\n" for spieler in spielerliste: text = text + spieler + "<br>\n" text = text + "\n[[Kategorie:Fluggbot]]" wiki.editArticle("Vorlage:Anzahl_Spieler", text)
def doIt(article, opener): ldhost = re.compile(r'(Thumb=)?\[?\[?\s*(?P<link>(http://)?(www\.)?ld-host\.de/[/\w]*?\.[a-z][a-z][a-z])\s*[^\]]*?\]?\]?') doubleRepl = re.compile(r'\[?\s*' + re.escape(replacement) + r'\s*' + re.escape(replacement) + r'\s*\]?') found = False text = "" logs = "" #Spezialseiten abfangen site = None try: site = wiki.openArticle(article, opener, redirect=False) except Exception as e: if str(e) == "Spezialseite": return for line in site: newLine = line.decode('utf-8') foundList = [] for el in ldhost.finditer(newLine): foundList.append(el) #nichts gefunden if foundList == []: text = text + newLine continue else: found = True #ersetzen for el in foundList: #Bildboxen berücksichtigen if 'Thumb=' in el.groups(): newLine = replaceAll(el.groupdict()['link'], "", newLine) else: newLine = replaceAll(el.groupdict()['link'], replacement, newLine) newLine = replaceAll(doubleRepl, replacement, newLine) text = text + newLine #logging if simulation and loglevel == "line": logs = logs + "\n- " + line.decode('utf-8') + "+ " + newLine + "\n" if found: text = notif + text print("[[" + article + "]]") if loglevel == "line": print(logs) elif loglevel == "article": print(text) else: raise Exception("config kaputt") #Schreiben if not simulation: wiki.editArticle(article, text, opener) print("Done: "+article) print("========================================================\n")