Usuário:Danilo.bot/marcas.py: diferenças entre revisões
Conteúdo apagado Conteúdo adicionado
reformatando o código, adicionando comentários na função atualizar e não mais adicionando |rev= quando não houver avaliação humana (antes adicionava sempre) |
→Código: refazendo a função atualizar, agora o comando -rmbot remove o parâmetro |bot= da marca, nos parâmetros passados para o robô "|" e ";" foram trocados para ",", e foram feitas outras alterações e correções |
||
Linha 19:
-adicionar:TEMA Adiciona esse tema à marca se ele já não existir. Para mais de um
tema use a barra vertical: TEMA1
-exceção:TEMA Só adiciona o tema se TEMA não estiver na marca.
-imp:TEMA:I Adiciona importância I para TEMA. Para mais de um tema separe
com ";", exemplo: -imp:TEMA1:2
-eimp:I Só adiciona a importância se a importância já não for I. Para mais
Linha 38:
-comandos Exibe na tela todos os comandos disponíveis para especificar as páginas
"""
import re
import pywikibot
from pywikibot import pagegenerators
Linha 143 ⟶ 142:
bimp = re.compile(u'importância ?= ?0?(\d)')
brev = re.compile(u'rev ?= ?\d{8}')
qs =
def atualizar(page,
if page.namespace() == 0:
page = page.toggleTalkPage()
elif page.namespace() != 1:
return None
try:
texto = page.get()
except pywikibot.NoPage:
texto = u''
rev = None
bot = False
adtema = []
temas = {}
qualidade = None
# Marca nova
marca = bmarca.search(texto)
if marca: # Tem marca nova
marca = [p for p in marca.group(1).split('|')]
tema = None
n = 1
if len(marca) > 1: # Tem marca nova e ela tem parâmetros
for param in marca:
if param.startswith(u'rev='): # Tem |rev= na marca
rev = param
elif param.startswith(u'bot='): # Tem parâmetro |bot=
bot = param
elif u'=' not in param: # Não tem "=" no parâmetro
if n == 1: # Primeiro parâmetro é a qualidade
qualidade = param
elif n % 2 == 0: # Parâmetro par é tema
tema = param
else: # Parâmetro impor é importância
temas[tema] = param
tema = None
n += 1
if tema: # Último tema não tem importância
temas[tema] = u'?'
rmbot = rmbot and bot # Só considera que vai remover o |bot= se tiver
# Marcas antigas
marcas = [[m[1]]+[m[3]] for m in bmarcas.findall(texto)]
if marcas: # Tem marcas antigas
imarcas = [[m[0]] + bimp.findall(m[1]) for m in marcas] # Importâncias nas marcas antigas
for m in imarcas: # Pega os parâmetros das marcas antigas
if len(m) == 2:
temas[m[0]] = m[1]
else:
temas[m[0]] = u'?'
if not rev: # Não tem rev na marcas novas
rev = brev.search(str(marcas)) # Busca rev nas antigas
rev = rev and rev.group(0)
if not qualidade: # Não tem qualidade na marca nova
qmarcas = bqua.search(str(marcas)) # Busca qualidade em marcas antigas
if qmarcas:
qualidade = qmarcas.group(1) in (u'AB', u'AD') and {u'AB': u'5', u'AD': u'6'}[qmarcas.group(1)] or qmarcas.group(1)
# Adição de temas
if not filter(lambda t:t in excecoes, temas):
for ad in adicionar:
if ad not in temas:
temas[ad] = u'?'
adtema.append(ad)
# Adição de importância
imp = dict((tema, i) for tema, i in imp.items() if tema in temas and temas[tema] not in [i] + eximp)
for tema in imp:
temas[tema] = imp[tema]
# Verificações:
# Não tem marca antiga ou nova nem vai adicionar
if not marcas and not marca and not
if texto:
pywikibot.output(u'Não foram encontradas marcas em ' + page.title())
Linha 168 ⟶ 218:
pywikibot.output(page.title() + u' não existe...')
return None
# Não tem marca antiga e ( (tem nova
elif not marcas and ((marca and not
pywikibot.output(u'Não foram encontradas marcas para atualizar em ' + page.title())
return None
# Ou avalia ou remove o |bot=
if rmbot and avalia:
pywikibot.output(u'Erro: ou avalia ou remove o parâmetro bot')
if avalia: # Fazer avaliação robótica
bot = avaliar(page.toggleTalkPage())
if bot[0] > 4: # Avaliação automática retornou 5 ou 6
qualidade = str(bot[0]) # Avaliação automática 5 e 6 passam para o campo de avaliação humana
# Monta a nova marca
if bot
# type(bot) == tuple é uma nova avaliação, type(bot) == unicode é uma avaliação antiga
nova += type(bot) == tuple and u'|bot=%d/{{subst:CURRENTYEAR}}{{subst:CURRENTMONTH}}{{subst:CURRENTDAY2}}' % bot[0] or u'|' + bot
nova += u'}}\n'
# Substitui marcas no texto
if marcas: # Remove marcas antigas da página
texto = bmarcas.sub('', texto)
Linha 244 ⟶ 248:
texto = re.sub(ur'{{[Aa]vançarDiscussão}}\n?', u'', texto) # Remove {{avanção discussão}} se tiver
texto = re.sub(ur'^({{[Aa]vançarDiscussão}} ?\n?|.*?)', r'\1' + nova, texto) # Adiciona a marca no inicio ou depois de {{avançar discussão}}
# Sumário
if type(bot) == tuple: # Foi feita uma avaliação
if adtema:
sumario = u'Bot: adicioando marca{} {} e avaliando [[Wikipédia:Qualidade|qualidade]]: {} ({})'.format(len(adtema) > 1 and u's' or u'',
listar(adtema), bot[0], bot[1])
else:
sumario = u'Bot: avaliando [[Wikipédia:Qualidade|qualidade]]:
elif
if marcas:
sumario = u'Bot: adicionando marca{0}
len(marcas) > 1 and u's' or u'')
else:
sumario = u'Bot: adicionando marca{}
elif imp: # Não foi avaliado nem adicionado tema mas foi adicionada importância
sumario = u'Bot: colocando importância em marca
listar([u'importância {} para {}'.format(i, tema) for tema, i in imp.items()]))
else:
sumario = u'Bot: atualizando marca
if simular: # Com o parâmetro -simular não salva
if page.exists():
Linha 273 ⟶ 280:
return
return (nova, sumario)
def listar(itens):
lista = u''
n = len(itens) > 1 and len(itens) - 1 or 1
for i, item in enumerate(itens):
lista += (i == n and u' e ' or i > 0 and u', ' or u'') + item
return lista
simular, reav = False, False
Linha 278 ⟶ 292:
def main(*args):
site = pywikibot.getSite()
params = {}
genFactory = pagegenerators.GeneratorFactory()
for arg in pywikibot.handleArgs(*args):
if arg
pywikibot.output(u'A qualidade não é mais avaliada por robô na Wikipédia, para apenas ver a avaliação use -avaliar:"nome do artigo"')
elif arg.startswith(u'-adicionar:'):
elif arg.startswith(u'-avaliar:'):
qualidade = avaliar(pywikibot.Page(site, arg[9:]))
Linha 299 ⟶ 305:
return
elif arg.startswith(u'-exceção:'):
elif arg.startswith(u'-imp:'):
params['imp'] = dict([i.strip().split(u':', 1) for i in arg[5:].split(u'
elif arg.startswith(u'-eimp:'):
params['eimp'] = arg[6:].split(u',')
elif arg.startswith(u'-rmbot'):
params['rmbot'] = True
elif arg == u'-simular':
global simular
simular = True
elif arg == u'-comandos':
pywikibot.output(pagegenerators.parameterHelp)
Linha 316 ⟶ 321:
pywikibot.output(u'#Comando não encontrado: '+ arg)
return
for page in pagegenerators.PreloadingGenerator(genFactory.getCombinedGenerator()):
if not page.namespace() in [0, 1]:
continue
novo = atualizar(page,
t = page.title()
t = t[0:t.find(u':') + 1] + u'\03{lightblue}' + t[t.find(u':') + 1:] + u'\03{default}' # Cor
|