For faster navigation, this Iframe is preloading the Wikiwand page for Gebruiker:Dpmelderbot/dpmeldingen.py.

Gebruiker:Dpmelderbot/dpmeldingen.py

Uit Wikipedia, de vrije encyclopedie

import pywikibot
import re
site = pywikibot.Site()

def ptitel(titel):
    p = re.escape(titel)
    p = "[" + p[0] + p[0].lower() + "]" + p[1:len(p)]
    p = p.replace(" ", "[ _]")
    p = r"\[\[\s*" + p + r"\s*[]|#]"
    return p

def isskip(dptitel, backlink):
    skippatroon = re.compile(r"\[\[" + re.escape(dptitel) + r"\]\].*\[\[" + re.escape(backlink.title()) + r"\]\]")
    if skippatroon.search(wplndskips.text):
        return True
    zieartikel = re.compile(r"\{\{\s*[Zz]ie\s*artikel[^}]+" + ptitel(dptitel))
    if zieartikel.search(backlink.text) and len(re.findall(ptitel(dptitel), backlink.text)) == 1:
        return True # Artikel bevat slechts 1 link naar de dp: in de ((Zie artikel)).
    return False

pgesch = re.compile(r"\n\| (\d+) \|\| [^|]* \|\| ([^|]*) \|\|")

def zoekdptoevoeger(artikel, patroon):
    gesch = artikel.getVersionHistoryTable()
    pos = 0
    oldids = []
    gebruikers = []
    dpadded = False
    stap = 1 # Zie de if na de while: deze moet daar gedefinieerd zijn.
    while not dpadded:
        geschmatch = pgesch.search(gesch, pos) # Een regel terug in de bewerkingsgeschiedenis
        if not geschmatch: # De oudste versie is dan bereikt.
            dpadded = True
            stap = 1 # De oudste gebruiker plaatste de dp-link.
            break
        pos = geschmatch.end()
        oldid = int(geschmatch.group(1))
        oldids.append(oldid)
        gebruikers.append(geschmatch.group(2))
        oldidtekst = artikel.getOldVersion(oldid)
        if oldidtekst and not re.search(patroon, oldidtekst): # Het eerste is nodig bij evt. verwijderde versies.
            if len(oldids) == 1: # De recentste versie bevat de dp-link niet:
                break
            else: # De recentste versie bevat de dp-link wel, maar een oudere versie niet:
                dpadded = True
                stap = 2 # De een-na-oudste gebruiker plaatste de dp-link.
    if dpadded:
        return {"gebruiker": gebruikers[-stap], "oldid": oldids[-stap]}
    else:
        return {"gebruiker": "", "oldid": 0}

def oldidlogged(oldid):
    with open(r'C:\Python\oldids.log') as oldidslog:
        for line in oldidslog:
            if str(oldid) in line:
                return True
        return False

def voegtoe(artikeltitel, dptoevoeger, dptitel, redirecttitel = ""):
    if dptoevoeger["gebruiker"] in dptoevoegers:
        dpi = dptoevoegers.index(dptoevoeger["gebruiker"])
        if artikeltitel in dpartikelen[dpi]:
            ai = dpartikelen[dpi].index(artikeltitel)
            dps[dpi][ai].append(dptitel)
            redirects[dpi][ai].append(redirecttitel)
        else:
            dpartikelen[dpi].append(artikeltitel)
            dps[dpi].append([dptitel])
            redirects[dpi].append([redirecttitel])
    elif dptoevoeger["gebruiker"] != "": # Verborgen gebruikersnaam, of zoekdptoevoeger returnde "".
        dptoevoegers.append(dptoevoeger["gebruiker"])
        dpartikelen.append([artikeltitel])
        dps.append([[dptitel]])
        redirects.append([[redirecttitel]])
    if not dptoevoeger["oldid"] in newoldids:
        newoldids.append(dptoevoeger["oldid"])

wplndd = pywikibot.Page(site, u"Wikipedia:Links naar doorverwijspagina's/data")
wplndskips = pywikibot.Page(site, u"Wikipedia:Links naar doorverwijspagina's/skips")
dptoevoegers = [] # List van unieke gebruikers die een dp-link toegevoegd hebben.
dpartikelen = [] # List van lists met voor elke dptoevoeger een list unieke artikelen waaraan ze een dp-link toegevoegd hebben.
dps = [] # 3D-list met een list van dp's voor elke combinatie van dptoevoeger en artikel.
redirects = [] # Idem voor de redirects naar dp's.
newoldids = [] # List van oldids van bewerkingen waarbij een of meerdere dp-links toegevoegd werden. Deze worden toegevoegd aan oldids.log aan het eind van dit script.
pdpsjabloon = re.compile(r"\{\{\s*[Dd](p|P|isambig)\s*(\|[^}]*)?\}\}")
for dp in wplndd.linkedPages():
    if not dp.isDisambig() or dp.title() in ['Huisdier', 'Deformatie', 'Uitlokking']:
        continue
    print("Dp: " + dp.title())
    dpsjabloonadded = zoekdptoevoeger(dp, pdpsjabloon)
    dpheeftlinks = 0
    for backlink in dp.backlinks(namespaces = 0):
        if backlink.isRedirectPage():
            for redirectbacklink in backlink.backlinks(namespaces = 0):
                if not redirectbacklink.isDisambig() and not redirectbacklink.isRedirectPage() and not isskip(dp.title(), redirectbacklink):
                    dpheeftlinks += 1
                    dptoevoeger = zoekdptoevoeger(redirectbacklink, ptitel(backlink.title()))
                    # Als dit later gebeurde dan het toevoegen van ((dp)) en er nog niet eerder een melding over gestuurd is:
                    if dptoevoeger["oldid"] > dpsjabloonadded["oldid"] and not oldidlogged(dptoevoeger["oldid"]):
                        voegtoe(redirectbacklink.title(), dptoevoeger, dp.title(), backlink.title())
        elif not "(doorverwijspagina)" in dp.title() and not backlink.isDisambig() and not isskip(dp.title(), backlink):
            dpheeftlinks += 1
            dptoevoeger = zoekdptoevoeger(backlink, ptitel(dp.title()))
            if dptoevoeger["oldid"] > dpsjabloonadded["oldid"] and not oldidlogged(dptoevoeger["oldid"]):
                voegtoe(backlink.title(), dptoevoeger, dp.title())
for i in range(len(dptoevoegers)):
    bericht = "Beste " + dptoevoegers[i] + ", ((Subst:Gebruiker:Dpmelderbot/Bericht/Begin))"
    if len(dps[i]) == 1:
        bericht +=  " Het gaat om het volgende artikel:"
    else:
        bericht += " Het gaat om de volgende artikelen:"
    for j in range(len(dpartikelen[i])):
        if len(dps[i][j]) == 1:
            bericht += "\n* Het artikel [[" + dpartikelen[i][j] + "]] bevat een [[Help:Gebruik van links|link]] naar de doorverwijspagina "
        else:
            bericht += "\n* Het artikel [[" + dpartikelen[i][j] + "]] bevat [[Help:Gebruik van links|links]] naar de volgende doorverwijspagina's: "
        for k in range(len(dps[i][j])):
            bericht += "[[" + dps[i][j][k] + "]]"
            if not redirects[i][j][k] == "":
                bericht += " (via de redirect [[" + redirects[i][j][k] + "]])"
            if k < len(dps[i][j]) - 1:
                bericht += ", "
            else:
                bericht += "."
    bericht += "\n((Subst:Gebruiker:Dpmelderbot/Bericht/Einde)) ~~~~"
    OP = pywikibot.Page(site, u"Overleg gebruiker:" + dptoevoegers[i])
    if OP.isRedirectPage():
        OP = OP.getRedirectTarget()
    elif not OP.exists():
        OP.text = "((Welkom3-u))"
    OP.text += "\n\n== Melding links naar doorverwijspagina's ==\n" + bericht
    try:
        OP.save(u"Nieuw kopje aangemaakt: /* Melding links naar doorverwijspagina's */", minor=False)
    except Exception as e:
        print("Overleg gebruiker:" + dptoevoegers[i] + " kon niet gepubliceerd worden:")
        print(e.args)
with open(r'C:\Python\oldids.log', 'a') as oldidslog:
    for newoldid in newoldids:
        oldidslog.write(str(newoldid) + '\n')
{{bottomLinkPreText}} {{bottomLinkText}}
Gebruiker:Dpmelderbot/dpmeldingen.py
Listen to this article

This browser is not supported by Wikiwand :(
Wikiwand requires a browser with modern capabilities in order to provide you with the best reading experience.
Please download and use one of the following browsers:

This article was just edited, click to reload
This article has been deleted on Wikipedia (Why?)

Back to homepage

Please click Add in the dialog above
Please click Allow in the top-left corner,
then click Install Now in the dialog
Please click Open in the download dialog,
then click Install
Please click the "Downloads" icon in the Safari toolbar, open the first download in the list,
then click Install
{{::$root.activation.text}}

Install Wikiwand

Install on Chrome Install on Firefox
Don't forget to rate us

Tell your friends about Wikiwand!

Gmail Facebook Twitter Link

Enjoying Wikiwand?

Tell your friends and spread the love:
Share on Gmail Share on Facebook Share on Twitter Share on Buffer

Our magic isn't perfect

You can help our automatic cover photo selection by reporting an unsuitable photo.

This photo is visually disturbing This photo is not a good choice

Thank you for helping!


Your input will affect cover photo selection, along with input from other users.

X

Wikiwand 2.0 is here ๐ŸŽ‰! We've made some exciting updates - No worries, you can always revert later on