Codice del bot

modifica
# -*- coding: utf-8 -*-

# Biobot revolution - Alpha
#
# Copyright 2008 Simone Malacarne
# La base del codice del parser è
# Copyright 2008 [[Utente:Wiso]]
#
# This program is free software; you can redistribute  it and/or modify it
# under  the terms of  the GNU General  Public License as published by the
# Free Software Foundation;  either version 2 of the  License, or (at your
# option) any later version.

import re
import wikipedia
from pysqlite2 import dbapi2 as sqlite3
import catlib
import pagegenerators
from time import time, localtime, strftime

def templatesWithParams(thistxt):
 
        # remove commented-out stuff etc.
        thistxt  = wikipedia.removeDisabledParts(thistxt)
 
        # marker for | in wikilink
        marker = '@@'
        while marker in thistxt:
            marker += '@'
 
        result = []
        count = 0

	templateRemove = re.compile(u'{{(?!(.)?([Tt]emplate:)?[\n ]*?[Bb]io).*?}}', re.DOTALL)
	#thistxt = wikipedia.replaceExcept(thistxt, u'{{(?!([Tt]emplate:)?[\n ]*?[Bb]io).*?}}', u'', ['comment',])
	thistxt = re.sub(templateRemove, '', thistxt) # die die die!!!!
		
        Rtemplate = re.compile(u'{{[\n\r ]*?([Tt]emplate:)?([Bb]io).*?(\|(?P<params>[^{]+?))?}}',re.DOTALL) # regex principale
        RMarker = re.compile(r'(\[\[.+?)\|(.+?\]\])')
 	
        m = Rtemplate.search(thistxt)
	testosenzatemplate = Rtemplate.sub(u'', thistxt, 1) # toglie il testo del template bio dal testo (solo la prima occorrenza)
        if not m:
            #wikipedia.output('\03{lightred}ERROR 70: NON RIESCO A TROVARE IL TEMPLATE\03{default}')
            return ([], '')
        # Parameters
        paramString = m.group('params')
        params = []
        if paramString:
            paramString = RMarker.sub('\\1%s\\2' % marker, paramString)	

            # Parse string
            markedParams = paramString.split('|')
            for param in markedParams:
                param = param.replace(marker,u'|')
                params.append(param)
        return params, testosenzatemplate

def ordinaTemplate(templateTxt):
		
	import operator
	forzaOrdFlag = 0

	marcatore = {} #prepare un dizionario vuoto per inserire i campi presenti nella lista
	global tempaErrore
	tempaErrore = 0 # flag per indicare che c'è un errore nel template, caso 0 nessun errore
	for i in range(len(templateTxt)):
            if '=' not in templateTxt[i]:
                #wikipedia.output('\03{lightred}ERROR 83: IL CAMPO "%s" NON CONTIENE "=", salto ordinamento\03{default}' %templateTxt[i])
		tempaErrore += 1 # usiamo le unità nel caso manchi il parametro =
		templateTxt[i] = ('Parametro Fake = 1400') # scrive nel campo errato un valore ininfluente a caso

            templateTxt[i] = templateTxt[i].split('=')
            templateTxt[i][0] = templateTxt[i][0].strip()
            templateTxt[i][1] = templateTxt[i][1].strip()
	    if templateTxt[i][0].lower() not in marcatore: # nel caso in cui siano inseriti parametri doppi
	    	marcatore[templateTxt[i][0].lower()] = templateTxt[i][1] #inserisce nel dizionario i campi presenti nel template
	    else:
		tempaErrore += 10 # usiamo le decine per segnalare parametri doppi
		templateTxt[i][0] = 'Parametro Fake2'
	    #print templateTxt[i]
	
	if u'nome' in marcatore:
		tempOrd = marcatore[u'nome']    #nel caso in cui il campo non sia nel dizionario e quindi non nella lista lo aggiungi
	else: 
		templateTxt.append((u'nome',''))
		tempOrd = '' # se 'nome' non esiste creiamo comunque la variabile tempOrd con valore null. Altrimenti con 'cognome' avremmo un errore per l'utilizzo di una variabile che non esiste
	if u'cognome' in marcatore:
		if marcatore[u'cognome'] != '': tempOrd = marcatore[u'cognome'] + ' ' + tempOrd # l'if serve per evitare che aggiunga uno spazio inutile
	else:
		templateTxt.append((u'cognome',''))
	if u'forzaordinamento' in marcatore: #se esiste la usiamo
		if marcatore[u'forzaordinamento'] == '':
			forzaOrdFlag = 1 # questo serve se uno ha la grandiosa idea di metter il campo senza valori
	else:
		templateTxt.append((u'forzaordinamento', tempOrd)) #se non esiste la creiamo con l'accoppiata (cognome, nome)
	if u'annonascita' not in marcatore:
		templateTxt.append((u'annonascita',''))
	if u'giornomesenascita' not in marcatore:
		templateTxt.append((u'giornomesenascita',''))
	if u'annomorte' not in marcatore:
		templateTxt.append((u'annomorte',''))
	if u'giornomesemorte' not in marcatore:
		templateTxt.append((u'giornomesemorte',''))
	if u'nazionalità' not in marcatore:
		templateTxt.append((u'nazionalità',''))
	if u'attività' not in marcatore:
		templateTxt.append((u'attività',''))
	if u'attività2' not in marcatore:
		templateTxt.append((u'attività2',''))
	if u'attività3' not in marcatore:
		templateTxt.append((u'attività3',''))
	if u'attivitàaltre' not in marcatore:
		templateTxt.append((u'attivitàaltre',''))
	
	templateTxt.sort(key=lambda x: funzioneOrdine(x[0])) #riordina la lista, l'ordine è stabilito dalla funzione 'funzioneOrdine'
	if forzaOrdFlag == 1:
		templateTxt[2][1] = tempOrd        
	return templateTxt


def funzioneOrdine(x): # confronta i due valori in base ad una lista predefinita, serve come riferimento alla funzione di ordinamento sorted o sort
	global tempaErrore
	x = x.strip()
        #x = x[0].lower() + x[1:] #rende minuscola solo l'iniziale mentre a noi serve tutto minuscolo
	x = x.lower()
        ordine = [
         u'nome',
         u'cognome',
         u'forzaordinamento',
	 u'giornomesenascita',
         u'annonascita',
         u'giornomesemorte',
         u'annomorte', 
	 u'nazionalità',
	 u'attività',
         u'attività2',
         u'attività3',
         u'attivitàaltre',
         u'sesso',
         u'luogonascita',
	 u'luogonascitaalt',
         u'luogonascitalink',
	 u'postcognomevirgola',
	 u'epoca',
	 u'epoca2',
	 u'postcognome',
 	 u'luogomorte',
         u'luogomortealt',
 	 u'luogomortelink',
	 u'preattività',
         u'postnazionalità',
	 u'nazionalitànaturalizzato',
         u'immagine',
	 u'dimimmagine',
	 u'titolo',
	 u'specialità1',
	 u'specialità2',
	 u'specialità3',
	 u'specialità4',
	 u'categorie',
	 u'fineincipit',
	 u'predata',
	 u'premio1',
	 u'annopremio1',
	 u'premio2',
	 u'annopremio2',
	 u'premio3',
	 u'annopremio3',
	 u'premio4',
	 u'annopremio4',
         u'didascalia',
         u'notenascita',
         u'notemorte',
         u'parametro fake',
	 u'parametro fake2'] #viene inserito nel caso di parametri doppi, metto qua per non avere falsi positivi nel controllo dei parametri inventati

        try:  # nel caso uno dei due elementi non esista basta che vada in fondo alla lista per non rompere
            a = ordine.index(x)
	except ValueError: 
	    a = 999
	    tempaErrore = tempaErrore + 100 # usiamo le centinaio per segnalare i parametri inventati
            #wikipedia.output(u'ERROR 00 \03{lightred} Non trovo il seguente argomento "%s"\03{default}' %x)

        return a


def scorriWiki(): #procedura principale per la creazione e l'aggiormanto del database da internet

	con = sqlite3.connect('/home/simo/pywikipedia/bio.sqlite') #si collega al database TODO gestione errore di apertura db
	c = con.cursor()
	try:
		c.execute('DELETE FROM bio WHERE titolo <> ""')
		con.commit()
	except:
		wikipedia.output('Creazione nuovo database')
		
	c.execute('PRAGMA synchronous = OFF') #PROVA
	dbinaggiornamento = 0
	out_file = open('erroribio.txt', 'w') # prepara un file per loggare gli errori del bio
	try: 
		c.execute('''create table bio(titolo text, interwiki integer, nome text, cognome text, ordinamento text, gmnascita text,
		annonascita text, gmmorte text, annomorte text, nazione text, attiv1 text, attiv2 text, attiv3 text, attivaltre text, agg integer)''')
	except: #TODO vedere i vari tipi di eccezione
		wikipedia.output('Database già esistente. Aggiornamento')
		dbinaggiornamento = 1 #il database è già esistente e sarà aggiornato
	
	i = 0 # temporaneo per interrompere l'aggiornamento dopo x voci
        tempo = time()
	
	site = wikipedia.getSite()
	cat = catlib.Category(site,'Categoria:BioBot')
	gen = pagegenerators.PreloadingGenerator(cat.articles(), pageNumber=200)
	for page in gen:  #scorre la categoria indicata
		while page.isRedirectPage():
                	wikipedia.output(u'La pagina è un REDIRECT, seguo il redirect')
                	page = page.getRedirectTarget()            
            	i += 1
		if i % 200 == 0:
			wikipedia.output("numero %i - tempo %f" % (i, time() - tempo))
                        tempo = time()
		#if i == 2: break # dopo xx voci stacca, per test
		titoloPagina = page.title() #TODO da inserire la gestione errori nel caso in cui ci sia un errore di rete
		try:
			#page = wikipedia.Page(site, u"Utente:IlPisano/Biotest")
			text = page.get()
                        while True: # questo while serve per il caso di doppio template
				tempa, testosenzatemplate = templatesWithParams(text) #devono essere trasferiti nelle funzioni da creare
				if tempa == []: break		        	
				tempa = ordinaTemplate(tempa)
				t = (titoloPagina, len(page.interwiki()), tempa[0][1], tempa[1][1], tempa[2][1], tempa[3][1], tempa[4][1],
					tempa[5][1], tempa[6][1], tempa[7][1], tempa[8][1], tempa[9][1], tempa[10][1], tempa[11][1], 1)
		        	c.execute('insert or replace into bio values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)', t)
				text = testosenzatemplate
				
		except wikipedia.NoPage:
                	wikipedia.output(u'\03{lightred}ERROR 120 Page %s not found\03{lightdefault}' % page.aslink())
	con.commit()
	c.close
	#out_file.close()	
	return

def liveandletdie():

	date = [
		u'1 gennaio', u'2 gennaio', u'3 gennaio', u'4 gennaio', u'5 gennaio', u'6 gennaio', u'7 gennaio', u'8 gennaio', u'9 gennaio',
		u'10 gennaio', u'11 gennaio', u'12 gennaio', u'13 gennaio', u'14 gennaio', u'15 gennaio', u'16 gennaio', u'17 gennaio',
		u'18 gennaio', u'19 gennaio', u'20 gennaio', u'21 gennaio', u'22 gennaio', u'23 gennaio', u'24 gennaio', u'25 gennaio',
		u'26 gennaio', u'27 gennaio', u'28 gennaio', u'29 gennaio', u'30 gennaio', u'31 gennaio', u'1 febbraio', u'2 febbraio', 
		u'3 febbraio', u'4 febbraio', u'5 febbraio', u'6 febbraio', u'7 febbraio', u'8 febbraio', u'9 febbraio', u'10 febbraio',
		u'11 febbraio', u'12 febbraio', u'13 febbraio', u'14 febbraio', u'15 febbraio', u'16 febbraio', u'17 febbraio', u'18 febbraio',
		u'19 febbraio', u'20 febbraio', u'21 febbraio', u'22 febbraio', u'23 febbraio', u'24 febbraio', u'25 febbraio', u'26 febbraio',
		u'27 febbraio', u'28 febbraio', u'29 febbraio', u'1 marzo', u'2 marzo', u'3 marzo', u'4 marzo', u'5 marzo', u'6 marzo',
		u'7 marzo', u'8 marzo', u'9 marzo', u'10 marzo', u'11 marzo', u'12 marzo', u'13 marzo', u'14 marzo', u'15 marzo', u'16 marzo',
		u'17 marzo', u'18 marzo', u'19 marzo', u'20 marzo', u'21 marzo', u'22 marzo', u'23 marzo', u'24 marzo', u'25 marzo', u'26 marzo',
		u'27 marzo', u'28 marzo', u'29 marzo', u'30 marzo', u'31 marzo',u'1 aprile', u'2 aprile', u'3 aprile', u'4 aprile', u'5 aprile',
		u'6 aprile', u'7 aprile', u'8 aprile', u'9 aprile',
		u'10 aprile', u'11 aprile', u'12 aprile', u'13 aprile', u'14 aprile', u'15 aprile', u'16 aprile', u'17 aprile',
		u'18 aprile', u'19 aprile', u'20 aprile', u'21 aprile', u'22 aprile', u'23 aprile', u'24 aprile', u'25 aprile',
		u'26 aprile', u'27 aprile', u'28 aprile', u'29 aprile', u'30 aprile',u'1 maggio', u'2 maggio', u'3 maggio', u'4 maggio',
		u'5 maggio', u'6 maggio', u'7 maggio', u'8 maggio', u'9 maggio',
		u'10 maggio', u'11 maggio', u'12 maggio', u'13 maggio', u'14 maggio', u'15 maggio', u'16 maggio', u'17 maggio',
		u'18 maggio', u'19 maggio', u'20 maggio', u'21 maggio', u'22 maggio', u'23 maggio', u'24 maggio', u'25 maggio',
		u'26 maggio', u'27 maggio', u'28 maggio', u'29 maggio', u'30 maggio', u'31 maggio', u'1 giugno', u'2 giugno',
		u'3 giugno', u'4 giugno', u'5 giugno', u'6 giugno', u'7 giugno', u'8 giugno', u'9 giugno',
		u'10 giugno', u'11 giugno', u'12 giugno', u'13 giugno', u'14 giugno', u'15 giugno', u'16 giugno', u'17 giugno',
		u'18 giugno', u'19 giugno', u'20 giugno', u'21 giugno', u'22 giugno', u'23 giugno', u'24 giugno', u'25 giugno',
		u'26 giugno', u'27 giugno', u'28 giugno', u'29 giugno', u'30 giugno', u'1 luglio', u'2 luglio', u'3 luglio',
		u'4 luglio', u'5 luglio', u'6 luglio', u'7 luglio', u'8 luglio', u'9 luglio',
		u'10 luglio', u'11 luglio', u'12 luglio', u'13 luglio', u'14 luglio', u'15 luglio', u'16 luglio', u'17 luglio',
		u'18 luglio', u'19 luglio', u'20 luglio', u'21 luglio', u'22 luglio', u'23 luglio', u'24 luglio', u'25 luglio',
		u'26 luglio', u'27 luglio', u'28 luglio', u'29 luglio', u'30 luglio', u'31 luglio', u'1 agosto', u'2 agosto',
		u'3 agosto', u'4 agosto', u'5 agosto', u'6 agosto', u'7 agosto', u'8 agosto', u'9 agosto',
		u'10 agosto', u'11 agosto', u'12 agosto', u'13 agosto', u'14 agosto', u'15 agosto', u'16 agosto', u'17 agosto',
		u'18 agosto', u'19 agosto', u'20 agosto', u'21 agosto', u'22 agosto', u'23 agosto', u'24 agosto', u'25 agosto',
		u'26 agosto', u'27 agosto', u'28 agosto', u'29 agosto', u'30 agosto', u'31 agosto', u'1 settembre', u'2 settembre',
		u'3 settembre', u'4 settembre', u'5 settembre', u'6 settembre', u'7 settembre', u'8 settembre', u'9 settembre',
		u'10 settembre', u'11 settembre', u'12 settembre', u'13 settembre', u'14 settembre', u'15 settembre', u'16 settembre', u'17 settembre',
		u'18 settembre', u'19 settembre', u'20 settembre', u'21 settembre', u'22 settembre', u'23 settembre', u'24 settembre', u'25 settembre',
		u'26 settembre', u'27 settembre', u'28 settembre', u'29 settembre', u'30 settembre', u'1 ottobre', u'2 ottobre',
		u'3 ottobre', u'4 ottobre', u'5 ottobre', u'6 ottobre', u'7 ottobre', u'8 ottobre', u'9 ottobre',
		u'10 ottobre', u'11 ottobre', u'12 ottobre', u'13 ottobre', u'14 ottobre', u'15 ottobre', u'16 ottobre', u'17 ottobre',
		u'18 ottobre', u'19 ottobre', u'20 ottobre', u'21 ottobre', u'22 ottobre', u'23 ottobre', u'24 ottobre', u'25 ottobre',
		u'26 ottobre', u'27 ottobre', u'28 ottobre', u'29 ottobre', u'30 ottobre', u'31 ottobre', u'1 novembre', u'2 novembre',
		u'3 novembre', u'4 novembre', u'5 novembre', u'6 novembre', u'7 novembre', u'8 novembre', u'9 novembre',
		u'10 novembre', u'11 novembre', u'12 novembre', u'13 novembre', u'14 novembre', u'15 novembre', u'16 novembre', u'17 novembre',
		u'18 novembre', u'19 novembre', u'20 novembre', u'21 novembre', u'22 novembre', u'23 novembre', u'24 novembre', u'25 novembre',
		u'26 novembre', u'27 novembre', u'28 novembre', u'29 novembre', u'30 novembre', u'1 dicembre', u'2 dicembre', u'3 dicembre',
		u'4 dicembre', u'5 dicembre', u'6 dicembre', u'7 dicembre', u'8 dicembre', u'9 dicembre',
		u'10 dicembre', u'11 dicembre', u'12 dicembre', u'13 dicembre', u'14 dicembre', u'15 dicembre', u'16 dicembre', u'17 dicembre',
		u'18 dicembre', u'19 dicembre', u'20 dicembre', u'21 dicembre', u'22 dicembre', u'23 dicembre', u'24 dicembre', u'25 dicembre',
		u'26 dicembre', u'27 dicembre', u'28 dicembre', u'29 dicembre', u'30 dicembre', u'31 dicembre']

	datedir = {
		u'1 gennaio':u'001',
		u'2 gennaio':u'002',
		u'3 gennaio':u'003',
		u'4 gennaio':u'004',
		u'5 gennaio':u'005',
		u'6 gennaio':u'006',
		u'7 gennaio':u'007',
		u'8 gennaio':u'008',
		u'9 gennaio':u'009',
		u'10 gennaio':u'010',
		u'11 gennaio':u'011',
		u'12 gennaio':u'012',
		u'13 gennaio':u'013',
		u'14 gennaio':u'014',
		u'15 gennaio':u'015',
		u'16 gennaio':u'016',
		u'17 gennaio':u'017',
		u'18 gennaio':u'018',
		u'19 gennaio':u'019',
		u'20 gennaio':u'020',
		u'21 gennaio':u'021',
		u'22 gennaio':u'022',
		u'23 gennaio':u'023',
		u'24 gennaio':u'024',
		u'25 gennaio':u'025',
		u'26 gennaio':u'026',
		u'27 gennaio':u'027',
		u'28 gennaio':u'028',
		u'29 gennaio':u'029',
		u'30 gennaio':u'030',
		u'31 gennaio':u'031',
		u'1 febbraio':u'032',
		u'2 febbraio':u'033',
		u'3 febbraio':u'034',
		u'4 febbraio':u'035',
		u'5 febbraio':u'036',
		u'6 febbraio':u'037',
		u'7 febbraio':u'038',
		u'8 febbraio':u'039',
		u'9 febbraio':u'040',
		u'10 febbraio':u'041',
		u'11 febbraio':u'042',
		u'12 febbraio':u'043',
		u'13 febbraio':u'044',
		u'14 febbraio':u'045',
		u'15 febbraio':u'046',
		u'16 febbraio':u'047',
		u'17 febbraio':u'048',
		u'18 febbraio':u'049',
		u'19 febbraio':u'050',
		u'20 febbraio':u'051',
		u'21 febbraio':u'052',
		u'22 febbraio':u'053',
		u'23 febbraio':u'054',
		u'24 febbraio':u'055',
		u'25 febbraio':u'056',
		u'26 febbraio':u'057',
		u'27 febbraio':u'058',
		u'28 febbraio':u'059',
		u'29 febbraio':u'060',
		u'1 marzo':u'061',
		u'2 marzo':u'062',
		u'3 marzo':u'063',
		u'4 marzo':u'064',
		u'5 marzo':u'065',
		u'6 marzo':u'066',
		u'7 marzo':u'067',
		u'8 marzo':u'068',
		u'9 marzo':u'069',
		u'10 marzo':u'070',
		u'11 marzo':u'071',
		u'12 marzo':u'072',
		u'13 marzo':u'073',
		u'14 marzo':u'074',
		u'15 marzo':u'075',
		u'16 marzo':u'076',
		u'17 marzo':u'077',
		u'18 marzo':u'078',
		u'19 marzo':u'079',
		u'20 marzo':u'080',
		u'21 marzo':u'081',
		u'22 marzo':u'082',
		u'23 marzo':u'083',
		u'24 marzo':u'084',
		u'25 marzo':u'085',
		u'26 marzo':u'086',
		u'27 marzo':u'087',
		u'28 marzo':u'088',
		u'29 marzo':u'089',
		u'30 marzo':u'090',
		u'31 marzo':u'091',
		u'1 aprile':u'092',
		u'2 aprile':u'093',
		u'3 aprile':u'094',
		u'4 aprile':u'095',
		u'5 aprile':u'096',
		u'6 aprile':u'097',
		u'7 aprile':u'098',
		u'8 aprile':u'099',
		u'9 aprile':u'100',
		u'10 aprile':u'101',
		u'11 aprile':u'102',
		u'12 aprile':u'103',
		u'13 aprile':u'104',
		u'14 aprile':u'105',
		u'15 aprile':u'106',
		u'16 aprile':u'107',
		u'17 aprile':u'108',
		u'18 aprile':u'109',
		u'19 aprile':u'110',
		u'20 aprile':u'111',
		u'21 aprile':u'112',
		u'22 aprile':u'113',
		u'23 aprile':u'114',
		u'24 aprile':u'115',
		u'25 aprile':u'116',
		u'26 aprile':u'117',
		u'27 aprile':u'118',
		u'28 aprile':u'119',
		u'29 aprile':u'120',
		u'30 aprile':u'121',
		u'1 maggio':u'122',
		u'2 maggio':u'123',
		u'3 maggio':u'124',
		u'4 maggio':u'125',
		u'5 maggio':u'126',
		u'6 maggio':u'127',
		u'7 maggio':u'128',
		u'8 maggio':u'129',
		u'9 maggio':u'130',
		u'10 maggio':u'131',
		u'11 maggio':u'132',
		u'12 maggio':u'133',
		u'13 maggio':u'134',
		u'14 maggio':u'135',
		u'15 maggio':u'136',
		u'16 maggio':u'137',
		u'17 maggio':u'138',
		u'18 maggio':u'139',
		u'19 maggio':u'140',
		u'20 maggio':u'141',
		u'21 maggio':u'142',
		u'22 maggio':u'143',
		u'23 maggio':u'144',
		u'24 maggio':u'145',
		u'25 maggio':u'146',
		u'26 maggio':u'147',
		u'27 maggio':u'148',
		u'28 maggio':u'149',
		u'29 maggio':u'150',
		u'30 maggio':u'151',
		u'31 maggio':u'152',
		u'1 giugno':u'153',
		u'2 giugno':u'154',
		u'3 giugno':u'155',
		u'4 giugno':u'156',
		u'5 giugno':u'157',
		u'6 giugno':u'158',
		u'7 giugno':u'159',
		u'8 giugno':u'160',
		u'9 giugno':u'161',
		u'10 giugno':u'162',
		u'11 giugno':u'163',
		u'12 giugno':u'164',
		u'13 giugno':u'165',
		u'14 giugno':u'166',
		u'15 giugno':u'167',
		u'16 giugno':u'168',
		u'17 giugno':u'169',
		u'18 giugno':u'170',
		u'19 giugno':u'171',
		u'20 giugno':u'172',
		u'21 giugno':u'173',
		u'22 giugno':u'174',
		u'23 giugno':u'175',
		u'24 giugno':u'176',
		u'25 giugno':u'177',
		u'26 giugno':u'178',
		u'27 giugno':u'179',
		u'28 giugno':u'180',
		u'29 giugno':u'181',
		u'30 giugno':u'182',
		u'1 luglio':u'183',
		u'2 luglio':u'184',
		u'3 luglio':u'185',
		u'4 luglio':u'186',
		u'5 luglio':u'187',
		u'6 luglio':u'188',
		u'7 luglio':u'189',
		u'8 luglio':u'190',
		u'9 luglio':u'191',
		u'10 luglio':u'192',
		u'11 luglio':u'193',
		u'12 luglio':u'194',
		u'13 luglio':u'195',
		u'14 luglio':u'196',
		u'15 luglio':u'197',
		u'16 luglio':u'198',
		u'17 luglio':u'199',
		u'18 luglio':u'200',
		u'19 luglio':u'201',
		u'20 luglio':u'202',
		u'21 luglio':u'203',
		u'22 luglio':u'204',
		u'23 luglio':u'205',
		u'24 luglio':u'206',
		u'25 luglio':u'207',
		u'26 luglio':u'208',
		u'27 luglio':u'209',
		u'28 luglio':u'210',
		u'29 luglio':u'211',
		u'30 luglio':u'212',
		u'31 luglio':u'213',
		u'1 agosto':u'214',
		u'2 agosto':u'215',
		u'3 agosto':u'216',
		u'4 agosto':u'217',
		u'5 agosto':u'218',
		u'6 agosto':u'219',
		u'7 agosto':u'220',
		u'8 agosto':u'221',
		u'9 agosto':u'222',
		u'10 agosto':u'223',
		u'11 agosto':u'224',
		u'12 agosto':u'225',
		u'13 agosto':u'226',
		u'14 agosto':u'227',
		u'15 agosto':u'228',
		u'16 agosto':u'229',
		u'17 agosto':u'230',
		u'18 agosto':u'231',
		u'19 agosto':u'232',
		u'20 agosto':u'233',
		u'21 agosto':u'234',
		u'22 agosto':u'235',
		u'23 agosto':u'236',
		u'24 agosto':u'237',
		u'25 agosto':u'238',
		u'26 agosto':u'239',
		u'27 agosto':u'240',
		u'28 agosto':u'241',
		u'29 agosto':u'242',
		u'30 agosto':u'243',
		u'31 agosto':u'244',
		u'1 settembre':u'245',
		u'2 settembre':u'246',
		u'3 settembre':u'247',
		u'4 settembre':u'248',
		u'5 settembre':u'249',
		u'6 settembre':u'250',
		u'7 settembre':u'251',
		u'8 settembre':u'252',
		u'9 settembre':u'253',
		u'10 settembre':u'254',
		u'11 settembre':u'255',
		u'12 settembre':u'256',
		u'13 settembre':u'257',
		u'14 settembre':u'258',
		u'15 settembre':u'259',
		u'16 settembre':u'260',
		u'17 settembre':u'261',
		u'18 settembre':u'262',
		u'19 settembre':u'263',
		u'20 settembre':u'264',
		u'21 settembre':u'265',
		u'22 settembre':u'266',
		u'23 settembre':u'267',
		u'24 settembre':u'268',
		u'25 settembre':u'269',
		u'26 settembre':u'270',
		u'27 settembre':u'271',
		u'28 settembre':u'272',
		u'29 settembre':u'273',
		u'30 settembre':u'274',
		u'1 ottobre':u'275',
		u'2 ottobre':u'276',
		u'3 ottobre':u'277',
		u'4 ottobre':u'278',
		u'5 ottobre':u'279',
		u'6 ottobre':u'280',
		u'7 ottobre':u'281',
		u'8 ottobre':u'282',
		u'9 ottobre':u'283',
		u'10 ottobre':u'284',
		u'11 ottobre':u'285',
		u'12 ottobre':u'286',
		u'13 ottobre':u'287',
		u'14 ottobre':u'288',
		u'15 ottobre':u'289',
		u'16 ottobre':u'290',
		u'17 ottobre':u'291',
		u'18 ottobre':u'292',
		u'19 ottobre':u'293',
		u'20 ottobre':u'294',
		u'21 ottobre':u'295',
		u'22 ottobre':u'296',
		u'23 ottobre':u'297',
		u'24 ottobre':u'298',
		u'25 ottobre':u'299',
		u'26 ottobre':u'300',
		u'27 ottobre':u'301',
		u'28 ottobre':u'302',
		u'29 ottobre':u'303',
		u'30 ottobre':u'304',
		u'31 ottobre':u'305',
		u'1 novembre':u'306',
		u'2 novembre':u'307',
		u'3 novembre':u'308',
		u'4 novembre':u'309',
		u'5 novembre':u'310',
		u'6 novembre':u'311',
		u'7 novembre':u'312',
		u'8 novembre':u'313',
		u'9 novembre':u'314',
		u'10 novembre':u'315',
		u'11 novembre':u'316',
		u'12 novembre':u'317',
		u'13 novembre':u'318',
		u'14 novembre':u'319',
		u'15 novembre':u'320',
		u'16 novembre':u'321',
		u'17 novembre':u'322',
		u'18 novembre':u'323',
		u'19 novembre':u'324',
		u'20 novembre':u'325',
		u'21 novembre':u'326',
		u'22 novembre':u'327',
		u'23 novembre':u'328',
		u'24 novembre':u'329',
		u'25 novembre':u'330',
		u'26 novembre':u'331',
		u'27 novembre':u'332',
		u'28 novembre':u'333',
		u'29 novembre':u'334',
		u'30 novembre':u'335',
		u'1 dicembre':u'336',
		u'2 dicembre':u'337',
		u'3 dicembre':u'338',
		u'4 dicembre':u'339',
		u'5 dicembre':u'340',
		u'6 dicembre':u'341',
		u'7 dicembre':u'342',
		u'8 dicembre':u'343',
		u'9 dicembre':u'344',
		u'10 dicembre':u'345',
		u'11 dicembre':u'346',
		u'12 dicembre':u'347',
		u'13 dicembre':u'348',
		u'14 dicembre':u'349',
		u'15 dicembre':u'350',
		u'16 dicembre':u'351',
		u'17 dicembre':u'352',
		u'18 dicembre':u'353',
		u'19 dicembre':u'354',
		u'20 dicembre':u'355',
		u'21 dicembre':u'356',
		u'22 dicembre':u'357',
		u'23 dicembre':u'358',
		u'24 dicembre':u'359',
		u'25 dicembre':u'360',
		u'26 dicembre':u'361',
		u'27 dicembre':u'362',
		u'28 dicembre':u'363',
		u'29 dicembre':u'364',
		u'30 dicembre':u'365',
		u'31 dicembre':u'366'}


	def scriviwiki(nuovotesto, titolopagina, dataordinale, acceptall= None):

		site = wikipedia.getSite()
		if dataordinale in (8, 11, 39, 42, 68, 71, 99, 102, 129, 132, 160, 163, 190, 193, 221, 224, 252, 255, 282, 285, 313, 316, 343, 346):
			page = wikipedia.Page(site, (u"Nati l'" + titolopagina))
		elif dataordinale in (1, 32, 61, 92, 122, 153, 183, 214, 245, 275, 306, 336):
			page = wikipedia.Page(site, (u'Nati il 1º ' + titolopagina[2:]))
		else:
			page = wikipedia.Page(site, (u'Nati il ' + titolopagina))
			#page = wikipedia.Page(site, 'Utente:Fungo/Biotest')
		while page.isRedirectPage():
                	wikipedia.output(u'La pagina è un REDIRECT, seguo il redirect')
                	page = page.getRedirectTarget()            
            	try:
                	text = page.get()
                	if not page.canBeEdited():
                		wikipedia.output(u"\03{lightred}ERROR 90 You can't edit page %s\03{default}" % page.aslink())
                		return
            	except wikipedia.NoPage:
                	wikipedia.output(u'\03{lightred}ERROR 120 Page %s not found\03{lightdefault}' % page.aslink())
                	return
            	except wikipedia.IsRedirectPage:
                	wikipedia.output(u'\03{lightyellow}FATAL ERROR 100 Page is redirect.\03{default}')
			return
 
		if text!=nuovotesto:
	                wikipedia.output('    ------------------diff-------------------')
        	        wikipedia.showDiff(text, nuovotesto)
        	        wikipedia.output('    -----------------------------------------')
        	        #wikipedia.setAction(message[:-2])
        	        if not acceptall:
        	        	choice = wikipedia.inputChoice(u'Do you want to accept these changes?', ['Yes', 'No', 'All'], ['y', 'N', 'a'], 'N')
                    		if choice in ['a', 'A']:
                    		    acceptall = True
                    		if choice in ['y', 'Y']:
                        	    page.put_async(nuovotesto, u'{{[[Progetto:Biografie|biobot]]}} aggiornamento voci')
                	if acceptall:
                    		try:
                    	    		page.put(nuovotesto, u'{{[[Progetto:Biografie|biobot]]}} aggiornamento voci')
                   		except wikipedia.EditConflict:
                   	 		wikipedia.output(u'Skipping %s because of edit conflict' % (page.title(),))
                  	  	except wikipedia.SpamfilterError, e:
                    			wikipedia.output(u'Cannot change %s because of blacklist entry %s' % (page.title(), e.url))
                    		except wikipedia.PageNotSaved, error:
                    			wikipedia.output(u'\03{lightred}ERROR 10 putting page: %s\03{default' % (error.args,))
                    		except wikipedia.LockedPage:
                    			wikipedia.output(u'Skipping %s (locked page)' % (page.title(),))
            	else:
                	wikipedia.output('\03{lightyellow}WARNING 30  Nessuna modifica da fare\03{default}')
			return
		return acceptall

	def scriviwikiMorti(nuovotesto, titolopagina, dataordinale, acceptall= None):

		site = wikipedia.getSite()
		if dataordinale in (8, 11, 39, 42, 68, 71, 99, 102, 129, 132, 160, 163, 190, 193, 221, 224, 252, 255, 282, 285, 313, 316, 343, 346):
			page = wikipedia.Page(site, (u"Morti l'" + titolopagina))
		elif dataordinale in (1, 32, 61, 92, 122, 153, 183, 214, 245, 275, 306, 336):
			page = wikipedia.Page(site, (u'Morti il 1º ' + titolopagina[2:]))
		else:
			page = wikipedia.Page(site, (u'Morti il ' + titolopagina))
			#page = wikipedia.Page(site, 'Utente:Fungo/Biotest')
		while page.isRedirectPage():
                	wikipedia.output(u'La pagina è un REDIRECT, seguo il redirect')
                	page = page.getRedirectTarget()            
            	try:
                	text = page.get()
                	if not page.canBeEdited():
                		wikipedia.output(u"\03{lightred}ERROR 90 You can't edit page %s\03{default}" % page.aslink())
                		return
            	except wikipedia.NoPage:
                	wikipedia.output(u'\03{lightred}ERROR 120 Page %s not found\03{lightdefault}' % page.aslink())
                	return
            	except wikipedia.IsRedirectPage:
                	wikipedia.output(u'\03{lightyellow}FATAL ERROR 100 Page is redirect.\03{default}')
			return
 
		if text!=nuovotesto:
	                wikipedia.output('    ------------------diff-------------------')
        	        wikipedia.showDiff(text, nuovotesto)
        	        wikipedia.output('    -----------------------------------------')
        	        #wikipedia.setAction(message[:-2])
        	        if not acceptall:
        	        	choice = wikipedia.inputChoice(u'Do you want to accept these changes?', ['Yes', 'No', 'All'], ['y', 'N', 'a'], 'N')
                    		if choice in ['a', 'A']:
                    		    acceptall = True
                    		if choice in ['y', 'Y']:
                        	    page.put_async(nuovotesto, u'{{[[Progetto:Biografie|biobot]]}} aggiornamento voci')
                	if acceptall:
                    		try:
                    	    		page.put(nuovotesto, u'{{[[Progetto:Biografie|biobot]]}} aggiornamento voci')
                   		except wikipedia.EditConflict:
                   	 		wikipedia.output(u'Skipping %s because of edit conflict' % (page.title(),))
                  	  	except wikipedia.SpamfilterError, e:
                    			wikipedia.output(u'Cannot change %s because of blacklist entry %s' % (page.title(), e.url))
                    		except wikipedia.PageNotSaved, error:
                    			wikipedia.output(u'\03{lightred}ERROR 10 putting page: %s\03{default' % (error.args,))
                    		except wikipedia.LockedPage:
                    			wikipedia.output(u'Skipping %s (locked page)' % (page.title(),))
            	else:
                	wikipedia.output('\03{lightyellow}WARNING 30  Nessuna modifica da fare\03{default}')
			return
		return acceptall

	def scriviwikiAnni(nuovotesto, titolopagina, acceptall= None):

		site = wikipedia.getSite()
		if titolopagina[0] == u'8' or titolopagina == u'11' or titolopagina == u'11 a.C.' or titolopagina == u'1' or titolopagina == u'1 a.C.':
			page = wikipedia.Page(site, (u"Nati nell'" + titolopagina))
			flagvirgola = 1
		else:
			page = wikipedia.Page(site, (u'Nati nel ' + titolopagina))
			flagvirgola = 0
		#page = wikipedia.Page(site, 'Utente:Fungo/Biotest')
		text = u''
		pgflag = 0	
		while page.isRedirectPage():
                	wikipedia.output(u'La pagina è un REDIRECT, seguo il redirect')
                	page = page.getRedirectTarget()            
            	try:
                	text = page.get()
                	if not page.canBeEdited():
                		wikipedia.output(u"\03{lightred}ERROR 90 You can't edit page %s\03{default}" % page.aslink())
                		return
            	except wikipedia.NoPage:
                	wikipedia.output(u'\03{lightred}ERROR 120 Page %s not found\03{lightdefault}' % page.aslink())
			# la pagina non esiste, verifichiamo se sulla pagina dell'anno è tutto ok
		except wikipedia.IsRedirectPage:
                	wikipedia.output(u'\03{lightyellow}FATAL ERROR 100 Page is redirect.\03{default}')
			#return
		pageanno = wikipedia.Page(site, titolopagina)
		textanno = pageanno.get()
		if flagvirgola == 1:
			stringadainserire = u"== [[Nati nell'" + titolopagina + u"|Nati]] ==\n<!-- Per favore NON scrivere QUI i nomi delle persone, ma aggiungi il template:Bio alla loro voce -->\n{{:Nati nell'" + titolopagina + u"}}\n<!-- L'aggiornamento è periodico e automatico. Per chiarimenti vai al progetto Progetto:Biografie -->\n\n=="		
			textannocorretto = re.sub(u'(?s)==[\[ ]*Nati[ ]*==.*?==', stringadainserire , textanno)
			if textanno != textannocorretto:
				wikipedia.output('    ------------diff pagina anno-------------')
				wikipedia.showDiff(textanno, textannocorretto)
				wikipedia.output('    ------------------diff-------------------')
				pgflag=1
		else:
			stringadainserire = u"== [[Nati nel " + titolopagina + u"|Nati]] ==\n<!-- Per favore NON scrivere QUI i nomi delle persone, ma aggiungi il template:Bio alla loro voce -->\n{{:Nati nel " + titolopagina + u"}}\n<!-- L'aggiornamento è periodico e automatico. Per chiarimenti vai al progetto Progetto:Biografie -->\n\n=="			
			textannocorretto = re.sub(u'(?s)==[\[ ]*Nati[ ]*==.*?==', stringadainserire , textanno)
			if textanno != textannocorretto:
				wikipedia.output('    ------------diff pagina anno-------------')
				wikipedia.showDiff(textanno, textannocorretto)
				wikipedia.output('    ------------------diff-------------------')
				pgflag=1
                if text!=nuovotesto or pgflag == 1:
	                wikipedia.output('    ------------------diff-------------------')
        	        wikipedia.showDiff(text, nuovotesto)
        	        wikipedia.output('    -----------------------------------------')
        	        #wikipedia.setAction(message[:-2])
        	        if not acceptall:
        	        	choice = wikipedia.inputChoice(u'Do you want to accept these changes?', ['Yes', 'No', 'All'], ['y', 'N', 'a'], 'N')
                    		if choice in ['a', 'A']:
                    		    acceptall = True
                    		if choice in ['y', 'Y']:
                        	    page.put_async(nuovotesto, u'{{[[Progetto:Biografie|biobot]]}} aggiornamento voci')
				    if pgflag == 1:
					print ('tapioca')
					pageanno.put_async(textannocorretto, u'{{[[Progetto:Biografie|biobot]]}} aggiornamento voci')
                	if acceptall:
                    		try:
                    	    		page.put(nuovotesto, u'{{[[Progetto:Biografie|biobot]]}} aggiornamento voci')
					if pgflag == 1:
						#print ('tapioca2')
						pageanno.put(textannocorretto,u'{{[[Progetto:Biografie|biobot]]}} aggiornamento voci')
                   		except wikipedia.EditConflict:
                   	 		wikipedia.output(u'Skipping %s because of edit conflict' % (page.title(),))
                  	  	except wikipedia.SpamfilterError, e:
                    			wikipedia.output(u'Cannot change %s because of blacklist entry %s' % (page.title(), e.url))
                    		except wikipedia.PageNotSaved, error:
                    			wikipedia.output(u'\03{lightred}ERROR 10 putting page: %s\03{default' % (error.args,))
                    		except wikipedia.LockedPage:
                    			wikipedia.output(u'Skipping %s (locked page)' % (page.title(),))
            	else:
                	wikipedia.output('\03{lightyellow}WARNING 30  Nessuna modifica da fare\03{default}')
			return
		return acceptall

	def rimuoviAnni(titolopagina, acceptall= None): # togli il link nella pagina dell'anno verso "nati nel ..."
		site = wikipedia.getSite()
		pageanno = wikipedia.Page(site, titolopagina)
		try:
                	textanno = pageanno.get()
                	if not pageanno.canBeEdited():
                		wikipedia.output(u"\03{lightred}ERROR 90 You can't edit page %s\03{default}" % pageanno.aslink())
                		return acceptall
            	except wikipedia.NoPage:
                	wikipedia.output(u'\03{lightred}ERROR 120 Page %s not found\03{lightdefault}' % pageanno.aslink())
			return acceptall
			# la pagina non esiste, verifichiamo se sulla pagina dell'anno è tutto ok
		except wikipedia.IsRedirectPage:
                	wikipedia.output(u'\03{lightyellow}FATAL ERROR 100 Page is redirect.\03{default}')
			return acceptall
			#return
		stringadainserire = u"== Nati ==\n<!-- Per favore NON scrivere QUI i nomi delle persone, ma aggiungi il template:Bio alla loro voce -->\n<!-- L'aggiornamento è periodico e automatico. Per chiarimenti vai al progetto Progetto:Biografie -->\n=="		
		textannocorretto = re.sub(u'(?s)==[ ]*\[\[Nati.*?\|.*?\]\][ ]*==.*?==', stringadainserire, textanno)
		if textanno != textannocorretto:
			wikipedia.output('    ------------diff pagina anno-------------')
			wikipedia.showDiff(textanno, textannocorretto)
			wikipedia.output('    ------------------diff-------------------')
        	        if not acceptall:
        	        	choice = wikipedia.inputChoice(u'Do you want to accept these changes?', ['Yes', 'No', 'All'], ['y', 'N', 'a'], 'N')
                    		if choice in ['a', 'A']:
                    		    acceptall = True
                    		if choice in ['y', 'Y']:
                        		pageanno.put_async(textannocorretto, u'{{[[Progetto:Biografie|biobot]]}} aggiornamento voci')
                	if acceptall:
                    		try:
                    	    		pageanno.put(textannocorretto,u'{{[[Progetto:Biografie|biobot]]}} aggiornamento voci')
                   		except wikipedia.EditConflict:
                   	 		wikipedia.output(u'Skipping %s because of edit conflict' % (page.title(),))
                  	  	except wikipedia.SpamfilterError, e:
                    			wikipedia.output(u'Cannot change %s because of blacklist entry %s' % (page.title(), e.url))
                    		except wikipedia.PageNotSaved, error:
                    			wikipedia.output(u'\03{lightred}ERROR 10 putting page: %s\03{default' % (error.args,))
                    		except wikipedia.LockedPage:
                    			wikipedia.output(u'Skipping %s (locked page)' % (page.title(),))
            	else:
                	wikipedia.output('\03{lightyellow}WARNING 30  Nessuna modifica da fare\03{default}')
			return
		return acceptall		


	def rimuovinatiAnni(titolopagina, acceptall= None): # cancella la pagina "nati nel ..."
		site = wikipedia.getSite()
		canctxt = u"{{cancella subito|Pagina vuota, soggetti inseriti a mano (nel caso inserire il  <nowiki>{{tmp|bio}}</nowiki> nelle rispettive pagine) o che non devono essere presenti in questa pagina, verificare attentamente e nel caso cancellare anche il link dalla pagina dell'anno. In caso di dubbi avvertire il manovratore del bot}}"
		if titolopagina[0] == u'8' or titolopagina == u'11' or titolopagina == u'11 a.C.' or titolopagina == u'1' or titolopagina == u'1 a.C.':
			page = wikipedia.Page(site, (u"Nati nell'" + titolopagina))
		else:
			page = wikipedia.Page(site, (u'Nati nel ' + titolopagina))
		try:
                	text = page.get()
                	if not page.canBeEdited():
                		wikipedia.output(u"\03{lightred}ERROR 90 You can't edit page %s\03{default}" % page.aslink())
                		return(acceptall)
            	except wikipedia.NoPage:
                	wikipedia.output(u'\03{lightred}ERROR 120 Page %s not found\03{lightdefault}' % page.aslink())
			return(acceptall)
			# la pagina non esiste, verifichiamo se sulla pagina dell'anno è tutto ok
		except wikipedia.IsRedirectPage:
                	wikipedia.output(u'\03{lightyellow}FATAL ERROR 100 Page is redirect.\03{default}')
			return acceptall
			#return
		canctxt = text + u'\n\n' + canctxt
		if text != canctxt:
			wikipedia.output('    ------------diff pagina anno-------------')
			wikipedia.showDiff(text, canctxt)
			wikipedia.output('    ------------------diff-------------------')
        	        if not acceptall:
        	        	choice = wikipedia.inputChoice(u'Do you want to accept these changes?', ['Yes', 'No', 'All'], ['y', 'N', 'a'], 'N')
                    		if choice in ['a', 'A']:
                    		    acceptall = True
                    		if choice in ['y', 'Y']:
                        		page.put_async(canctxt, u'{{[[Progetto:Biografie|biobot]]}} aggiornamento voci')
                	if acceptall:
                    		try:
                    	    		page.put(canctxt, u'{{[[Progetto:Biografie|biobot]]}} aggiornamento voci')
                   		except wikipedia.EditConflict:
                   	 		wikipedia.output(u'Skipping %s because of edit conflict' % (page.title(),))
                  	  	except wikipedia.SpamfilterError, e:
                    			wikipedia.output(u'Cannot change %s because of blacklist entry %s' % (page.title(), e.url))
                    		except wikipedia.PageNotSaved, error:
                    			wikipedia.output(u'\03{lightred}ERROR 10 putting page: %s\03{default' % (error.args,))
                    		except wikipedia.LockedPage:
                    			wikipedia.output(u'Skipping %s (locked page)' % (page.title(),))
            	else:
                	wikipedia.output('\03{lightyellow}WARNING 30  Nessuna modifica da fare\03{default}')
			return
		return acceptall		

#---------------------

	def scriviwikiAnnimorti(nuovotesto, titolopagina, acceptall= None):

		site = wikipedia.getSite()
		if titolopagina[0] == u'8' or titolopagina == u'11' or titolopagina == u'11 a.C.' or titolopagina == u'1' or titolopagina == u'1 a.C.':
			page = wikipedia.Page(site, (u"Morti nell'" + titolopagina))
			flagvirgola = 1
		else:
			page = wikipedia.Page(site, (u'Morti nel ' + titolopagina))
			flagvirgola = 0
		#page = wikipedia.Page(site, 'Utente:Fungo/Biotest')
		text = u''
		pgflag = 0	
		while page.isRedirectPage():
                	wikipedia.output(u'La pagina è un REDIRECT, seguo il redirect')
                	page = page.getRedirectTarget()            
            	try:
                	text = page.get()
                	if not page.canBeEdited():
                		wikipedia.output(u"\03{lightred}ERROR 90 You can't edit page %s\03{default}" % page.aslink())
                		return
            	except wikipedia.NoPage:
                	wikipedia.output(u'\03{lightred}ERROR 120 Page %s not found\03{lightdefault}' % page.aslink())
			# la pagina non esiste, verifichiamo se sulla pagina dell'anno è tutto ok
		except wikipedia.IsRedirectPage:
                	wikipedia.output(u'\03{lightyellow}FATAL ERROR 100 Page is redirect.\03{default}')
			#return
		pageanno = wikipedia.Page(site, titolopagina)
		textanno = pageanno.get()
		if flagvirgola == 1: # caso pagina con - nell' -
			stringadainserire = u"== [[Morti nell'" + titolopagina + u"|Morti]] ==\n<!-- Per favore NON scrivere QUI i nomi delle persone, ma aggiungi il template:Bio alla loro voce -->\n{{:Morti nell'" + titolopagina + u"}}\n<!-- L'aggiornamento è periodico e automatico. Per chiarimenti vai al progetto Progetto:Biografie -->\n\n[[Categoria:Anni del"		
			textannocorretto = re.sub(u'(?s)==[\[ ]*Morti[ ]*==.*?\[\[Categoria:Anni del', stringadainserire , textanno)
			if textanno != textannocorretto:
				wikipedia.output('    ------------diff pagina anno-------------')
				wikipedia.showDiff(textanno, textannocorretto)
				wikipedia.output('    ------------------diff-------------------')
				pgflag=1
		else:
			stringadainserire = u"== [[Morti nel " + titolopagina + u"|Morti]] ==\n<!-- Per favore NON scrivere QUI i nomi delle persone, ma aggiungi il template:Bio alla loro voce -->\n{{:Morti nel " + titolopagina + u"}}\n<!-- L'aggiornamento è periodico e automatico. Per chiarimenti vai al progetto Progetto:Biografie -->\n\n[[Categoria:Anni del"			
			textannocorretto = re.sub(u'(?s)==[\[ ]*Morti[ ]*==.*?\[\[Categoria:Anni del', stringadainserire , textanno)
			if textanno != textannocorretto:
				wikipedia.output('    ------------diff pagina anno-------------')
				wikipedia.showDiff(textanno, textannocorretto)
				wikipedia.output('    ------------------diff-------------------')
				pgflag=1
                if text!=nuovotesto or pgflag == 1:
	                wikipedia.output('    ------------------diff-------------------')
        	        wikipedia.showDiff(text, nuovotesto)
        	        wikipedia.output('    -----------------------------------------')
        	        #wikipedia.setAction(message[:-2])
        	        if not acceptall:
        	        	choice = wikipedia.inputChoice(u'Do you want to accept these changes?', ['Yes', 'No', 'All'], ['y', 'N', 'a'], 'N')
                    		if choice in ['a', 'A']:
                    		    acceptall = True
                    		if choice in ['y', 'Y']:
                        	    page.put_async(nuovotesto, u'{{[[Progetto:Biografie|biobot]]}} aggiornamento voci')
				    if pgflag == 1:
					pageanno.put_async(textannocorretto, u'{{[[Progetto:Biografie|biobot]]}} aggiornamento voci')
                	if acceptall:
                    		try:
                    	    		page.put(nuovotesto, u'{{[[Progetto:Biografie|biobot]]}} aggiornamento voci')
					if pgflag == 1:
						pageanno.put(textannocorretto,u'{{[[Progetto:Biografie|biobot]]}} aggiornamento voci')
                   		except wikipedia.EditConflict:
                   	 		wikipedia.output(u'Skipping %s because of edit conflict' % (page.title(),))
                  	  	except wikipedia.SpamfilterError, e:
                    			wikipedia.output(u'Cannot change %s because of blacklist entry %s' % (page.title(), e.url))
                    		except wikipedia.PageNotSaved, error:
                    			wikipedia.output(u'\03{lightred}ERROR 10 putting page: %s\03{default' % (error.args,))
                    		except wikipedia.LockedPage:
                    			wikipedia.output(u'Skipping %s (locked page)' % (page.title(),))
            	else:
                	wikipedia.output('\03{lightyellow}WARNING 30  Nessuna modifica da fare\03{default}')
			return
		return acceptall

	def rimuoviAnnimorti(titolopagina, acceptall= None): # togli il link nella pagina dell'anno verso "morti nel ..."
		site = wikipedia.getSite()
		pageanno = wikipedia.Page(site, titolopagina)
		try:
                	textanno = pageanno.get()
                	if not pageanno.canBeEdited():
                		wikipedia.output(u"\03{lightred}ERROR 90 You can't edit page %s\03{default}" % pageanno.aslink())
                		return acceptall
            	except wikipedia.NoPage:
                	wikipedia.output(u'\03{lightred}ERROR 120 Page %s not found\03{lightdefault}' % pageanno.aslink())
			return acceptall
			# la pagina non esiste, verifichiamo se sulla pagina dell'anno è tutto ok
		except wikipedia.IsRedirectPage:
                	wikipedia.output(u'\03{lightyellow}FATAL ERROR 100 Page is redirect.\03{default}')
			return acceptall
			#return
		stringadainserire = u"== Morti ==\n<!-- Per favore NON scrivere QUI i nomi delle persone, ma aggiungi il template:Bio alla loro voce -->\n<!-- L'aggiornamento è periodico e automatico. Per chiarimenti vai al progetto Progetto:Biografie -->\n[[Categoria:Anni del"		
		textannocorretto = re.sub(u'(?s)==[ ]*\[\[Morti.*?\|.*?\]\][ ]*==.*?\[\[Categoria:Anni del', stringadainserire, textanno)
		if textanno != textannocorretto:
			wikipedia.output('    ------------diff pagina anno-------------')
			wikipedia.showDiff(textanno, textannocorretto)
			wikipedia.output('    ------------------diff-------------------')
        	        if not acceptall:
        	        	choice = wikipedia.inputChoice(u'Do you want to accept these changes?', ['Yes', 'No', 'All'], ['y', 'N', 'a'], 'N')
                    		if choice in ['a', 'A']:
                    		    acceptall = True
                    		if choice in ['y', 'Y']:
                        		pageanno.put_async(textannocorretto, u'{{[[Progetto:Biografie|biobot]]}} aggiornamento voci')
                	if acceptall:
                    		try:
                    	    		pageanno.put(textannocorretto,u'{{[[Progetto:Biografie|biobot]]}} aggiornamento voci')
                   		except wikipedia.EditConflict:
                   	 		wikipedia.output(u'Skipping %s because of edit conflict' % (page.title(),))
                  	  	except wikipedia.SpamfilterError, e:
                    			wikipedia.output(u'Cannot change %s because of blacklist entry %s' % (page.title(), e.url))
                    		except wikipedia.PageNotSaved, error:
                    			wikipedia.output(u'\03{lightred}ERROR 10 putting page: %s\03{default' % (error.args,))
                    		except wikipedia.LockedPage:
                    			wikipedia.output(u'Skipping %s (locked page)' % (page.title(),))
            	else:
                	wikipedia.output('\03{lightyellow}WARNING 30  Nessuna modifica da fare\03{default}')
			return
		return acceptall		


	def rimuovimortiAnni(titolopagina, acceptall= None): # cancella la pagina "morti nel ..."
		site = wikipedia.getSite()
		canctxt = u"{{cancella subito|Pagina vuota, soggetti inseriti a mano (nel caso inserire il  <nowiki>{{tmp|bio}}</nowiki> nelle rispettive pagine) o che non devono essere presenti in questa pagina, verificare attentamente e nel caso cancellare anche il link dalla pagina dell'anno. In caso di dubbi avvertire il manovratore del bot}}"
		if titolopagina[0] == u'8' or titolopagina == u'11' or titolopagina == u'11 a.C.' or titolopagina == u'1' or titolopagina == u'1 a.C.':
			page = wikipedia.Page(site, (u"Morti nell'" + titolopagina))
		else:
			page = wikipedia.Page(site, (u'Morti nel ' + titolopagina))
		try:
                	text = page.get()
                	if not page.canBeEdited():
                		wikipedia.output(u"\03{lightred}ERROR 90 You can't edit page %s\03{default}" % page.aslink())
                		return(acceptall)
            	except wikipedia.NoPage:
                	wikipedia.output(u'\03{lightred}ERROR 120 Page %s not found\03{lightdefault}' % page.aslink())
			return(acceptall)
			# la pagina non esiste, verifichiamo se sulla pagina dell'anno è tutto ok
		except wikipedia.IsRedirectPage:
                	wikipedia.output(u'\03{lightyellow}FATAL ERROR 100 Page is redirect.\03{default}')
			return acceptall
			#return
		canctxt = text + u'\n\n' + canctxt
		if text != canctxt:
			wikipedia.output(page.title())
			wikipedia.output('    ------------diff pagina anno-------------')
			wikipedia.showDiff(text, canctxt)
			wikipedia.output('    ------------------diff-------------------')
        	        if not acceptall:
        	        	choice = wikipedia.inputChoice(u'Do you want to accept these changes?', ['Yes', 'No', 'All'], ['y', 'N', 'a'], 'N')
                    		if choice in ['a', 'A']:
                    		    acceptall = True
                    		if choice in ['y', 'Y']:
                        		page.put_async(canctxt, u'{{[[Progetto:Biografie|biobot]]}} aggiornamento voci')
                	if acceptall:
                    		try:
                    	    		page.put(canctxt, u'{{[[Progetto:Biografie|biobot]]}} aggiornamento voci')
                   		except wikipedia.EditConflict:
                   	 		wikipedia.output(u'Skipping %s because of edit conflict' % (page.title(),))
                  	  	except wikipedia.SpamfilterError, e:
                    			wikipedia.output(u'Cannot change %s because of blacklist entry %s' % (page.title(), e.url))
                    		except wikipedia.PageNotSaved, error:
                    			wikipedia.output(u'\03{lightred}ERROR 10 putting page: %s\03{default' % (error.args,))
                    		except wikipedia.LockedPage:
                    			wikipedia.output(u'Skipping %s (locked page)' % (page.title(),))
            	else:
                	wikipedia.output('\03{lightyellow}WARNING 30  Nessuna modifica da fare\03{default}')
			return
		return acceptall		

#-----------------

	def validadata(datatxt): # ritorna 2 valori: la data e un flag per indicare se la data è incerta
		#print datatxt
		if datatxt == u'': # la stringa è vuota esci
			return (u'', 0)
		else:
			datatxt = re.sub(u'<ref>.*?</ref>', u'', datatxt) # elimina eventuali note
			DataTemplate = re.compile(u'(\[){0,2}(?P<data>[0-9]{1,4}[ ]{0,1}(a\.C\.)*)((\]){2})*')
			a = re.search(DataTemplate, datatxt)
			if a == None: # la data non c'è esci
				return (u'',0)
			differenza = re.sub(DataTemplate, u'', datatxt).strip()
			if differenza == u'':
				return (a.group('data').strip(), 0) # caso 1: c'è solo la data pulita
			elif differenza == u'?' or differenza == u'c.' or differenza == u'C.' or differenza == u'circa' or differenza == u'Circa' or differenza == u'ca' or differenza == u'ca.':
				return (a.group('data').strip(), 1) # caso 2: c'è la data e un elemento che indica incertezza
			else:
				return (u'', 0) # caso 3: è scritta male o c'è scritto qualcos'altro
	
	def validagm(gmtxt):
		if gmtxt == u'':
			return u''
		else:
			gmtxt = re.sub(u'<ref>.*?</ref>', u'', gmtxt) # elimina eventuali note
			gmtxt = re.sub(u'[\°º]', u'', gmtxt)
			gmtxt = re.sub(u'\[\[', u'', gmtxt)
			gm2txt = re.sub(u'\]\]', u'', gmtxt)
			return gm2txt.lower()

	def toglicommenti(txt):
		txt = re.sub(re.compile(u'<[Rr]ef>.*?</[Rr]ef>'), u'', txt)
		txt = re.sub(re.compile(u'\[\[|\]\]'), u'', txt)
		return txt 		

	def data2ordine(data):
		if data == u'':
			return -9999 # quelli senza data li mettiamo in cima
		else:
			numdata = int(re.findall('[0-9]{0,4}', data)[0])
			if not re.compile('(a.\C\.)').search(data):
				return numdata
			else:
				return -numdata
	
	def reversedata2ordine(data):
		if data >= 0:
			return str(data)
		else:
			return str(-data) + u' a.C.'
	

	def stringamagica(stringa):
		blacklist = [u'Fratelli Zeno', u'Omicidio di Pierluigi Torregiani', u'Omicidio di Lino Sabbadin', u'Fratelli Montgolfier', u'Ale e Franz', u'Fratelli Grimm',
				u'James e Oliver Phelps', u'Fratelli Dardenne', u'Sorelle Mirabal', u'Jerry Leiber e Mike Stoller', u'Bonnie e Clyde', u'Jules e Gédéon Naudet',
				u'Arkadi e Boris Strugatski', u'Angela e Luciana Giussani', u'Sacco e Vanzetti', u'Ignazio e Antonino Salvo', u'Dylan e Cole Sprouse',
				u'Eric Harris e Dylan Klebold', u'Manetti Bros.', u'Paolo e Vittorio Taviani', u'Joel ed Ethan Coen', u'Auguste e Louis Lumière',
				u'Fratelli Wachowski', u'Esposito Bros.']
		titoloVoce = u''
		parteMorte = u''
		parteAttiv = u''

		if stringa[0] in blacklist:
			titoloVoce =  u'[[' + stringa[0] + u'|' + stringa[2].strip() + u' ' + stringa[3].strip() + u']]'
		else:
			titoloSenzaWlink = re.sub(u'\(.*?\)', u'', stringa[0]).strip()
			if titoloSenzaWlink == stringa[0]:
				titoloVoce =  u'[[' + stringa[0] + u']]'
			else:	
				titoloVoce =  u'[[' + stringa[0] + u'|' + titoloSenzaWlink + u']]'

		if stringa[8] == u'':
			parteMorte = u''
		else:
			parteMorte = u'(† [[' + stringa[8] + u']])'
					
		if stringa[10] != u'':
			if stringa[11] != u'':
				parteAttiv = u', ' + stringa[10] + u' e ' + stringa[11]
			else:
				parteAttiv = u', ' + stringa[10]
		
		if stringa[9] != u'': # la nazionalità 
			if stringa[10] == u'':
				parteAttiv =  u', ' + stringa[9] + u' '
			else:
				parteAttiv += u' ' + stringa[9] + u' '
		else:
			parteAttiv += u' '

		return titoloVoce + parteAttiv + parteMorte


	def stringamagicaMorti(stringa):
		blacklist = [u'Fratelli Zeno', u'Omicidio di Pierluigi Torregiani', u'Omicidio di Lino Sabbadin', u'Fratelli Montgolfier', u'Ale e Franz', u'Fratelli Grimm',
				u'James e Oliver Phelps', u'Fratelli Dardenne', u'Sorelle Mirabal', u'Jerry Leiber e Mike Stoller', u'Bonnie e Clyde', u'Jules e Gédéon Naudet',
				u'Arkadi e Boris Strugatski', u'Angela e Luciana Giussani', u'Sacco e Vanzetti', u'Ignazio e Antonino Salvo', u'Dylan e Cole Sprouse',
				u'Eric Harris e Dylan Klebold', u'Manetti Bros.', u'Paolo e Vittorio Taviani', u'Joel ed Ethan Coen', u'Auguste e Louis Lumière',
				u'Fratelli Wachowski', u'Esposito Bros.']
		titoloVoce = u''
		parteNascita = u''
		parteAttiv = u''
		
		if stringa[0] in blacklist:
			titoloVoce =  u'[[' + stringa[0] + u'|' + stringa[2].strip() + u' ' + stringa[3].strip() + u']]'
		else:
			titoloSenzaWlink = re.sub(u'\(.*?\)', u'', stringa[0]).strip()
			if titoloSenzaWlink == stringa[0]:
				titoloVoce =  u'[[' + stringa[0] + u']]'
			else:	
				titoloVoce =  u'[[' + stringa[0] + u'|' + titoloSenzaWlink + u']]'

		if stringa[6] == u'':
			parteNascita = u''
		else:
			parteNascita = u'(n. [[' + stringa[6] + u']])'
					
		if stringa[10] != u'':
			if stringa[11] != u'':
				parteAttiv = u', ' + stringa[10] + u' e ' + stringa[11]
			else:
				parteAttiv = u', ' + stringa[10]
		
		if stringa[9] != u'': # la nazionalità
			if stringa[10] == u'':
				parteAttiv =  u', ' + stringa[9] + u' '
			else:
				parteAttiv += u' ' + stringa[9] + u' '
		else:
			parteAttiv += u' '

		return titoloVoce + parteAttiv + parteNascita


	# inizio della funzione

	con = sqlite3.connect('/home/simo/pywikipedia/bio.sqlite') # si collega al database TODO gestione errore di apertura db
	c = con.cursor()
	con2 = sqlite3.connect(':memory:') # crea un db di lavoro in memoria
	d = con2.cursor()
	d.execute('''create table bio(titolo text, revisione integer, nome text, cognome text, ordinamento text, gmnascita text,
		annonascita text, gmmorte text, annomorte text, nazione text, attiv1 text, attiv2 text, attiv3 text, attivaltre text, ordine integer,
		ordinemorte integer, ordinegiorno integer, ordinegiornomorte integer, nascitaincerta integer, morteincerta integer)''')
	c.execute('select * from bio')
	for riga in c:
		datavalidataNascita = validadata(riga[6]) # validadata ritorna (data, flag) dove flag indica una data incerta
		datavalidataMorte = validadata(riga[8])
		gmvalidataNascita = validagm(riga[5])
		gmvalidataMorte = validagm(riga[7])
		if gmvalidataNascita in datedir:
			gmnascitaOrdinale = int(datedir[gmvalidataNascita])
		else:
			gmnascitaOrdinale = 0
		if gmvalidataMorte in datedir:
			gmmorteOrdinale = int(datedir[gmvalidataMorte])
		else:
			gmmorteOrdinale = 0
		t = (riga[0], riga[1], toglicommenti(riga[2]), toglicommenti(riga[3]), riga[4], gmvalidataNascita, datavalidataNascita[0], gmvalidataMorte,
		datavalidataMorte[0], riga[9], riga[10], riga[11], riga[12], riga[13], data2ordine(datavalidataNascita[0]), data2ordine(datavalidataMorte[0]),
		gmnascitaOrdinale, gmmorteOrdinale, datavalidataNascita[1], datavalidataMorte[1])
		d.execute('insert into bio values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)', t)
	
	con2.commit		


	# aggiorniamo le liste dei vivi per giorno
	noconfirm = False	
	for data in date:
		#break
		dataordinale = int(datedir[data])       
		if dataordinale in (1, 32, 61, 92, 122, 153, 183, 214, 245, 275, 306, 336):
			testoPagina = (u'<noinclude>{{ListaBio}}{{torna a|1º ' + data[2:] + u'}}</noinclude>\n')
			testoCat = (u'[[Categoria:Nati il 1º ' + data[2:] + u'| ]]')
		else:
			testoPagina = (u'<noinclude>{{ListaBio}}{{torna a|' + data + u'}}</noinclude>\n')
			if dataordinale in (8, 11, 39, 42, 68, 71, 99, 102, 129, 132, 160, 163, 190, 193, 221, 224, 252, 255, 282, 285, 313, 316, 343, 346):
				testoCat = (u"[[Categoria:Nati l'" + data + u'| ]]')
			else:
				testoCat = (u"[[Categoria:Nati il " + data + u'| ]]')	
		t = (data, )
		vecchioAnno = 0
		contatore = 9999
		vecchiaStringa = u''
		d.execute('select * from bio where gmnascita=? order by ordine', t)
		for riga in d:
			nuovoAnno = riga[6]
			nuovaStringa = stringamagica(riga)	
			if contatore == 9999:
				vecchiaStringa = nuovaStringa
				vecchioAnno = nuovoAnno
				contatore = 0
			elif vecchioAnno == u'': #xxx
				testoPagina += '*' + vecchiaStringa + u'\n' #xxx
			elif vecchioAnno == nuovoAnno:
				if contatore == 0:
					testoPagina += u'*[[' + vecchioAnno + u']]\n**' + vecchiaStringa + u'\n'
					contatore += 1
				else:
					testoPagina += '**' + vecchiaStringa + u'\n'
					contatore += 1
			elif contatore != 0:
				testoPagina += '**' + vecchiaStringa + u'\n'
				contatore = 0
			else:
				if vecchioAnno == u'':
					testoPagina += u'*' + vecchiaStringa + u'\n'
				else:
					testoPagina += u'*[[' + vecchioAnno + u']] - ' + vecchiaStringa + u'\n'
				contatore = 0
			vecchiaStringa = nuovaStringa
			vecchioAnno = nuovoAnno
		if contatore == 0:
			testoPagina += u'*[[' + vecchioAnno + u']] - ' + vecchiaStringa + u'\n'
		else:
			testoPagina += '**' + vecchiaStringa + u'\n'
		testoPagina += u'<noinclude>\n[[Categoria:Liste di nati per giorno| ' + datedir[data] + u']]\n' + testoCat + '\n</noinclude>'
		#print testoPagina
		if scriviwiki(testoPagina, data, int(datedir[data]), noconfirm):
			noconfirm = True

	# aggiorniamo le liste dei morti per giorno					
	#noconfirm = False	
	i = 0
	for data in date:
		#break
		dataordinale = int(datedir[data])       
		if dataordinale in (1, 32, 61, 92, 122, 153, 183, 214, 245, 275, 306, 336):
			testoPagina = (u'<noinclude>{{ListaBio}}{{torna a|1º ' + data[2:] + u'}}</noinclude>\n')
			testoCat = (u'[[Categoria:Morti il 1º ' + data[2:] + u'| ]]')		
		else:
			testoPagina = (u'<noinclude>{{ListaBio}}{{torna a|' + data + u'}}</noinclude>\n')
			if dataordinale in (8, 11, 39, 42, 68, 71, 99, 102, 129, 132, 160, 163, 190, 193, 221, 224, 252, 255, 282, 285, 313, 316, 343, 346):
				testoCat = (u"[[Categoria:Morti l'" + data + u'| ]]')
			else:
				testoCat = (u"[[Categoria:Morti il " + data + u'| ]]')	
		t = (data, )
		vecchioAnno = 0
		contatore = 9999
		vecchiaStringa = u''
		d.execute('select * from bio where gmmorte=? order by ordinemorte', t)
		for riga in d:
			nuovoAnno = riga[8]
			#i += 1
			#print (i)
			nuovaStringa = stringamagicaMorti(riga)	
			#print nuovaStringa		
			if contatore == 9999:
				vecchiaStringa = nuovaStringa
				vecchioAnno = nuovoAnno
				contatore = 0
			elif vecchioAnno == u'': #xxx
				testoPagina += '*' + vecchiaStringa + u'\n' #xxx
			elif vecchioAnno == nuovoAnno:
				if contatore == 0:
					testoPagina += u'*[[' + vecchioAnno + u']]\n**' + vecchiaStringa + u'\n'
					contatore += 1
				else:
					testoPagina += '**' + vecchiaStringa + u'\n'
					contatore += 1
			elif contatore != 0:
				testoPagina += '**' + vecchiaStringa + u'\n'
				contatore = 0
			else:
				if vecchioAnno == u'':
					testoPagina += u'*' + vecchiaStringa + u'\n'
				else:
					testoPagina += u'*[[' + vecchioAnno + u']] - ' + vecchiaStringa + u'\n'
				contatore = 0
			vecchiaStringa = nuovaStringa
			vecchioAnno = nuovoAnno
		if contatore == 0:
			testoPagina += u'*[[' + vecchioAnno + u']] - ' + vecchiaStringa + u'\n'
		else:
			testoPagina += '**' + vecchiaStringa + u'\n'
		testoPagina += u'<noinclude>\n[[Categoria:Liste di morti per giorno| ' + datedir[data] + u']]\n' + testoCat + '\n</noinclude>'
		#print testoPagina
		if scriviwikiMorti(testoPagina, data, int(datedir[data]), noconfirm):
			noconfirm = True
		#wikipedia.output(testoPagina) 

	# aggiorniamo le liste dei nati per anno
	#noconfirm = False	
	for anno in range(1000, 2011): # stiamo larghi :)
		#break
		testoPagina = u'<noinclude>{{ListaBio}}{{torna a|' + reversedata2ordine(anno) + u'}}</noinclude>\n'
		t = (anno, )
		vecchioGiorno = 0
		contatore = 9999
		vecchiaStringa = u''
		#d.execute('select * from bio where annonascita=? order by ordinegiorno', t)
		d.execute('select * from bio where ordine=? order by ordinegiorno', t)
		for riga in d:
			if riga[5] in datedir:
				dataordinale = int(datedir[riga[5]]) #questa parte serve per mettere il simbolo º davanti all'1
				if dataordinale in (1, 32, 61, 92, 122, 153, 183, 214, 245, 275, 306, 336):
					nuovoGiorno = u'1º ' + riga[5][2:]
				else:
					nuovoGiorno = riga[5]
			else:
				nuovoGiorno = u''
			nuovaStringa = stringamagica(riga)
			if riga[18] == 1:
				nuovaStringa += u' <small>(data incerta)</small>'	
			if contatore == 9999:
				contatore = 0
			elif vecchioGiorno == u'': #xxx
				testoPagina += '*' + vecchiaStringa + u'\n' #xxx
			elif vecchioGiorno == nuovoGiorno:
				if contatore == 0:
					testoPagina += u'*[[' + vecchioGiorno + u']]\n**' + vecchiaStringa + u'\n'
					contatore += 1
				else:
					testoPagina += '**' + vecchiaStringa + u'\n'
					contatore += 1
			elif contatore != 0:
				testoPagina += '**' + vecchiaStringa + u'\n'
				contatore = 0
			else:
				if vecchioGiorno == u'':
					testoPagina += u'*' + vecchiaStringa + u'\n'
				else:
					testoPagina += u'*[[' + vecchioGiorno + u']] - ' + vecchiaStringa + u'\n'
				contatore = 0
			vecchiaStringa = nuovaStringa
			vecchioGiorno = nuovoGiorno
		if contatore == 0:
			if vecchioGiorno == u'':
				testoPagina += '*' + vecchiaStringa + u'\n' #xxx
			else:
				testoPagina += u'*[[' + vecchioGiorno + u']] - ' + vecchiaStringa + u'\n'
		else:
			testoPagina += '**' + vecchiaStringa + u'\n'
		testoPagina += u"<noinclude>[[Categoria:Liste di nati nell'anno| " + str(anno + 2000) + u']]</noinclude>'
		#print testoPagina
		if contatore != 9999:
			if scriviwikiAnni(testoPagina, reversedata2ordine(anno), noconfirm):
				noconfirm = True
		else:
			#if rimuoviAnni(reversedata2ordine(anno), noconfirm):
			#	noconfirm = True
			if rimuovinatiAnni(reversedata2ordine(anno), noconfirm):
				noconfirm = True


		# aggiorniamo le liste dei morti per anno
	#noconfirm = False	
	for anno in range(1000, 2011):
		#break
		testoPagina = (u'<noinclude>{{ListaBio}}{{torna a|' + reversedata2ordine(anno) + u'}}</noinclude>\n')
		t = (anno, )
		vecchioGiorno = 0
		contatore = 9999
		vecchiaStringa = u''
		d.execute('select * from bio where ordinemorte=? order by ordinegiornomorte', t)
		for riga in d:
			if riga[7] in datedir:
				dataordinale = int(datedir[riga[7]]) #questa parte serve per mettere il simbolo º davanti all'1
				if dataordinale in (1, 32, 61, 92, 122, 153, 183, 214, 245, 275, 306, 336):
					nuovoGiorno = u'1º ' + riga[7][2:]
				else:
					nuovoGiorno = riga[7]
			else:
				nuovoGiorno = u''
			nuovaStringa = stringamagicaMorti(riga)
			#print riga
			if riga[19] == 1:
				nuovaStringa += u' <small>''(data incerta)''</small>'	
			if contatore == 9999:
				#vecchiaStringa = nuovaStringa
				#vecchioGiorno = nuovoGiorno
				contatore = 0
			elif vecchioGiorno == u'': #xxx
				testoPagina += '*' + vecchiaStringa + u'\n' #xxx
			elif vecchioGiorno == nuovoGiorno:
				if contatore == 0:
					testoPagina += u'*[[' + vecchioGiorno + u']]\n**' + vecchiaStringa + u'\n'
					contatore += 1
				else:
					testoPagina += '**' + vecchiaStringa + u'\n'
					contatore += 1
			elif contatore != 0:
				testoPagina += '**' + vecchiaStringa + u'\n'
				contatore = 0
			else:
				if vecchioGiorno == u'':
					testoPagina += u'*' + vecchiaStringa + u'\n'
				else:
					testoPagina += u'*[[' + vecchioGiorno + u']] - ' + vecchiaStringa + u'\n'
				contatore = 0
			vecchiaStringa = nuovaStringa
			vecchioGiorno = nuovoGiorno
		if contatore == 0:
			if vecchioGiorno == u'':
				testoPagina += '*' + vecchiaStringa + u'\n' #xxx
			else:
				testoPagina += u'*[[' + vecchioGiorno + u']] - ' + vecchiaStringa + u'\n'
		else:
			testoPagina += '**' + vecchiaStringa + u'\n'
		testoPagina += u"<noinclude>[[Categoria:Liste di morti nell'anno| " + str(anno + 2000) + u']]</noinclude>'
		#print testoPagina
		if contatore != 9999:
			if scriviwikiAnnimorti(testoPagina, reversedata2ordine(anno), noconfirm):
				noconfirm = True
		else:
			#if rimuoviAnnimorti(reversedata2ordine(anno), noconfirm):
			#	noconfirm = True
			if rimuovimortiAnni(reversedata2ordine(anno), noconfirm):
				noconfirm = True

	c.close	
	d.close
	return()
		


def main():

  for arg in wikipedia.handleArgs():
        if arg.startswith('-agg'): 
		scorriWiki()
	elif arg.startswith('-xml'):
            if len(arg) == 4:
                wikipedia.output('Inserire il nome del file (xml:nomefile)')
		return ()
            else:
                nomefile = arg[5:]
		scorriXml(nomefile)
        elif arg.startswith('-data'): liveandletdie()
  wikipedia.output(u'Procedura terminata')
 
 
if __name__ == "__main__":
    try:
        main()
    finally:
        wikipedia.stopme()