Usuário:Danilo.bot/subst.py
Aspeto
# -*- coding: utf-8 -*-
import codecs, re
import wikipedia as pywikibot
import pagegenerators, catlib
site = pywikibot.getSite()
def main(*args):
with codecs.open('exceções-subst.txt','r','utf8') as f: exc0, exc = set(f.readlines()), set(f.readlines())
with codecs.open('subst.txt','r','utf8') as f: predefs = f.read().replace('\n',', ').split(', ')
pages = pagegenerators.PreloadingGenerator((i[1] for i in catlib.Category(site,u'!Páginas com predefinições que deveriam ser substituídas')._getContentsNaive()),30)
subst = re.compile(u'\{\{(' + u'|'.join(u'[%s%s]%s' % (p[0].upper(),p[0].lower(),p[1:]) for p in predefs) + u')(?=\||\}\})')
cat = re.compile(u'\[\[[Cc]ategoria:!Páginas com predefinições que deveriam ser substituídas(?=\||\]\])')
c, t = 0, False
for page in pages:
texto = page.get()
if cat.search(texto):
if not page.title() in exc: exc.add(page.title())
continue
novo = subst.subn(ur'{{subst:\1',texto)
pywikibot.output(u'> %s <' % page.title())
if not novo[1]: pywikibot.output(u', '.join(re.findall(ur'\{\{([^|}]+)(?=\||\}\})',texto)))
else:
pywikibot.showDiff(texto,novo[0])
try: page.put(novo[0], comment=u'Bot: Manutenção - aplicando substituição em predefinição')
except pywikibot.exceptions.LockedPage:
pywikibot.output(u'> Página protegida, pulando')
continue
c += 1
r = not t and c % 5 == 0 and pywikibot.input(u'([p]arar,[t]odos)')
if r and r == 't': t = True
if r == 'p': break
if not exc0 is exc:
with codecs.open('exceções-subst.txt','w','utf8') as f: f.write(u'\n'.join(exc))
pywikibot.output(str(c) + u' páginas')
if __name__ == "__main__":
try: main()
finally: pywikibot.stopme()