Utente:YuBot/Script
aggiornaliste.py
# -*- coding: utf8 -*-
"""
Script per aggiornare liste di monitoraggio. Parametri:
-stati Aggiorna le liste degli stati
-page Aggiorna una lista specifica (inserire il nome di una pagina)
"""
import wikipedia, config
import replace, pagegenerators
import re, sys, string, catlib
import datetime
def lista(pagina):
gen=pagegenerators.LinkedPageGenerator(pagina)
punto=0
testo=''
tab=''
for voce in gen:
if voce.isRedirectPage():
titolo = voce.getRedirectTarget()
voce = wikipedia.Page('it', titolo)
frase=''
note=''
if voce.namespace() == 0:
titolo=voce.title()
titolurl=voce.urlname()
titolodiscu='Discussione:'+titolo
discussione=wikipedia.Page('it', titolodiscu)
if discussione.exists():
accuratezza=''
scrittura=''
fonti=''
immagini=''
coloreaccuratezza=''
colorescrittura=''
colorefonti=''
coloreimmagini=''
punto=punto+1
print punto, titolodiscu
testodiscu=discussione.get()
trova= re.search(r'immagini ?= ?[^\|^\}]*', testodiscu)
if trova:
stringa=trova.group()
immagini=re.sub(r'immagini ?= ?', '', stringa)
immagini = re.sub('\n', '', immagini).strip()
if re.match(' ?[Aa] ?', immagini):
immagini=u'\'\'\'ottima\'\'\''
coloreimmagini='background: rgb(102, 153, 255)'
elif re.match(' ?[Bb] ?', immagini):
immagini=u'\'\'\'buona\'\'\''
coloreimmagini='background: rgb(152, 251, 152)'
elif re.match(' ?[Dd] ?', immagini):
immagini=u'\'\'\'carente\'\'\''
coloreimmagini='background: rgb(255, 102, 102)'
elif re.match(' ?[Cc] ?', immagini):
immagini=u'\'\'\'sufficiente.\'\'\''
coloreimmagini='background: rgb(255, 170, 102)'
else:
immagini=u'\'\'\'n.c.\'\'\''
trova= re.search(r'fonti ?= ?[^\|^\}]*', testodiscu)
if trova:
stringa=trova.group()
fonti=re.sub(r'fonti ?= ?', '', stringa)
fonti = re.sub('\n', '', fonti).strip()
if re.match(' ?[Aa] ?', fonti):
fonti=u'\'\'\'ottima\'\'\''
colorefonti='background: rgb(102, 153, 255)'
elif re.match(' ?[Bb] ?', fonti):
fonti=u'\'\'\'buona\'\'\''
colorefonti='background: rgb(152, 251, 152)'
elif re.match(' ?[Dd] ?', fonti):
fonti=u'\'\'\'carente\'\'\''
colorefonti='background: rgb(255, 102, 102)'
elif re.match(' ?[Cc] ?', fonti):
fonti=u'\'\'\'sufficiente.\'\'\''
colorefonti='background: rgb(255, 170, 102)'
else:
fonti=u'\'\'\'n.c.\'\'\''
trova= re.search(r'accuratezza ?= ?[^\|^\}]*', testodiscu)
if trova:
stringa=trova.group()
accuratezza=re.sub(r'accuratezza ?= ?', '', stringa)
accuratezza = re.sub('\n', '', accuratezza).strip()
if re.match(' ?[Aa] ?', accuratezza):
accuratezza=u'\'\'\'ottima\'\'\''
coloreaccuratezza='background: rgb(102, 153, 255)'
elif re.match(' ?[Bb] ?', accuratezza):
accuratezza=u'\'\'\'buona\'\'\''
coloreaccuratezza='background: rgb(152, 251, 152)'
elif re.match(' ?[Dd] ?', accuratezza):
accuratezza=u'\'\'\'carente\'\'\''
coloreaccuratezza='background: rgb(255, 102, 102)'
elif re.match(' ?[Cc] ?', accuratezza):
accuratezza=u'\'\'\'sufficiente.\'\'\''
coloreaccuratezza='background: rgb(255, 170, 102)'
else:
accuratezza=u'\'\'\'n.c.\'\'\''
trova= re.search(r'scrittura ?= ?[^\|^\}]*', testodiscu)
if trova:
stringa=trova.group()
scrittura=re.sub(r'scrittura ?= ?', '', stringa)
scrittura = re.sub('\n', '', scrittura).strip()
if re.match(' ?[Aa] ?', scrittura):
scrittura=u'\'\'\'ottima\'\'\''
colorescrittura='background: rgb(102, 153, 255)'
elif re.match(' ?[Bb] ?', scrittura):
scrittura=u'\'\'\'buona\'\'\''
colorescrittura='background: rgb(152, 251, 152)'
elif re.match(' ?[Dd] ?', scrittura):
scrittura=u'\'\'\'carente\'\'\''
colorescrittura='background: rgb(255, 102, 102)'
elif re.match(' ?[Cc] ?', scrittura):
scrittura=u'\'\'\'sufficiente.\'\'\''
colorescrittura='background: rgb(255, 170, 102)'
else:
scrittura=u'\'\'\'n.c.\'\'\''
trova= re.search(r'note ?= ?[^\|^\}]*', testodiscu)
if trova:
stringa=trova.group()
note=re.sub(r'note ?= ?', '', stringa)
note = re.sub("\n", " ", note).strip()
note = re.sub("'", "\'", note)
if fonti == '':
fonti = u'\'\'\'n.c.\'\'\''
if immagini == '':
immagini = u'\'\'\'n.c.\'\'\''
if accuratezza == '':
accuratezza = u'\'\'\'n.c.\'\'\''
if scrittura == '':
scrittura = u'\'\'\'n.c.\'\'\''
if note == '':
note=''
else:
note = "*<small>Note: "+note+"</small>\n"
print accuratezza, scrittura, fonti, immagini
print note
frase= '\n*\'\'\'[['+titolo+']]\'\'\' - <small>([['+titolodiscu+'|discussione]])</small>' + ' - accuratezza: '+ accuratezza+ ' - scrittura: '+ scrittura + ' - presenza fonti: ' + fonti + ' - presenza immagini: '+ immagini
testo=testo+frase
cella= '\n\n{| class="toccolours" width=100% style="background:#FCFCFF;"\n|style="width:20em"|\'\'\'[['+titolo+']]\'\'\' - <small>([['+titolodiscu+'|discussione]]) - ([http://it.wikipedia.org/w/index.php?title=Discussione:'+titolurl+'&action=edit§ion=0 edita])</small>' + '\n| style="text-align: center;"| accuratezza:\n|style="text-align: center;"| <div style="'+coloreaccuratezza+'">'+ accuratezza+ '</div>\n| style="text-align: center;"| scrittura:\n|style="text-align: center;"| <div style="'+colorescrittura+'">'+ scrittura + '</div>\n| style="text-align: center;"| presenza fonti:\n|style="text-align: center;"| <div style="'+colorefonti+'">' + fonti + '</div>\n| style="text-align: center;"| presenza immagini:\n|style="text-align: center;"| <div style="'+coloreimmagini+'">'+ immagini +'</div>\n|-\n|colspan=9|\n'+ note+'|}'
tab=tab+cella
return tab
def tolkien():
log=wikipedia.Page('it', 'Utente:YuBot/Monitoraggio_Tolkien')
prelista=pagegenerators.LinkedPageGenerator(log)
for pagina in prelista:
testo = lista(pagina)
incipit=u'{{torna a|Progetto:Tolkien/Monitoraggio voci}}\nQuesta pagina riporta un quadro sinottico delle voci monitorate relative alle \'\'\'opere di J.R.R. Tolkien\'\'\'.\nL\'elenco viene creato da [[utente:YuBot|]] a partire da una lista, ed è aggiornato al {{subst:CURRENTDAY}} {{subst:CURRENTMONTHNAME}} {{subst:CURRENTYEAR}}. Lo scopo è sostituire alle pagine di monitoraggio non più funzionanti un log aggiornato periodocamente. Per aggiungere una voce, si può scriverne il nome in formato testo, tra doppie parentesi quadre, \'\'nella giusta posizione\'\': al prossimo aggiornamento la cella con le informazioni relative alla voce verrà aggiunte alla lista \'\'nella posizione in cui è stato inserito il link\'\'. \n\n'
categoria='\n[[Categoria:Pagine di monitoraggio voci|Tolkien]]'
new=incipit+testo+categoria
commento='Bot: aggiorno pagine monitoraggio Tolkien'
pagina.put(new, comment=commento)
def stati():
log=wikipedia.Page('it', 'Utente:YuBot/Monitoraggio stati')
prelista=pagegenerators.LinkedPageGenerator(log)
for pagina in prelista:
testo = lista(pagina)
incipit=u'Questo è un elenco di stati creato da [[utente:YuBot|]] a partire da una lista, aggiornato al {{subst:CURRENTDAY}} {{subst:CURRENTMONTHNAME}} {{subst:CURRENTYEAR}}. Lo scopo è mantenere un log aggiornato periodocamente relativo a una lista di voci da tenere sotto osservazione. Per aggiungere una voce, si può scriverne il nome in formato testo, tra doppie parentesi quadre, \'\'nella giusta posizione\'\': al prossimo aggiornamento la cella con le informazioni relative alla voce verrà aggiunta alla lista \'\'nella posizione in cui è stato inserito il link\'\'. \n\n'
categoria='\n[[Categoria:Pagine di monitoraggio voci|Stati]]'
new=incipit+testo+categoria
commento='Bot: aggiorno le pagine monitoraggio degli stati '
pagina.put(new, comment=commento)
def main():
# Read commandline parameters.
for arg in wikipedia.handleArgs():
if arg == '-stati':
stati()
if arg == '-tolkien':
tolkien()
elif arg.startswith('-page'):
if len(arg) == 5:
pagename = wikipedia.input(u'Scrivi il nome della pagina:')
else:
pagename = arg[6:]
pagina = wikipedia.Page( 'it', pagename)
testo = lista(pagina)
incipit=u'Questo è un elenco di voci creato da [[utente:YuBot|]] a partire da una lista, aggiornato al {{subst:CURRENTDAY}} {{subst:CURRENTMONTHNAME}} {{subst:CURRENTYEAR}}. Lo scopo è mantenere un log aggiornato periodocamente relativo a una lista di voci da tenere sotto osservazione. Per aggiungere una voce, si può scriverne il nome in formato testo, tra doppie parentesi quadre, \'\'nella giusta posizione\'\': al prossimo aggiornamento la cella con le informazioni relative alla voce verrà aggiunta alla lista \'\'nella posizione in cui è stato inserito il link\'\'. \n\n'
categoria='\n[[Categoria:Pagine di monitoraggio voci]]'
new=incipit+testo+categoria
commento='Bot: aggiorno lista monitoraggio'
pagina.put(new, comment=commento)
if str(wikipedia.handleArgs()) == '[]':
print __doc__
if __name__ == "__main__":
try:
main()
finally:
wikipedia.stopme()
opereteatrali.py
# -*- coding: utf-8 -*-
import wikipedia, sys, re, catlib, pagegenerators
#################################################
# #
# opereteatrali.py - ver. 1.2 #
# #
#################################################
"""
Questo script raccoglie dati relativi alle opere teatrali
presenti su it.wiki, restituendo un elenco di voci
"""
def caratteri(parola):
caratteri = {u"È":"E",
u"É":"E",
u"Č":"C"
}
for car in caratteri.keys():
alf=caratteri[car]
if parola.startswith(car):
parolasenza = parola[len(car):]
parola = alf+parolasenza
return parola
def linguaLink(lingua):
if re.search(r'[Ii]talian', lingua):
lingua='{{it}}'
elif re.search(r'[Ii]nglese', lingua):
lingua='{{en}}'
elif re.search(r'[Ll]atin', lingua):
lingua='{{la}}'
elif re.search(r'[Gg]rec', lingua):
if re.search(r'[Gg]reco [Aa]ntico', lingua):
lingua='{{grc}}'
else:
lingua='{{el}}'
elif re.search(r'[Ff]rancese', lingua):
lingua='{{fr}}'
elif re.search(r'[Tt]edesc', lingua):
lingua='{{de}}'
elif re.search(r'[Ss]pagnol', lingua):
lingua='{{es}}'
elif re.search(r'[Nn]orvegese', lingua):
lingua='{{no}}'
elif re.search(r'[Gg]iapponese', lingua):
lingua='{{ja}}'
elif re.search(r'[Cc]inese', lingua):
lingua='{{zh}}'
elif re.search(r'[Rr]uss', lingua):
lingua='{{ru}}'
elif re.search(r'[Ss]vedese', lingua):
lingua='{{sv}}'
#Dialetti
elif re.search(r'[Nn]apoletan', lingua):
lingua='{{nap}}'
elif re.search(r'[Ll]ombard', lingua):
lingua='{{lmo}}'
elif re.search(r'[Ss]icilian', lingua):
lingua='{{scn}}'
elif re.search(r'[Vv]enet', lingua):
lingua='{{vec}}'
else:
lingua='[['+lingua+']]'
if lingua == '[[]]':
lingua = ''
return lingua
def autoreLink(nomeautore, cognomeautore):
cognomeautore=caratteri(cognomeautore)
if nomeautore and cognomeautore:
autore='[['+nomeautore+' '+cognomeautore+'|'+cognomeautore+', '+nomeautore+']]'
elif nomeautore and not cognomeautore:
autore='[['+nomeautore+']]'
elif cognomeautore and not nomeautore:
autore='[['+cognomeautore+']]'
else:
autore=''
return autore
def titoloLink(titoloorig):
articoli = ["Il ", "Lo ", "La ", "I ", "Gli ", "Le ", "L'", "'O ", "'A ", "Un ", "Uno ", "Una ", "Un'"]
titolo=titoloorig
for articolo in articoli:
if titoloorig.startswith(articolo):
titolosenza = titoloorig[len(articolo):]
titolomaiuscolo = titolosenza[:1].upper()+titolosenza[1:]
titolo=titolomaiuscolo +', '+articolo
titolo=caratteri(titolo)
return titolo
def main():
template=wikipedia.Page('it', 'Template:Dramma')
gen = pagegenerators.ReferringPageGenerator(template)
voci=[]
newtext=''
listone={}
articoli = ["Il ", "Lo ", "La ", "I ", "Gli ", "Le ", "L'", "'O ", "'A ", "Un ", "Uno ", "Una ", "Un'"]
for page in gen:
if not page in voci:
if page.namespace() == 0:
titolo=titoloLink(page.title())
listone[page.title()]=titolo
items=listone.items()
backitems=[ [v[1],v[0]] for v in items]
backitems.sort()
voci=[ backitems[i][1] for i in range(0,len(backitems))]
count=0
for voce in voci:
pagina=wikipedia.Page('it', voce)
titor=False
titoloorig=''
diz = {'Titoloitaliano':'',
'Titolooriginale':'',
'Nome':'',
'Cognome':'',
'Linguaoriginale':'',
'Epocacomposizione':''
}
if re.search(r'Elenco', str(pagina)):
continue
else:
count=count+1
wikipedia.output(u'\n>>> %s <<<' % pagina.title())
testo=pagina.get()
listaparametri=pagina.templatesWithParams()
if re.search(r'\{\{[Dd]ramma', testo):
for parametro in listaparametri:
for p in parametro[1]:
if re.search(r'[Pp]olytonic', p):
titor=True
continue
if re.search(r'[Uu]nicode', p):
titor=True
continue
if titor==True:
p = re.sub('\n', '', p).strip()
print diz['Titolooriginale']
diz['Titolooriginale']='{{polytonic|'+p+'}}'
titor=False
for k in diz.keys():
lun = len(k)+1
if re.search(k, p):
n=p[lun:]
if n.startswith(' '):
n=n[1:]
diz[k] = n
else:
continue
for k in diz.keys():
n=diz[k]
if n.startswith(' '):
n=n[1:]
n = re.sub('\[', '', n).strip()
n = re.sub('\]', '', n).strip()
n = re.sub('\n', '', n).strip()
diz[k] = n
print diz
nomepagina = pagina.title()
if titoloLink(diz['Titoloitaliano']):
titolo = '|'+titoloLink(diz['Titoloitaliano'])
else:
if nomepagina.endswith(')'):
titolo='|'
else:
titolo=''
if titoloorig :
titoloorig="''"+titoloorig+"''"
else:
titoloorig=''
autore = autoreLink(diz['Nome'], diz['Cognome'])
lingua = linguaLink(diz['Linguaoriginale'])
titoloorig = diz['Titolooriginale']
epoca = diz['Epocacomposizione']
testo= '|-\n'+'|'+'\'\'[['+nomepagina+titolo+']]\'\' || '+autore+' || '+lingua+' || '+titoloorig+' || '+epoca+'\n'
newtext=newtext+testo
wikipedia.output(testo)
inizio='{| class="wikitable sortable"\n|+ Elenco di opere teatrali\n! Titolo !! Autore !! Lingua<br/>originale !! Titolo<br/>originale !! Anno<br/>composizione\n'
fine='|}'
lista=wikipedia.Page('it', 'Utente:Yuma/Sandbox/5')
vecchiotesto=lista.get()
nuovotesto = inizio + newtext + fine
wikipedia.showDiff(vecchiotesto, nuovotesto)
choice = wikipedia.inputChoice(u"Aggiorno?", ['Yes', 'No'], ['y', 'N'], 'N')
if choice in ['Y', 'y']:
wikipedia.setAction(u'Bot: Compilo elenco opere teatrali')
lista.put(nuovotesto)
if __name__ == "__main__":
try:
main()
finally:
wikipedia.stopme()
monitinsert.py
# -*- coding: utf-8 -*-
"""
Questo script serve per inserire il template monitoraggio.
Si richiede di specificare un parametro di progetto.
***ATTENZIONE**** Sarebbe bene evitare l'inserimento automatico
del monitoraggio nel caso in cui la cosa comporti la creazione
massiccia di pagine di discussione senza info rilevanti (meglio
inserirne poche alla volta e compilare i template).
"""
import wikipedia, sys, re, catlib
def workon(lista, varp):
template= '{{Monitoraggio\n|progetto= '+varp+'\n|progetto2= '+'\n|accuratezza= ' + '\n|scrittura= ' + '\n|fonti= ' + '\n|immagini= ' + '\n|note= ' + '\n|utente= ' + '\n|data= ' + '\n}}\n'
for voce in lista:
oldtext=''
print voce.namespace()
if voce.namespace() == 0:
nomediscu='Discussione:'+voce.title()
discussione=wikipedia.Page('it', nomediscu)
wikipedia.output(u'\n>>> %s <<<' % discussione.title())
if discussione.exists():
try:
oldtext=discussione.get()
except discussione.isRedirectPage() or discussione.isDisambig():
wikipedia.output(u'Redirect o disambigua.')
continue
else:
wikipedia.output(u'La pagina %s esiste.' %discussione.title())
if re.search(r'\{\{[Mm]onitoraggio', oldtext):
wikipedia.output(u'Monitoraggio presente, proseguo.')
else:
newtext= template + oldtext
wikipedia.showDiff(oldtext, newtext)
choice = wikipedia.inputChoice(u"Conferma la modifica" , ['Si', 'No'], ['s', 'N'], 'N')
if choice in ['S', 's']:
wikipedia.output (u'Inserisco il template monitoraggio.')
wikipedia.setAction(u'Bot: monitoraggio %s' % varp)
discussione.put(newtext)
else:
wikipedia.output(u'Non esiste una pagina di discussione per la voce %s' % voce.title())
choice = wikipedia.inputChoice(u"Vuoi creare la pagina (sconsigliato)?" , ['Si', 'No'], ['s', 'N'], 'N')
if choice in ['S', 's']:
newtext= template + oldtext
wikipedia.showDiff(oldtext, newtext)
choice = wikipedia.inputChoice(u"Conferma la modifica" , ['Si', 'No'], ['s', 'N'], 'N')
if choice in ['S', 's']:
wikipedia.output (u'Inserisco il template monitoraggio.')
wikipedia.setAction(u'Bot: monitoraggio %s' % varp)
discussione.put(newtext)
def main():
lista=[]
varp=''
varp=wikipedia.input(u'Mi serve la variabile \'progetto\' da inserire:')
if varp:
choice = wikipedia.inputChoice(u"Scegli il metodo di creazione dell'elenco di voci: 'categoria' o 'puntanoQui?", ['categoria', 'puntanoQui'], ['c', 'p'], '')
if choice in ['C', 'c']:
nomecat=wikipedia.input(u"Specifica una categoria")
cat=catlib.Category('it', 'Categoria:'+nomecat)
lista=[page for page in cat.articlesList()]
if choice in ['P', 'p']:
portale=wikipedia.Page('it', 'Portale:'+varp)
if portale.exists():
choice = wikipedia.inputChoice(u"Cerco i collegamenti a %s?" % portale.title(), ['Si', 'No per inserire un\'altra pagina'], ['s', 'N'], 'N')
if choice in ['S', 's']:
lista=[page for page in portale.getReferences()]
elif choice in ['N', 'n']:
nomepagina=wikipedia.input(u'Inserire il nome completo della pagina o del template: ')
pagina=wikipedia.Page('it', nomepagina)
lista=[page for page in pagina.getReferences()]
if lista:
workon(lista, varp)
else:
choice = wikipedia.inputChoice(u"Termino il programma?", ['Si', 'No'], ['s', 'N'], 'S')
if choice in ['N', 'n']:
main()
if __name__ == "__main__":
print __doc__
try:
main()
finally:
wikipedia.stopme()