Szerkesztő:DhanakBot/unredir.py
Megjelenés
#!/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()