Szerkesztő:DhanakBot/unredir.py

A Wikipédiából, a szabad enciklopédiából
#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
Ez a Wikipédia bot a redirekt-hivatkozásokat cseréli le közvetlen
hivatkozásokra.

   -cat:kategória      minden lapon az adott kategóriában

   -file:txtfile       minden lapon, ami a txtfile szövegfile-ból
                       hivatkozva van 

Minden más paraméter egy lap címeként értelmeződik.
"""

import sys, re
import wikipedia, pagegenerators, catlib


class UnredirBot:
    def __init__(self, generator):
        self.generator = generator

    def run(self):
        answer = 'n'
        
        for page in self.generator:
            try:
                links = page.linkedPages()
                text = page.get()
            except wikipedia.NoPage:
                wikipedia.output(u'HIBA: Nem találom a %s lapot' % page.title())
                continue
            except wikipedia.IsRedirectPage:
                continue

            origText = text
            for linkedPage in pagegenerators.PreloadingGenerator(iter(links)):
                try:
                    if linkedPage.isRedirectPage():
                        text = re.sub('(?<=\[\[)%s(\|)*' % re.escape(linkedPage.title()),
                                      self.resolve(linkedPage), text)
                except wikipedia.NoPage:
                    continue

            if origText != text:
                wikipedia.output("\n>>> %s <<<" % page.title())
                wikipedia.showDiff(origText, text)
                if answer != 'm':
                    answer = wikipedia.input(u"Módosítsam a %s lapot [(i)gen/(N)em/(m)ind]?" %
                                             page.title())
                if answer == 'i' or answer == 'm':
                    page.put(text, u"Robot: redirektek feloldása")


    def resolve(self, linkedPage):
        def fn(match):
            retStr = linkedPage.getRedirectTarget() + "|"
            if not match.group(1):
                retStr += linkedPage.title()
            return retStr
        return fn


def main():
    gen = None
    pageTitle = []
    
    for arg in sys.argv[1:]:
        arg = wikipedia.argHandler(arg, 'unredir')
        if arg:
            if arg.startswith('-file:'):
                gen = pagegenerators.TextfilePageGenerator(arg[6:])
            elif arg.startswith('-cat:'):
                cat = catlib.Category(wikipedia.getSite(), u"Kategória:" + arg[5:])
                gen = pagegenerators.CategorizedPageGenerator(cat)
            else:
                pageTitle.append(arg)

    if pageTitle:
        page = wikipedia.Page(wikipedia.getSite(), ' '.join(pageTitle))
        gen = iter([page])

    if not gen:
        wikipedia.showHelp('unredir')
    else:
        gen = pagegenerators.PreloadingGenerator(gen)
        bot = UnredirBot(gen)
        bot.run()


if __name__ == "__main__":
    try:
        main()
        
    finally:
        wikipedia.stopme()