Viquipèdia:Taller de bots 2010/Projectes/Desambiguacions/main.py
Aparença
Aquest és la funció principal (main) del programa, i utilitza totes les subfuncions anteriors. Veure una descripció de com utilitzar-lo aquí. (Nota: el codi és brut, no massa elegant.)
Codi
[modifica]# -*- coding: utf-8 -*-
import basededades, api, enllacospagina, pagdesambig
import wikipedia, re
def acanviar(pr,principals,secundaris):
if pr.startswith('m'):
return secundaris[int(pr[1:])]
else:
return principals[int(pr)]
def main():
db = basededades.main()
for pagina in db:
print '-'*len(u'| COMENÇA LA FASE '+pagina.upper()+' |')
print u'| \033[1;34mCOMENÇA LA FASE '+pagina.upper()+'\033[0m |'
print '-'*len(u'| COMENÇA LA FASE '+pagina.upper()+' |')
backlinks = api.enllacos(pagina)
for backlink in backlinks:
passed = False
print '-'*len(u"COMENÇA LA PÀGINA "+backlink.upper())
print u"\033[1;36mCOMENÇA LA PÀGINA "+backlink.upper()+'\033[0m'
print '-'*len(u"COMENÇA LA PÀGINA "+backlink.upper())
enllacos, text, pag = enllacospagina.cercaenllacos(backlink,pagina)
if len(enllacos) == 0:
passed = True
if not passed:
paragrafs = []
for par in re.split('\n\n',text):
paragrafs.append({'text':par,'start':text.index(par),'end':text.index(par)+len(par)})
nousparagrafs = []
for enllac in enllacos:
for p in paragrafs:
if int(enllac['start']) in range(int(p['start']),int(p['end'])):
t = p['text'].replace(enllac['text'],'\033[1;31m'+enllac['text']+'\033[0m')
principals, secundaris = pagdesambig.troba(enllac['text'])
textpr = u'Escull per què vols canviar el text que apunta a la pàgina de desambiguació:\n\033[1;33m'
count = 0
for prin in principals:
textpr += '%d - %s\n' % (count,prin)
count = count+1
textpr += '\033[0m'
count2 = 'm0'
for sec in secundaris:
textpr += '%s - %s\n' % (count2,sec)
count2 = 'm'+str(int(count2[1:])+1)
textpr += u's = següent, q = surt, text qualsevol = nom de l\'enllaç (si no és a la llista): '
print t
pr = raw_input(textpr.encode('utf-8'))
while 0:
pass
else:
try:
bla = int(pr)
esint = True
except ValueError:
esint = False
if pr[0] == 'm' and len(pr) == 2:
esm = True
else: esm = False
if pr == 's':
passed = True
elif pr == 'q':
exit()
elif esint or esm:
nousparagrafs.append((paragrafs.index(p),p['text'].replace(enllac['text'].strip('[]'),acanviar(pr,principals,secundaris)+'|'+enllac['text'].strip('[]'))))
print 'haurem de canviar '+acanviar(pr,principals,secundaris)
else: print 'haurem de canviar el text '+pr
if not passed:
for noupar in nousparagrafs:
index = noupar[0]
paragrafs[index]['text'] = noupar[1]
parsdef = []
for i in paragrafs:
parsdef.append(i['text'])
t = '\n\n'.join(parsdef)
print wikipedia.showDiff(text,t)
put = raw_input('Fem el put? (s/n) ')
if put == 's':
pag.put(t,comment=u'Bot semiautomàtic arreglant enllaços cap a pàgines de desambiguació')
else:
print u'Canviant de pàgina perquè l\'actual ja no té enllaços a pàgines de desambiguació'
else:
print u'Canviant de pàgina perquè l\'actual ja no té enllaços a pàgines de desambiguació'
main()