#!/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()