Vés al contingut

Viquipèdia:Taller de bots 2010/Projectes/Desambiguacions/main.py

De la Viquipèdia, l'enciclopèdia lliure

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()