Saltar para o conteúdo

Usuário:Danilo.bot/subst.py

Origem: Wikipédia, a enciclopédia livre.
# -*- 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()