示例#1
0
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)
示例#2
0
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")