Utente:YuBot/Script: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Riga 5:
# -*- coding: utf-8 -*-
import os, time, wikipedia, sys, re, catlib, pagegenerators, codecs, glob
import config, wikipedia, catlib, pagegenerators
#################################################
# #
# opereteatrali.py - ver. 2.05 #
# #
#################################################
Riga 17 ⟶ 18:
presenti su it.wiki, restituendo un elenco di voci
"""
botname = config.usernames['wikipedia']['it']
categoriaprincipale = 'on'
pagina_log = wikipedia.Page('it', 'Utente:%s/Log' % botname)
aggiornacategorie = 'on'
wikilinkautore= 'on'
controllalista= 'on'
ts=0
numerogiorni=8
#secondi in un giorno * numero gg
secondiaggiornamento=86400*numerogiorni
 
numerofileobsoleti=0
pagina_input = wikipedia.Page('it', 'Progetto:Teatro/Opere teatrali')
pagina_output = wikipedia.Page('it', 'Progetto:Teatro/Opere teatrali')
id_elenco= pagina_input.latestRevision()
 
def controllaid(page):
folder = ('opereteatrali')
id_voce = page.latestRevision()
date_file_list = []
if id_voce > id_elenco:
 
print id_voce, id_elenco
for file in os.listdir(folder):
nomepagina=page.title()
 
wikipedia.output(u'\nLa pagina %s è stata modificata' % nomepagina)
try:
filetime contenuto= ospage.statget(folder+'\\'+file).st_mtime
scrivifile(nomepagina, contenuto)
date_file_tuple = filetime, file
date_file_list.append(date_file_tuple)
 
except:
continue
 
date_file_list.sort()
#cancello i file più vecchi
count=0
for filetime, file in date_file_list:
count = count + 1
if count > numerofileobsoleti:
break
print 'cancello il file obsoleto: '+file
 
nomefile='opereteatrali/'+file
 
try:
os.remove(nomefile)
except IOError, (errno, strerror):
print "I/O error(%s): %s" % (errno, strerror)
contenuto='errore'
except ValueError:
print "Could not convert data to an integer."
contenuto='errore'
except:
print "Unexpected error:", sys.exc_info()[0]
contenuto='errore'
raise
 
 
def categorie():
 
catfile='opereteatrali/!categorie.txt'
listacategorie= []
Riga 78 ⟶ 39:
cat = catlib.Category(wikipedia.getSite(), 'Categoria:%s' % categoryname)
gencat1 = pagegenerators.SubCategoriesPageGenerator(cat, recurse=False)
 
for subcat in gencat1:
print subcat
Riga 84 ⟶ 44:
continue
else:
listacategorie.append(subcat.title())
categoryname = u'Opere teatrali per nazionalità'
cat = catlib.Category(wikipedia.getSite(), 'Categoria:%s' % categoryname)
gencat2 = pagegenerators.SubCategoriesPageGenerator(cat, recurse=False)
 
for subcat in gencat2:
print subcat
if subcat.title() in listacategorie:
continue
else:
listacategorie.append(subcat.title())
categoryname = u'Opere teatrali per lingua'
cat = catlib.Category(wikipedia.getSite(), 'Categoria:%s' % categoryname)
gencat3 = pagegenerators.SubCategoriesPageGenerator(cat, recurse=False)
 
for subcat in gencat3:
print subcat
if subcat.title() in listacategorie:
continue
else:
listacategorie.append(subcat.title())
return listacategorie
 
def gestorelista():
 
dizionario={}
lista=[]
listacategorie=categorie()
template=wikipedia.Page('it', 'Template:Dramma')
 
gen3 = pagegenerators.ReferringPageGenerator(template)
 
for page in gen3:
if page.namespace() == 0:
titolo=page.title()
if titolo not in lista:
if re.search(r'Elenco', titolo):
continue
else:
lista.append(titolo)
wikipedia.output(titolo)
controllaid(page)
for categoria in listacategorie:
printwikipedia.output( '***************** %s'+ % categoria)
cat = catlib.Category(wikipedia.getSite(), '%s' % categoria)
gen1 = pagegenerators.CategorizedPageGenerator(cat)
for page in gen1:
if page.namespace() == 0:
titolo=page.title()
 
if titolo not in lista:
if re.search(r'Elenco', titolo):
Riga 132 ⟶ 93:
else:
lista.append(titolo)
print wikipedia.output(titolo)
controllaid(page)
 
categoryname = u'Opere teatrali'
cat = catlib.Category(wikipedia.getSite(), 'Categoria:%s' % categoryname)
 
gen2 = pagegenerators.CategorizedPageGenerator(cat)
for page in gen2:
if page.namespace() == 0:
titolo=page.title()
 
if titolo not in lista:
if re.search(r'Elenco', titolo):
Riga 149 ⟶ 106:
else:
lista.append(titolo)
print wikipedia.output(titolo)
controllaid(page)
 
template=wikipedia.Page('it', 'Template:Dramma')
gen3 = pagegenerators.ReferringPageGenerator(template)
 
for page in gen3:
if page.namespace() == 0:
titolo=page.title()
 
if titolo not in lista:
if re.search(r'Elenco', titolo):
continue
else:
lista.append(titolo)
print titolo
for titolo in lista:
titoloord=titoloLink(titolo)
dizionario[titolo]=titoloord
items=dizionario.items()
backitems=[ [v[1],v[0]] for v in items]
backitems.sort()
lista=[ backitems[i][1] for i in range(0,len(backitems))]
 
return lista
 
def scrivifile(nomepagina, testo):
 
nomepagina = re.sub('\/', '_', nomepagina).strip()
nomepagina = re.sub(' ', '_', nomepagina).strip()
nomepagina = re.sub('"', '_', nomepagina).strip()
nomepagina = re.sub('\?', '_', nomepagina).strip()
 
nomefile='opereteatrali/'+nomepagina+'.txt'
wikipedia.output(u'scrivo il file ' + nomefile)
 
print 'scrivo il file ' + nomefile
contenuto=testo.encode( "utf-8" )
# Scrive un file.
Riga 195 ⟶ 129:
out_file.write(contenuto)
out_file.close()
 
def leggifile(nomepagina):
 
nomepagina = re.sub('\/', '_', nomepagina).strip()
nomepagina = re.sub(' ', '_', nomepagina).strip()
nomepagina = re.sub('"', '_', nomepagina).strip()
nomepagina = re.sub('\?', '_', nomepagina).strip()
 
 
nomefile='opereteatrali/'+nomepagina+'.txt'
 
try:
wikipedia.output( 'leggo il file %s' % nomefile )
 
print 'leggo il file ' + nomefile
# Legge un file.
in_file = open(nomefile,"r")
#print os.stat(nomefile)
contenuto = in_file.read()
in_file.close()
except IOError, (errno, strerror):
print "I/O error(%s): %s" % (errno, strerror)
Riga 231 ⟶ 155:
contenuto='errore'
raise
 
return contenuto
 
def cancellafile(nomepagina):
 
nomepagina = re.sub('\/', '_', nomepagina).strip()
nomepagina = re.sub(' ', '_', nomepagina).strip()
nomepagina = re.sub('"', '_', nomepagina).strip()
nomepagina = re.sub('\?', '_', nomepagina).strip()
 
 
nomefile='opereteatrali/'+nomepagina+'.txt'
wikipedia.output('provo a cancellare il file %s' % nomefile)
print 'provo a cancellare il file ' + nomefile
 
try:
os.remove(nomefile)
except IOError, (errno, strerror):
print "I/O error(%s): %s" % (errno, strerror)
Riga 371 ⟶ 287:
if lingua == '':
ops= 'Oooops, stringa nulla'
printwikipedia.output( ops )
else:
 
else:
if re.search(r'[Ii]nglese', lingua):
lingua='{{en}}'
Riga 399 ⟶ 313:
lingua='{{ru}}'
elif re.search(r'[Ss]vedese', lingua):
lingua='{{sv}}'
#Dialetti
elif re.search(r'[Nn]apoletan', lingua):
Riga 410 ⟶ 323:
elif re.search(r'[Vv]enet', lingua):
lingua='{{vec}}'
 
 
#Se è italiano, va omesso
elif re.search(r'[Ii]talian', lingua):
lingua=''
 
#Se è una lingua diversa dalle precedenti, avviso
else:
Riga 423 ⟶ 332:
lingua=lingua
else:
lingua='[['+lingua+']]'
return lingua
def autoreLink(nomeautore, cognomeautore):
 
autore=''
 
nomeautore = re.sub('\[', '', nomeautore).strip()
nomeautore = re.sub('\]', '', nomeautore).strip()
 
cognomeautore = re.sub('\[', '', cognomeautore).strip()
cognomeautore = re.sub('\]', '', cognomeautore).strip()
if nomeautore and cognomeautore:
autore= nomeautore+' '+cognomeautore
Riga 444 ⟶ 348:
autore= cognomeautore
else:
autore=''
if wikilinkautore == 'on' and autore:
linkautore=leggifile(autore)
Riga 461 ⟶ 364:
else:
linkautore = autore
 
scrivifile(autore, linkautore)
linkautore=leggifile(autore)
linkautore=linkautore.decode("utf8")
autore = linkautore
if autore == 'Anonimato':
autore = 'Anonimato|Anonimo'
autore='[['+autore+']]'
nomeautore=''
cognomeautore=''
 
if autore == '[[]]':
autore=''
Riga 480 ⟶ 379:
def titoloLink(titoloorig):
titoloorig = re.sub('\n', '', titoloorig).strip()
titoloorig = re.sub('<[Bb][Rr]/>', '', titoloorig).strip()
Riga 486 ⟶ 384:
"L'", "'O ", "'A ", "Los ", "Lu ", "U ", "The ", "El ",
"Un ", "Uno ", "Una ", "Un'", "Uno dei ", "Una delle ", "Uno degli ", "..."]
titolo=titoloorig
 
titolo=titoloorig
for articolo in articoli:
if titoloorig.startswith(articolo):
Riga 500 ⟶ 396:
 
def stringaDramma(parametri, nomepagina):
 
pretesto=u'* '
titolodef=''
trattino=u' - '
barra=''
link=''
diz = {'Titoloitaliano':'',
'Titolooriginale':'',
Riga 553 ⟶ 445:
'linguaoriginale':'',
'epocacomposizione':''
}
 
 
 
rx1 = re.compile(r" ?= ?")
 
for p in parametri:
p=p.decode("utf8")
 
pl = re.split(rx1, p, 1)
if len(pl) == 2:
nomep=pl[0]
lunp=len(nomep)
while nomep.startswith(' '):
nomep=nomep[1:]
time.sleep(ts)
while nomep.endswith(' '):
nomep=nomep[lunp:]
lunp=lunp-1
time.sleep(ts)
for k in diz.keys():
kup=k.upper()
Riga 593 ⟶ 473:
lunp=lunp-1
if len(contp) < 2:
continue
else:
time.sleep(ts)
 
##scrivo entry nel dizionario##
diz[k] = contp
 
 
titolo = diz['Titoloitaliano']
if titolo == '':
titolo = diz['titoloitaliano']
titolo = re.sub('\n', '', titolo).strip()
titolo = re.sub('<[Bb][Rr]/>', ' ', titolo).strip()
Riga 619 ⟶ 491:
titoloorig = re.sub('<[Bb][Rr]/>', ' ', titoloorig).strip()
titoloorig = re.sub('<[Bb][Rr]>', ' ', titoloorig).strip()
titoloorig = re.sub('<[Bb][Rr] />', ' ', titoloorig).strip()
if titolo:
if titolo == nomepagina:
Riga 631 ⟶ 502:
barra=''
link=''
 
titolodef= u"[["+nomepagina+barra+link+"]]"
 
lingualink = linguaLink(diz['Linguaoriginale'])
if lingualink == '':
Riga 648 ⟶ 517:
else:
titoloorig=''
 
#AUTORE
aut1=''
Riga 659 ⟶ 527:
else:
stringaautore=''
 
 
if stringaautore=='':
stringaautore = ' - sceneggiatura di '+diz['nomesceneggiatore']
Riga 671 ⟶ 536:
if stringaautore == ' - soggetto di ':
stringaautore = ''
 
 
#EVENTUALI ALTRI AUTORI
 
autore2 = autoreLink(diz['Nome2'], diz['Cognome2'])
if autore2:
Riga 680 ⟶ 542:
else:
aut2=''
 
autore3 = autoreLink(diz['Nome3'], diz['Cognome3'])
if autore3:
Riga 686 ⟶ 547:
else:
aut3=''
 
musica = diz['musica']
libretto = diz['libretto']
Riga 696 ⟶ 556:
if len(soggetto) > 4:
soggetto = trattino+'Soggetto: '+soggetto
autorem=musica+libretto+soggetto
# EPOCA
epoca = diz['Epocacomposizione']
Riga 704 ⟶ 563:
pubblicata = diz['Primapubblicazione']
teatro = diz['Teatro']
 
if epoca:
epoca = re.sub(r'<.*>', '', epoca).strip()
Riga 712 ⟶ 570:
epoca=trattino+epoca2
else:
epoca=''
if prima:
prima = re.sub(r'<.*>', '', prima).strip()
Riga 719 ⟶ 576:
if teatro:
teatro = re.sub(r'<.*>', '', teatro).strip()
prima=prima+', '+teatro+'.'
if pubblicata:
pubblicata = re.sub(r'<.*>', '', pubblicata).strip()
pubblicata=trattino+'Pubblicata: '+pubblicata
 
 
#tipo di dramma
dr=diz['Dramma']
Riga 735 ⟶ 587:
else:
dram=''
 
stringa = pretesto+titolodef+titoloorig+dram+stringaautore+aut2+aut3+autorem+epoca+prima+pubblicata
stringa = re.sub('\n', ' ', stringa).strip()
stringa = re.sub(r'<[Bb][Rr] ?/?>', '', stringa).strip()
return stringa
 
def intestazione():
 
def intestazione():
riga1=u'{| style="font-size:100%;margin:0 auto; background: #EFEFEF" align=center width=100% id=toc\n'
riga2=u'|Questa pagina contiene informazioni ricavate automaticamente dalle voci di opere teatrali con l\'ausilio del \'\'\'[[Template:Dramma]]\'\'\' e di un [[Utente:YuBot|bot]]. L\'aggiornamento è periodico e automatico.\n'
Riga 751 ⟶ 599:
riga5=u'|-\n|\'\'\'N.B.:\'\'\' \'\'Non si garantisce l\'accuratezza delle info riguardanti voci con altri template sinottici: alcune fra tali voci sono segnalate qui solo a scopo di verifica. Non sono incluse in questa lista le voci di opere teatrali [[:Categoria:Da verificare per enciclopedicità - teatro|da verificare per enciclopedicità]]\'\'.</small>'
testata=riga1+riga2+riga3+riga4+'\n|}'
 
return testata
 
def main():
testata=intestazione()
 
 
 
 
testata=intestazione()
indiceinizio=u'\n__NOTOC__\n{| border="1" cellpadding="3" cellspacing="0" style="clear:center; float:center; margin:auto; margin-top:.5em; margin-bottom:.5em; background:#FAFAFA; border:1px solid #CCC; border-collapse:collapse; text-align:center; font-family: Helvetica, Frutiger 45 Light, Arial"\n|\'\'\'{{MediaWiki:Toc}}\'\'\' <br />'
indicelettere=''
indicefine=u'\n|}\n'
newtext=''
sezione=''
Riga 775 ⟶ 615:
epoca=''
voci=[]
voci = gestorelista()
count=0
for nomepagina in voci:
 
if nomepagina:
 
wikipedia.output('\n>>> %s <<<' % nomepagina)
 
contenuto=leggifile(nomepagina)
if contenuto == '' or contenuto == 'errore':
pagina=wikipedia.Page('it', nomepagina)
try:
contenuto=pagina.get()
scrivifile(nomepagina, contenuto)
testo=leggifile(nomepagina)
except:
 
voci.remove(nomepagina)
 
time.sleep(4)
continue
 
else:
 
testo=contenuto
 
else:
continue
titor=False
titoloorig=''
Riga 824 ⟶ 645:
warning=''
stringa=''
 
 
listaparametri=templatesWithParams(nomepagina, testo)
 
stringa = '* \'\'\'[['+nomepagina+']]\'\'\''
warning = u' <small>\'\'\'N.B.:\'\'\' Non è presente un template sinottico, oppure vi sono errori di compilazione.</small>'
for parametri in listaparametri:
if re.search(r'[Dd]ramma', parametri[0]):
avviso='trovato tl. dramma'
printwikipedia.output( avviso )
 
stringa=stringaDramma(parametri[1], nomepagina)
warning=''
break
 
elif re.search(r'[Oo]pera', parametri[0]):
avviso='trovato tl. opera'
printwikipedia.output( avviso )
 
stringa=stringaDramma(parametri[1], nomepagina)
warning = u' <small>\'\'\'N.B.:\'\'\' in questa voce è in uso il [[Template:Opera]]</small>'
break
 
 
elif re.search(r'[Ss]pettacolo', parametri[0]):
avviso='trovato tl. spettacolo teatrale'
printwikipedia.output( avviso )
stringa=stringaDramma(parametri[1], nomepagina)
warning = u' <small>\'\'\'N.B.:\'\'\' in questa voce è in uso il [[Template:Spettacolo teatrale]].</small>'
break
else:
continue
if stringa == '':
continue
titolopersezione=titoloLink(nomepagina)
letteranuovasezione=titolopersezione[0]
 
if sezione:
if titolopersezione.startswith(sezione):
Riga 879 ⟶ 681:
indicelettera=u' [[#'+sezione+'|'+sezione+']]'
indicelettere=indicelettere+indicelettera
 
else:
sezione=titolopersezione[0]
Riga 885 ⟶ 686:
indicelettera=u' [[#'+sezione+'|'+sezione+']]'
indicelettere=indicelettere+indicelettera
 
stringa= nuovasezione+stringa+warning
wikipedia.output(stringa)
newtext=newtext+stringa+"\n"
 
wikipedia.output(u'*************************************************')
 
wikipedia.output(u'* *')
print '*************************************************'
print wikipedia.output(u'* Elaborazione dei dati completata *')
print wikipedia.output(u'* Elaborazione dei dati completata *')
wikipedia.output(u'*************************************************')
print '* *'
print '*************************************************'
 
 
inizio=testata+indiceinizio+indicelettere+indicefine
fine='\n==Note==\n<references/>'
lista=pagina_output
nuovotesto = inizio + newtext + fine
 
vecchiotesto=pagina_input.get()
wikipedia.showDiff(vecchiotesto, nuovotesto)
choice = wikipedia.inputChoice(u"Aggiorno?", ['Yes', 'No'], ['y', 'N'], 'N')
if choice in ['Y', 'y']:
wikipedia.setAction('opere teatrali.py 2.0: aggiorno')
lista.put(nuovotesto)
testolog_new= '*{{subst:CURRENTDAY}} {{subst:CURRENTMONTHNAME}} {{subst:CURRENTYEAR}}, {{subst:CURRENTTIME}} - Aggiornato l\'elenco [[Progetto:Teatro/Opere teatrali]]\n'
testolog_old=pagina_log.get()
testolog = testolog_new+testolog_old
pagina_log.put(testolog)
else:
wikipedia.stopme()
Riga 920 ⟶ 718:
finally:
wikipedia.stopme()
 
 
</source>