Utente:Aubrey/scripts python
Questo è un primo script da salvare nella stessa directory dove partono i tuoi bot, con il nome Ale.py (è una piccola raccolta di funzioni):
# -*- coding: utf-8 -*- import wikipedia import pickle from datetime import date #from buzhug import Base # from Alebuz_go import leggi_capitoli global autori, lista_autori, pagine_autore, offset offset=0 def azbl(pagina): ## indice=open("dati/indice_a.txt").read() ## pag=leggi_pagina("Pagina:Zibaldone di pensieri I.djvu/"+str(pagina)) voci=find_all(pag," ",".") vv=[] for i in voci: v=i[0].split(",") if len(v)==2: if v[0].isdigit() and v[1].isdigit(): #print v[0],v[1] vv.append(v) # in vv serie delle sole coppie pagina pensiero vi=[] vizb=[] for i in vv: vi.append(" "+i[0]+","+i[1]+".") vizb.append("[[Zibaldone/"+i[0]+"#"+i[1]+"|"+i[0]+",<small>"+i[1]+"</small>]].") for i in range(len(vi)): pag=pag.replace(vi[i]," "+vizb[i]) scrivi_pagina(pag,False,"Pagina:Zibaldone di pensieri I.djvu/"+str(pagina)) return "Fatto" questo_file="Ale.py" tavole_cronologiche=[u"Wikisource:Tavole cronologiche degli autori ",u"dell'Antichità",u"del Medioevo",u"del XI secolo",u"del XII secolo",u"del XIII secolo",u"del XIV secolo",u"del XV secolo",u"del XVI secolo",u"del XVII secolo",u"del XVIII secolo",u"del XIX secolo",u"del XX secolo",u"del XXI secolo"] template_autore1=u'''<div style="width:25%; float: left; border:3px dotted #B8CC99; margin-right: 10px; background-color: #E9F1EE; font-size: 0.6pc;"> <span style="font-size: 0.8pc;">\'\'\'Data box\'\'\'</span> * nome = <section begin="nome" />{{{Nome}}}<section end="nome" /> * cognome = <section begin="cognome" />{{{Cognome}}}<section end="cognome" /> * iniziale cognome = <section begin="iniziale cognome" />{{{Iniziale del cognome}}}<section end="iniziale cognome" /> * altro nome = <section begin="altro nome" />{{{Eventuale altro nome}}}<section end="altro nome" /> * pseudonimo = <section begin="pseudonimo" />{{{Eventuale pseudonimo}}}<section end="pseudonimo" /> * nome reale = <section begin="nome reale" />{{{Eventuale nome reale}}}<section end="nome reale" /> * giorno e mese nascita = <section begin="giorno e mese nascita" />{{{Giorno e mese di nascita}}}<section end="giorno e mese nascita" /> * anno nascita = <section begin="anno nascita" />{{{Anno di nascita}}}<section end="anno nascita" /> * giorno e mese morte = <section begin="giorno e mese morte" />{{{Giorno e mese di morte}}}<section end="giorno e mese morte" /> * anno morte = <section begin="anno morte" />{{{Anno di morte}}}<section end="anno morte" /> * secolo = <section begin="secolo " />{{{Secolo di attività}}}<section end="secolo " /> * secondo secolo = <section begin="secondo secolo" />{{{Eventuale secondo secolo di attività}}}<section end="secondo secolo" /> * professione e nazionalità = <section begin="professione e nazionalità" />{{{Professione e nazionalità}}}<section end="professione e nazionalità" /> * pagina wikipedia = <section begin="pagina wikipedia" />{{{Nome della pagina su Wikipedia}}}<section end="pagina wikipedia" /> * pagina wikiquote = <section begin="pagina wikiquote" />{{{Nome della pagina su Wikiquote}}}<section end="pagina wikiquote" /> * pagina wikinotizie = <section begin="pagina wikinotizie" />{{{Nome della pagina su Wikinotizie}}}<section end="pagina wikinotizie" /> * pagina commons = <section begin="pagina commons" />{{{Nome della pagina su Commons}}}<section end="pagina commons" /> * nome immagine = <section begin="nome immagine" />{{{Nome dell'immagine}}}<section end="nome immagine" /> * indice contenuti = <section begin="indice contenuti" />{{{Vuoi l'indice dei contenuti?}}}<section end="indice contenuti" /> * testi = <section begin="testi" />{{{Abbiamo testi scritti dall'autore?}}}<section end="testi" /> * traduzioni = <section begin="traduzioni" />{{{Abbiamo traduzioni scritte dall'autore?}}}<section end="traduzioni" /> * citazioni = <section begin="citazioni" />{{{L'autore è citato in altre opere pubblicate?}}}<section end="citazioni" /> </div>''' riscontro='''{{Utente:Alex_brollo/RiscontroAutore | autore= | link=[http://it.wikisource.org/w/index.php?title=Autore:NomeAutore/Riscontro&action=edit modifica dati] | date= | prof_naz= | wikipedia= | wikiquote= | commons= | foto= | anni= | SAL= | interwiki= | data_controllo= }}''' oggi=date.today().strftime("%d-%m-%y") h2u=wikipedia.html2unicode u2h=wikipedia.UnicodeToAsciiHtml def ocr(pagina,interattivo=False,delr=False): header_footer=u'<noinclude>{{PageQuality|1|}}<div class="pagetext">\n\n\n</noinclude>TESTO<noinclude>\n<references/></div></noinclude>' pagina="Pagina:Manzoni.djvu/"+str(pagina) p=leggi_pagina(pagina) if p=="" or "{{OCR}}" in p: return head='<noinclude>{{PageQuality|1|}}<div class="pagetext">\n\n\n</noinclude>' foot='<noinclude>\n<references/></div></noinclude>' if "<noinclude>" in p: p,head=el_st(p,"<noinclude>","</noinclude>") p,foot=el_st(p,"<noinclude>","</noinclude>") p=p.replace(u"« ",u"«") #elimina spazi dopo l'apertura.. p=p.replace(u" »",u"»") #e dopo la chiusura p=p.replace("''",u"§corsivo§") p=p.replace("'''",u"§grassetto§") p=p.replace(u"ŕ",u"'") p=p.replace("' ","'") p=p.replace(" 48"," 18") p=p.replace(u"ů",u"u") p=p.replace(u"ì",u"i") p=p.replace("e'","e' ") p=p.replace("o'","o' ") p=p.replace("0","o") p=p.replace(u"§corsivo§","''") p=p.replace(u"§grassetto§","'''") p=p.replace(u"·\n","-\n") p=p.replace(u"·"," ") p=p.replace(u"—","-") p=p.replace(" ;","; ") #elimina spazi prima di ; p=p.replace(" ,",", ") #idem prima di , p=p.replace(" "," ") p=p.splitlines(True) #trasforma pagina in lista di righe con \n finale if delr: p=p[1:] x=u"" for i in range(len(p)): p[i]=p[i].strip()+"\n" #elimina spazi in testa e in coda alle righe if p[i][-3:-2]==" ": #ricerca caratteri siolati a fine riga, preceduti #da uno spazio: prima passata if not p[i][-2:-1] in "iaeo": p[i]=p[i][:-3]+"\n" for i in range(len(p)): if p[i][-3:-2]==" ": #idem come sopra:seconda passata if not p[i][-2:-1] in "iaeo": p[i]=p[i][:-3]+"\n" if p[i][1:2]==" " and not p[i][0:1] in "Eeiao": #ricerca caratteri #isolati in testa alle righe p[i]=p[i][2:] p[i]=p[i].strip()+"\n" # ultimo strip if p[i][-2:]==".\n": p[i]=p[i]+"\n" if p[i][-2:]==":\n": p[i]=p[i]+"\n" if p[i][-2:]=="?\n": p[i]=p[i]+"\n" x=x+p[i] # accumulo delle righe x=x.replace("-\n","") #eliminazione acapi a metà parola x=correzione(x,interattivo) x=x.strip() x=head+x+foot scrivi_pagina(x,False,pagina) #print x return "Fatto" def estrai_txt(file_input): file_input=file_input+".txt" f=open(file_input) fi=unicode(f.read(),"cp1252") f.close() p=[] p.append(" ") pagenum=1 while True: tagi="["+str(pagenum)+"]" tagf="[/"+str(pagenum)+"]" if fi.find(tagi)>-1 and fi.find(tagf)>-1: fi,page=el_st(fi,tagi,tagf) p.append(page) pagenum=pagenum+1 print pagenum, else: break p=elimina_numero_righe(p) p=elimina_prima_riga(p) p=aggiungi_header_footer(p) r=" " while not r in "fF": r=raw_input("pagina: numero; f: fine.") if r.isdigit(): print p[eval(r)] return p def aggiungi_header_footer(lista): header='''<noinclude>{{PageQuality|1|Alebot}}<div class="pagetext"> </noinclude>''' footer='''<noinclude> <references/></div></noinclude>''' for i in range(len(lista)): lista[i]=header+lista[i]+footer return lista def elimina_prima_riga(lista): for i in range(len(lista)): acapo=lista[i].find("\n") lista[i]=lista[i][acapo:].strip() return lista def elimina_numero_righe(lista): for i in range(len(lista)): lista[i]=lista[i].replace("["+str(i)+"]","") lista[i]=lista[i].replace("[/"+str(i)+"]","") return lista # trasforma un testo in una lista di elementi def splitter(testo): caratteri=u"ABCDEFGHILMNOPQRSTUVZJKXYWabcdefghilmnopqrstuvzjkwyx_'ìèòàù&0123456789" #inizializzazioni parole=[] elem="" ft=len(testo) #caricamento primo carattere tc=(testo[0:1] in caratteri) #scorrimento e analisi for i in range(ft): elem=elem+testo[i:i+1] if not tc == (testo[i+1:i+2] in caratteri): #se il successivo carattere appartiene a altro tipo parole.append(elem) # aggiorna lista elem="" # svuota elemeno corrente tc=not tc # e cambia tipo # caricamento dell'ultima parola parole.append(elem) return parole def splitter1(testo): caratteri=u"ABCDEFGHILMNOPQRSTUVZJKXYWabcdefghilmnopqrstuvzjkwyx_'ìèòàù&" #inizializzazioni testo1="" elem="" ft=len(testo) #caricamento primo carattere tc=(testo[0:1] in caratteri) #scorrimento e analisi for i in range(ft): elem=elem+testo[i:i+1] if not tc == (testo[i+1:i+2] in caratteri): #se il successivo carattere appartiene a altro tipo testo1=testo1+elem+"|" # aggiorna lista elem="" # svuota elemeno corrente tc=not tc # e cambia tipo # caricamento dell'ultima parola testo1=testo1+elem return testo1 def correzione(t1,interattivo=False): t1=splitter(t1) diz=carica("diz") while True: for i in range(len(t1)): if t1[i] in diz: t1[i]=diz[t1[i]] if not interattivo: break print ricomponi(t1) err=unicode(raw_input("Parola errata o fine:"),"cp1252") if err=="fine": break corr=unicode(raw_input("Parola errata o fine:"),"cp1252") diz[err]=corr salva(diz,"diz") return ricomponi(t1) def ricomponi(lista): x="" for i in lista: x=x+i return x def aggiorna_atc(): atc=[] for i in range(1,len(tc)): x=produci_lista(leggi_pagina(tc[0]+tc[i]),"[[Autore:","|") atc=atc+x salva(atc,"autori_tabelle_cronologiche") return def output(testo=u"test ìèòàù"): print testo.encode("cp1252") return def line_input(prompt="Inserisci da tastiera: "): testo=unicode(raw_input(prompt),"cp1252") return testo ##wiki reading/writing def blocked(nome_pagina,code="it"): site = wikipedia.getSite(code) page = wikipedia.Page(site, nome_pagina) print page.canBeEdited() return def scrivi_pagina(testo="",aggiungi=True,nome_pagina="Utente:Alex brollo/Sandbox",commento="Edit by Alebot",code="it"): site = wikipedia.getSite(code) page = wikipedia.Page(site, nome_pagina) if aggiungi: contenuto = page.get() try: page.put(newtext=contenuto+u"\n\n"+testo,comment=commento) except wikipedia.LockedPage: return "Pagina bloccata" else: try: page.put(newtext=testo,comment=commento) except wikipedia.LockedPage: return "Pagina bloccata" wikipedia.stopme() return "Fatto" def leggi_pagina(nome_pagina=u"Utente:Alex brollo", code="it",res="testo"): site = wikipedia.getSite(code) page = wikipedia.Page(site, nome_pagina) if res=="testo": try: text = page.get() # Taking the text of the page except wikipedia.NoPage: # First except, prevent empty pages text = '' except wikipedia.IsRedirectPage: # second except, prevent redirect text = "#REDIRECT" # output(u'%s is a redirect!' % pagename) except wikipedia.Error: # third exception, take the problem and print output(u"Some error, skipping..") wikipedia.stopme() return text elif res=="permessi": try: permessi = page.getRestrictions() # Taking the text of the page except wikipedia.NoPage: # First except, prevent empty pages permessi = '' except wikipedia.IsRedirectPage: # second except, prevent redirect permessi = "#REDIRECT" # output(u'%s is a redirect!' % pagename) except wikipedia.Error: # third exception, take the problem and print output(u"Some error, skipping..") wikipedia.stopme() return permessi def leggi_pagina_html(nome_pagina=u"Utente:Alex brollo"): site = wikipedia.getSite() page = wikipedia.Page(site, nome_pagina) try: text = site.getUrl(nome_pagina) # Taking the text of the page except wikipedia.NoPage: # First except, prevent empty pages text = '' except wikipedia.IsRedirectPage: # second except, prevent redirect text = "#REDIRECT" # output(u'%s is a redirect!' % pagename) except wikipedia.Error: # third exception, take the problem and print output(u"Some error, skipping..") wikipedia.stopme() return text # Writes into it.wikisource a unicode string into a named page (full name), adding to previous content (aggiungi=True) # or replacing it (aggiungi=False) ##def scrivi_pagina(testo=u"Prova\n\n",aggiungi=True ,nome_pagina=u"Utente:Alebot/Sandbox"): ## site = wikipedia.getSite() ## page = wikipedia.Page(site, nome_pagina) ## if aggiungi: ## contenuto = page.get() ## page.put(contenuto+u"\n\n"+testo) ## else: ## page.put(testo) ## wikipedia.stopme() ## return "Fatto" # reads from it.wikisource an Autore: page and builds xml conversion of data def leggi_autore(autore_corrente=u"Alessandro Manzoni"): pagina_autore_corrente=leggi_pagina(u"Autore:"+autore_corrente) return pagina_autore_corrente def leggi_lista_autori(iniziali="ABCDEFGHIJKLMNOPQRSTUVWXYZ"): x=iniziali text=[] for i in range(len(x)): titolo=u"Wikisource:Elenco alfabetico degli autori "+x[i:i+1] t=leggi_pagina(titolo) text.append([titolo,t]) print u"letto "+titolo lista_autori=[] for i in range(len(text)): #print "parte produci lista" a1=produci_lista(text[i][1],"{{Template:","}}") lista_autori=lista_autori+a1 return lista_autori ##Pickle data loading/dumping # dumps a variable def salva(variabile,nome_file="dato",folder="dati/"): nome_file=folder+nome_file+".pcl" f=open(nome_file,"w") pickle.dump(variabile, f) f.close() return "Variabile salvata nel file "+nome_file def salva_pcl(variabile,nome_file="dato",folder="dati/"): nome_file=folder+nome_file+".pcl" f=open(nome_file,"w") pickle.dump(variabile, f) f.close() return "Variabile salvata nel file "+nome_file # loads a variable def carica(nome_file,folder="dati/"): nome_file=folder+nome_file+".pcl" f=open(nome_file) contenuto=pickle.load(f) f.close() return contenuto def carica_pcl(nome_file,folder="dati/"): nome_file=folder+nome_file+".pcl" f=open(nome_file) contenuto=pickle.load(f) f.close() return contenuto # translates a Author template into a xml structure # as: <autore>Alessandro Manzoni<dati><nome>Alessandro</nome>....</dati></autore> def parse_autore(pag_autore): l="" autore=find_stringa(pag_autore,u"Nome =",u"\n").strip()+" "+find_stringa(pag_autore,u"Cognome =",u"\n").strip() autore=autore.strip() l=l+tagger(u"nome",(find_stringa(pag_autore,u"Nome =",u"\n"))) #0 l=l+tagger(u"cognome",(find_stringa(pag_autore,u"Cognome =",u"\n"))) #1 l=l+tagger(u"iniziali",(find_stringa(pag_autore,u"Iniziale del cognome =",u"\n"))) #2 l=l+tagger(u"altronome",(find_stringa(pag_autore,u"Eventuale altro nome =",u"\n"))) #3 l=l+tagger(u"pseudonimo",(find_stringa(pag_autore,u"Eventuale pseudonimo =",u"\n"))) #4 l=l+tagger(u"reale",(find_stringa(pag_autore,u"Eventuale nome reale =",u"\n"))) #5 l=l+tagger(u"gm_nascita",(find_stringa(pag_autore,u"Giorno e mese di nascita =",u"\n")))#6 l=l+tagger(u"a_nascita",(find_stringa(pag_autore,u"Anno di nascita =",u"\n"))) #7 l=l+tagger(u"gm_morte",(find_stringa(pag_autore,u"Giorno e mese di morte =",u"\n"))) #8 l=l+tagger(u"a_morte",(find_stringa(pag_autore,u"Anno di morte =",u"\n"))) #9 l=l+tagger(u"secolo1",(find_stringa(pag_autore,u"Secolo di attività =",u"\n"))) #10 l=l+tagger(u"secolo2",(find_stringa(pag_autore,u"Eventuale secondo secolo di attività =",u"\n"))) #11 l=l+tagger(u"descrizione",(find_stringa(pag_autore,u"Professione e nazionalit\xe0 =",u"\n"))) #12 l=l+tagger(u"wikipedia",(find_stringa(pag_autore,u"Nome della pagina su Wikipedia =",u"\n"))) #13 l=l+tagger(u"wikiquote",(find_stringa(pag_autore,u"Nome della pagina su Wikiquote =",u"\n"))) #14 l=l+tagger(u"wikinotizie",(find_stringa(pag_autore,u"Nome della pagina su Wikinotizie =",u"\n"))) #15 l=l+tagger(u"commons",(find_stringa(pag_autore,u"Nome della pagina su Commons =",u"\n"))) #16 l=l+tagger(u"immagine",(find_stringa(pag_autore,u"Nome dell'immagine =",u"\n"))) #17 l=l+tagger(u"indice",(find_stringa(pag_autore,u"Vuoi l'indice dei contenuti? =",u"\n"))) #18 l=l+tagger(u"testi",(find_stringa(pag_autore,u"Abbiamo testi scritti dall'autore? =",u"\n"))) #19 l=l+tagger(u"traduzioni",(find_stringa(pag_autore,u"Abbiamo traduzioni scritte dall'autore? =",u"\n"))) #20 l=l+tagger(u"citazioni",(find_stringa(pag_autore,u"L'autore \xe8 citato in altre opere pubblicate? =",u"\n")))#21 l=tagger(u"dati",l) l=tagger(u"autore",autore+l)+u"\n" return l # adds tags to data (subroutine used by the previous procedure def tagger(tag, dato): dato_tagged=u"<"+tag+u">"+dato+u"</"+tag+u">" return dato_tagged # saves Ale.py code into Utente:Alebot/Scripts (t.i. here) def aggiorna_pagina_scripts(): f=open("Ale.py") scripts=u"<"+u"pre>"+unicode(f.read(),"cp1252")+u"<"+u"/pre>" f.close() pagina=leggi_pagina(u"Utente:Alebot/Scripts") intestazione=find_stringa(pagina,u'<section begin="s1" />',u'<section end="s1" />',1)+u"\n" firma=u"\n--~~~~" pagina=pagina[0]+u"--~~~~" pagina=intestazione+scripts+firma scrivi_pagina(pagina,False,u"Utente:Alebot/Scripts") return "Fatto" ## General string management routines for RegEx ignorants :-( # finds a substring beginning with idi and ending with idf; returns it # with (dc=1) or without (default dc=0) idi and idf; used for xml managing too def find_stringa(stringa,idi,idf,dc=0,side="left"): if side=="right": idip=stringa.rfind(idi) else: idip=stringa.find(idi) idfp=stringa.find(idf,idip+len(idi))+len(idf) if idip>-1 and idfp>0: if dc==0: vvalore=stringa[idip+len(idi):idfp-len(idf)] else: vvalore=stringa[idip:idfp] else: vvalore="" return vvalore # variant; as find_stringa, but searches into stringa from offset (default 0); # returns substring without and with delimiters, the absolute offset of the # second delimiter, the indices of the substring (null strings if not found) def find_next(stringa,idi,idf,offset=0): idip=stringa.find(idi,offset) idfp=stringa.find(idf,idip+len(idi))+len(idf) if idip>-1 and idfp>0: stringa_i=stringa[idip+len(idi):idfp-len(idf)] stringa_t=stringa[idip:idfp] ## if stampa: ## print stringa_t, offset=idfp-len(idf) else: stringa_i='' stringa_t='' return stringa_i,stringa_t,offset,idip,idfp # appoggiandosi a find_next, produce una lista di tutte le istanze della # sottostringa idi...idf, contenente per ciascun valore i dati: # stringa_i,stringa_t,offset,idip,idfp def find_all(stringa,idi,idf): lista=[] offset=0 while True: r=find_next(stringa,idi,idf,offset) if r[0]!="": lista.append(r) offset=r[2] else: return lista ## carica un'intera opera, pagina per pagina, inserendo <!--NomePagina--> ## immediatamente prima del testo; salva la stringa risultante in dati/InteraOpera.pcl # restituisce la stringa idi...ifd "a cavallo" di offset # senza (dc=0) o con (dc!=0) i delimitatori idi...idf def find_r(stringa,idi,idf,offset,dc=1): idip=stringa.rfind(idi,0,offset) idfp=stringa.find(idf,idip+len(idi))+len(idf) if idip>-1 and idfp>0: if dc==0: vvalore=stringa[idip+len(idi):idfp-len(idf)] else: vvalore=stringa[idip:idfp] else: vvalore="" return vvalore # replaces the first substring idi...idf into string with new; returns # a tuple with whole replaced string and substring that has been removed/replaced def el_st(stringa,idi,idf,new=""): idip=stringa.find(idi) idfp=stringa.find(idf,idip)+len(idf) if idip>-1 and idfp>0: vvalore=stringa[idip:idfp] valore=stringa.replace(vvalore,new,1) else: vvalore="" valore=stringa return valore, vvalore # returns a list of all substrings (beginning with idi and ending with idf) # of a string; ; used for xml data managing too def produci_lista(testo,idi,idf,dc=0): t=testo[:] lista=[] while not find_stringa(t,idi,idf)=="": el=find_stringa(t,idi,idf,1) t=t.replace(el,"") #print el if dc==0: el=find_stringa(el,idi,idf,0) #print el #print lista.append(el) return lista def produci_lista1(testo,idi,idf,dc=0): t=testo[:] lista=[] while not find_stringa(t,idi,idf)=="": el=find_stringa(t,idi,idf,1) t=t.replace(el,"",1) #print el if dc==0: el=find_stringa(el,idi,idf,0) #print el #print lista.append(el) return lista def messaggi(): casella=leggi_pagina(u"Discussioni_utente:Alebot") ric=produci_lista(casella,"==","(CET)",1) risp=0 for i in range(len(ric)): if not "<!-- letto -->" in ric[i]: risposta,dut=elabora_messaggio(ric[i]) casella=casella.replace(ric[i],ric[i].replace("==\n","==\n<!-- letto -->")) scrivi_pagina(casella, False,"Discussioni utente:Alebot") scrivi_pagina(risposta+u"--~~~~",True,dut) risp=risp+1 return "Risposta inviata a ",risp," utenti" def elabora_messaggio(m): risposta1=u"== Da Alebot ==\nCiao #ut, grazie del messaggio! " risposta=risposta1[:] ut,dut,azione,aut,aggiornamenti="","","","","" if u"[[Discussioni_utente:" in m: ut=find_stringa(m,u"[[Discussioni_utente:","|") dut=u"Discussioni_utente:"+ut elif u"[[User talk:" in m: ut=find_stringa(m,u"[[User talk:","|") dut=u"User talk:"+ut risposta=risposta.replace(u"#ut",ut) if "leggi " in m.lower() or "esamina " in m.lower() or "controlla " in m.lower() or "read " in m.lower(): azione="leggi" elif "aggiorna " in m.lower(): azione="aggiorna" else: azione="nessuna" if azione in "leggi": iaut=find_stringa(m,u"[[Autore:",u"]]",1) paut=find_stringa(iaut,u"[[",u"]]",0) aut=find_stringa(iaut,u"[[Autore:",u"]]",0) ppaut=leggi_autore(aut) errore_link=False if ppaut=="": risposta=risposta+u"Purtroppo non trovo una pagina corrispondende al link autore "+iaut+u". Controlla, per favore! :-(." errore_link=True else: aggiornamenti=u"la pagina "+iaut+u"che la pagina è stata aggiornata recentemente." if ppaut == pagine_autore[aut]: aggiornamenti=u"che non vedo nessun aggiornamento recente della pagina: è identica a quella che conosco. " aggiornamenti=aggiornamenti+u"\n\nLa struttura xml dei dati contenuti è la seguente:\n\n"+parse_autore(ppaut)+u"\n" if aut in autori_tabelle_cronologiche: aggiornamenti=aggiornamenti+u"Ho trovato "+aut+" regolarmente riportato nella mia copia delle tabelle cronologiche." else: aggiornamenti=aggiornamenti+u"Non ho trovato "+aut+" nella mia copia delle tabelle cronologiche." if azione=="nessuna": risposta=risposta+u"Non ho trovato, nel tuo messaggio, una parola chiave che mi chieda un'azione." if azione=="aggiorna": risposta=risposta+u"Nel tuo messaggio ho trovato la parola chiave collegata all'azione ''aggiorna'' ma non sono ancora addestrato a eseguirla. " if azione=="leggi": if errore_link==False: risposta=risposta+u"Nel tuo messaggio ho trovato la parola chiave ''leggi'' " if aut>"": risposta=risposta+u"e il link a "+aut+u"; ho letto la pagina. Al momento posso dirti "+aggiornamenti else: risposta=risposta+u"ma non ho trovato un link valido a una pagina Autore. :-(" return risposta,dut ####################### ROUTINE DA VERIFICARE ###################### # reads from it.wikisource the pages with alphabetical lists of authors and # gets the authors list; saves the list into a txt file (one name for row) def leggi_elenco_autori(iniziali="ABCDEFGHIJKLMNOPQRSTUVWXYZ"): x=iniziali text=[] for i in range(len(x)): titolo="Wikisource:Elenco alfabetico degli autori "+x[i:i+1] t=leggi_pagina(titolo) text.append([titolo,t]) print "letto "+titolo # stopme() lista_autori=[] for i in range(len(text)): #print "parte produci lista" a1=produci_lista(text[i][1],"{{Template:","}}") lista_autori=lista_autori+a1 lista_autori_txt="" for i in range(len(lista_autori)): lista_autori_txt=lista_autori_txt+lista_autori[i]+"\n" f=open("lista_autori.txt","w") f.write(lista_autori_txt) f.close() return "fatto" def stampr(testo="riscontro"): print riscontro return def infotesto(ini=1,fin=1): testo='{{Discussioni indice:Il cavallarizzo}}\n\nNote:\n\n<section begin="note" /><section end="note" />' for i in range(ini,fin): pagina="Discussioni pagina:Il cavallarizzo.djvu/"+str(i) p=leggi_pagina(pagina) if p=="": scrivi_pagina(testo,False,pagina) print "pagina discussione "+ str(i)+ "vuota:aggiunto infotesto" elif not "{{Discussioni indice:Il cavallarizzo}}" in p: scrivi_pagina(testo+"\n\n"+p,False, pagina) print "pagina discussione "+ str(i)+ "aggiunto infotesto" elif "{{Discussioni indice:Il cavallarizzo}}" in p: print "pagina discussione "+ str(i)+ "con infotesto" def xml2csv(s): campi=['autore','dati','nome','cognome','iniziali','altronome', 'pseudonimo','reale','gm_nascita','a_nascita','gm_morte', 'a_morte','secolo1','secolo2','descrizione','wikipedia', 'wikiquote','wikinotizie','commons','immagine','indice', 'testi','traduzioni','citazioni'] s=s.replace("<dati>","\t") for i in range(len(campi)): s=r(s,campi[i]) return s def r(fi,x,sep="\t"): x1="<"+x+">" x2="</"+x+">" fi=fi.replace(x1,"") fi=fi.replace(x2,"\t") return fi # elabora databox + xml def databox_xml(iniziali="Z"): leggi_elenco_autori(iniziali) leggi_pagine(lista="lista_autori.txt",aggiorna=False) return "Fatta revisione databox e xml degli autori con iniziali "+iniziali def nuovo_riscontro(autore): r=riscontro[:] date="" if cerca(autore,"a_nascita").isdigit() and cerca(autore,"a_nascita").isdigit(): date=" x" prof_naz="" if len(cerca(autore,"a_nascita"))>0: prof_naz=" x" wikipedia="" if len(cerca(autore,"wikipedia"))>0: wikipedia=" x" wikiquote="" if len(cerca(autore,"wikiquote"))>0: wikiquote=" x" commons="" if len(cerca(autore,"commons"))>0: commons=" x" foto="" if len(cerca(autore,"immagine"))>0: foto=" x" r=r.replace("| autore=","| autore="+autore) r=r.replace("| date=","| date="+date) r=r.replace("| prof_naz=","| prof_naz="+prof_naz) r=r.replace("| wikipedia=","| wikipedia="+wikipedia) r=r.replace("| wikiquote=","| wikiquote="+wikiquote) r=r.replace("| commons=","| commons="+commons) r=r.replace("| foto=","| foto="+foto) r=r.replace("NomeAutore",autore.replace(" ","_")) r=r.replace("| data_controllo=", "| data_controllo= "+oggi+" bot") return r ##procedure list def cerca(autore,dato=""): dati_autore=find_stringa(autori,"<autore>"+autore,"</autore>",1) if not dato == "": tag1,tag2="<"+dato+">","</"+dato+">" dato_autore=find_stringa(dati_autore,tag1,tag2) else: dato_autore=dati_autore return dato_autore def nuovi_riscontri(numero=5): an=confronta_autori_tabella() t_an=[] for i in range(len(an)): print an[i] if cerca(an[i])>"": #print nuovo_riscontro(an[i]) t_an.append([an[i],nuovo_riscontro(an[i])]) print return t_an def confronta_autori_tabella(): #leggi_elenco_autori() f=open("lista_autori.txt") elenco_autori=f.read().split("\n") f.close() tabella=leggi_pagina(u"Progetto:Qualità/Tabella degli autori").replace("_"," ") s=produci_lista(tabella,"{{/","}}") segmenti=[] for i in range(len(s)): if "Iniziale" in s[i]: segmenti.append(s[i]) tabella="" for i in segmenti: tabella=tabella+leggi_pagina(u"Progetto:Qualità/Tabella degli autori"+"/"+i).replace("_"," ") elenco_autori_tabella=produci_lista(tabella,"Autore:","/Riscontro") ## print "Elenco autori presenti in tabella ma non in lista autori" ## for i in range(len(elenco_autori_tabella)): ## if not elenco_autori_tabella[i] in elenco_autori: ## print elenco_autori_tabella[i] autori_nuovi=[] for i in range(len(elenco_autori)): if not elenco_autori[i] in elenco_autori_tabella: autori_nuovi.append(elenco_autori[i]) return autori_nuovi # reads from text file the list of authors' names, splits it into a python list # and reads the authors' pages, getting the data template; saves all templates content # as text into a txt file def leggi_pagine(lista="lista_autori.txt",aggiorna=False): print "Parametro Aggiorna impostato su False; i dati xml non saranno aggiornati su wikisource" f=open(lista) lista_autori=f.read().split("\n") f.close() fo=open("aut_xml.txt","w") for i in range(len(lista_autori)): if len(lista_autori[i])>0: autore=leggi_pagina(t2u("Autore:"+lista_autori[i])) autore=find_stringa(autore,"{{Autore","}}", 1) template=autore autore_xml=parse_autore(autore) if aggiorna: databox(lista_autori[i],template,"\n\n<!-- DATI XML AUTORE\n"+autore_xml+"\n -->") print "Letto "+lista_autori[i]; fo.write(autore_xml) print ".. e scritto" fo.close() return "Fatto!" # Writes a databox into Template:Cognome Nome/Dati def databox(autore,template_autore,xml): template=template_autore[:] template=template.replace("{{Autore","{{subst:Autore1")+xml nome_pagina=t2u("Template:"+autore+"/Dati") #print template scrivi_pagina(template,False,nome_pagina) return # Authors' data managing # Reads txt file with Authors' templates, calls "parser" and writes the result into a txt file def parse_lista_autori(lista): dati="" pagine_autori=carica("autori_pagina.pcl") for i in range(len(lista)): elemento=parse_autore(pagine_autori[lista[i]]) dati=dati+elemento f=open("dati_xml_autori.txt","w") f.write(dati) f.close() return dati # test unused routine: builds a table from an old list-based data set def tabella_autori(iniziale="A"): dati=carica("voc_dati_autori_new.pcl") tabella="{|\n" tabella=tabella+"|'''Cognome e nome'''||'''Data nascita e morte'''||'''Descrizione'''||'''Testi disponibili'''\n" l_a=dati.keys() l=[] for i in range(len(l_a)): if dati[l_a[i]][2]==iniziale: l.append([dati[l_a[i]][1], l_a[i]]) l.sort() for i in range(len(l)): l[i]=l[i][1] el1="[[Autore:"+l[i]+"|"+dati[l[i]][1]+", "+dati[l[i]][0]+"]]" el1=el1.replace("|, ","|") el2=dati[l[i]][6]+" "+dati[l[i]][7]+" - "+dati[l[i]][8]+" "+dati[l[i]][9] el3=dati[l[i]][12] el4=dati[l[i]][19] riga="|-\n|"+el1+"||"+el2+"||"+el3+"||"+el4+"\n" tabella=tabella+riga tabella=tabella+"|}\n" return tabella # test unused routine: builds a dictionary of entries into Autore template def var_autore(): voc_var={'citazioni': 21, 'professione e nazionalit\xc3\xa0': 12, 'testi': 19, 'indice contenuti': 18, 'anno nascita': 7, 'secolo': 10, 'nome': 0, 'secondo secolo': 11, 'nome immagine': 17, 'giorno e mese nascita': 6, 'altro nome': 3, 'nome reale': 5, 'pagina commons': 16, 'pagina wikipedia': 13, 'iniziale cognome': 2, 'pseudonimo': 4, 'pagina wikinotizie': 15, 'traduzioni': 20, 'anno morte': 9, 'cognome': 1, 'giorno e mese morte': 8, 'pagina wikiquote': 14} return voc_var # unused routine for Page: namespace. # It reads Pagina: pages from page ini to page fin into a string # legge da it.wikisource le pagine Pagina dalla pagina ini alla pagina fin # e le carica in una lista di liste [numero pagina,testo pagina] def leggi_indice(name,ini,fin): text=[] for i in range(ini,fin): t=u2t(leggi_pagina("Pagina:"+name+".djvu/"+str(i))) text.append([i,t]) stopme() return text def leggi_pagina_indice(pagina=u"Indice:Poesie inedite di Silvio Pellico"): x=leggi_pagina(pagina) l=produci_lista(x,u"[[Pagina",u"]]",1) for i in range(len(l)): l[i]=find_stringa(l[i],u"Pagina:",u".jpg",1) return l ##unicode translations: #cp1252->utf-8 def c2u(testo): testo=unicode(testo,"cp1252") testo=testo.encode("utf-8") return testo def u2c(testo): testo=unicode(testo,"utf-8") testo=testo.encode("cp1252") return testo #utf-8->unicode def t2u(stringa): return unicode(stringa,"utf-8") # unicode->utf-8 def u2t(stringa): return stringa.encode("utf-8")
La routine che converte le intestazioni devo sistemarla un po' prima di passartela. Nel frattempo, monta Ale.py.