Utente:YuBot/Script: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
Riga 5:
# -*- coding: utf-8 -*-
import os
import config, wikipedia, catlib, pagegenerators
#################################################
# #
# opereteatrali.py - ver. 2.
# #
#################################################
Riga 17 ⟶ 18:
presenti su it.wiki, restituendo un elenco di voci
"""
botname = config.usernames['wikipedia']['it']
pagina_log = wikipedia.Page('it', 'Utente:%s/Log' % botname)
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):
id_voce = page.latestRevision()
if id_voce > id_elenco:
print id_voce, id_elenco
nomepagina=page.title()
wikipedia.output(u'\nLa pagina %s è stata modificata' % nomepagina)
scrivifile(nomepagina, contenuto)
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:
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)
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)
controllaid(page)
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)
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 )
# Legge un file.
in_file = open(nomefile,"r")
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)
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'
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
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:]
while nomep.endswith(' '):
nomep=nomep[lunp:]
lunp=lunp-1
for k in diz.keys():
kup=k.upper()
Riga 593 ⟶ 473:
lunp=lunp-1
if len(contp) < 2:
continue
else:
##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():
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()
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'
stringa=stringaDramma(parametri[1], nomepagina)
warning=''
break
elif re.search(r'[Oo]pera', parametri[0]):
avviso='trovato tl. opera'
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'
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'* *')
wikipedia.output(u'*************************************************')
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>
|