Utente:Brodobot/Python
Aggiornamento dello stato di conservazione delle varie sottospecie
modificaQuesto bot serve per inserire e correggere i parametri |statocons= e |statocons_versione= del template {{tassobox}} nelle specie delle varie forme di vita; inoltre aggiunge e corregge la bibliografia inserendo il riferimento alla pagina corretta IUCN Red List tramite il template {{IUCN}}. Esempio
iucn.py
# -*- coding: utf-8 -*-
"""
Questo bot visualizza il nome di tutte le pagine reindirizzate con questi metodi:
-file - Lavora su tutte le pagine in date da un file locale.
Legge ogni [[wiki link]] e usa quei articoli.
L'argomento passato come "-file:filename".
-cat - Lavora in tutte le pagine di una specifica categoria.
L'argomento passato come "-cat:categoryname".
-page - Edita solamente una specifica pagina.
L'argomento passato come "-page:pagetitle". Si può passare l'argomento più volte, una per ogni pagina
-ref - Lavora su tutte le pagine linkate verso una certa pagina - come ad esempio [[Speciale:PuntanoQui]].
L'argomento passato come "-ref:referredpagetitle".
-filelinks - Lavora su tutte le pagine che linkano su un certo file.
L'argomento passato come "-filelinks:ImageName".
-links - Lavora su tutte le pagine linkate all'interno di una certa pagina.
L'argomento passato come "-links:linkingpagetitle".
-start - Lavora su tutte le pagine di wiki. partendo da una pagina data. Scegliere
"-start:!" per partire dalla prima pagina.
-namespace:n - Numero dei namespace su cui lavorare. Il parametro può essere usato più volte.
Lavora in combinazione con tutti gli altri parametri, eccetto il parametro -start.
Se si vuole per esempio iterare tutte le pagine a partire da User:M, usare -start:User:M.
"""
#
# (C) Brodo, 2007
#
# Distributed under the terms of the GPL license.
#
from __future__ import generators
import wikipedia, pagegenerators
import re, urllib2, sys
# Imports predefined replacements tasks from fixes.py
from fixes import fixes
def main():
gen=None
# Which namespaces should be processed?
# default to [] which means all namespaces will be processed
namespaces = []
PageTitles = []
genFactory = pagegenerators.GeneratorFactory()
for arg in wikipedia.handleArgs():
if arg.startswith('-namespace:'):
namespaces.append(int(arg[11:]))
elif arg.startswith('-page'):
if len(arg) == 5:
PageTitles.append(wikipedia.input(u'Which page do you want to change?'))
else:
PageTitles.append(arg[6:])
else:
generator = genFactory.handleArg(arg)
if generator:
gen = generator
if PageTitles:
pages = [wikipedia.Page(wikipedia.getSite(), PageTitle) for PageTitle in PageTitles]
gen = iter(pages)
if not gen:
# syntax error, show help text from the top of this file
wikipedia.showHelp()
wikipedia.stopme()
sys.exit()
if namespaces != []:
gen = pagegenerators.NamespaceFilterPageGenerator(gen, namespaces)
generator = pagegenerators.PreloadingGenerator(gen, pageNumber = 500)
#page=wikipedia.input(u'Inserisci la pagina da modificare:')
for page in generator:
try:
action ='';
txt = page.get()
if cosasono(txt,page) == 'specie' or cosasono(txt,page) == 'sottospecie' :
newtxt=fixIUCN(txt,page)
else:
newtxt=txt
if txt != newtxt:
action =action + 'fix IUCN - '
#newtxt=fixAltriprogetti(txt,page);
#if txt != newtxt:
# action =action + 'fix /* Altri progetti */ - '
if txt != newtxt:
wikipedia.output(u"\n\n>>> \03{lightpurple}%s\03{default} <<<" % page.title())
wikipedia.showDiff(txt, newtxt)
choice = wikipedia.inputChoice(u'Modifico la pagina?', [u'Yes', u'No'], [u'y', u'N'], u'N')
if choice in [u'Y', u'y']:
wikipedia.setAction(u'%s' % (action))
page.put(newtxt)
else:
wikipedia.output(u'nessuna modifica necessaria in %s'% page.title())
except wikipedia.NoPage:
wikipedia.output(u'Page %s not found' % page.title());
wikipedia.stopme();
except wikipedia.IsRedirectPage:
wikipedia.output(u'Page %s is a redirect' % page.title());
def fixIUCN(txt,page):
try:
if cosasono(txt,page) == 'specie':
regex1 = re.compile(u'<A HREF="details.php/(.*)/summ">%s' % page.title());
urlpage = re.search(u'(.*) (.*)',page.title()).group(1) + '+' + re.search(u'(.*) (.*)',page.title()).group(2);
pagina=urllib2.urlopen('http://www.iucnredlist.org/search/search.php?freetext=%s&modifier=starts&criteria=wholedb&taxa_species=1&Submit.x=87&Submit.y=14&redlistCategory[]=all&redlistAssessyear[]=all&country[]=all&aquatic[]=all®ions[]=all&habitats[]=all&threats[]=all' % urlpage).read()
tsumm = re.search(regex1,pagina)
elif cosasono(txt,page) == 'sottospecie':
urlpage = re.search(u'(.*) (.*) (.*)',page.title()).group(1) + '+' + re.search(u'(.*) (.*) (.*)',page.title().decode('latin-1')).group(2)
urltitle= re.search(u'(.*) (.*) (.*)',page.title()).group(1) + ' ' + re.search(u'(.*) (.*) (.*)',page.title()).group(2) + ' ssp.' + re.search(u'(.*) (.*) (.*)',page.title()).group(3)
regex1 = re.compile(u'<A HREF="details.php/(.*)/summ">%s' % urltitle);
pagina=urllib2.urlopen('http://www.iucnredlist.org/search/search.php?freetext=%s&modifier=all&criteria=wholedb&taxa_subspc=1&Submit.x=87&Submit.y=14&redlistCategory[]=all&redlistAssessyear[]=all&country[]=all&aquatic[]=all®ions[]=all&habitats[]=all&threats[]=all' % urlpage).read()
tsumm = re.search(regex1,pagina)
else:
return txt;
if not tsumm:
wikipedia.output(u'%s non trovato sul sito IUCN' % page.title())
return txt
summ=tsumm.group(1)
try:
regex2 = re.compile(u' *(..(/..)?) (.* )?(.*) <A HREF=(.*)/info/categories_criteria(....)#categories.><SPAN CLASS=.linksmall.>ver (.*) (...)');
pagina = urllib2.urlopen('http://www.iucnredlist.org/search/details.php/%s/summ' % summ).read();
statocons = re.search(regex2,pagina).group(1);
statocons_versione = re.search(regex2,pagina).group(7);
autore= re.search(u'<TD>(.*)\. <I>.*</I>\. In: IUCN 200.\. <I>200. IUCN Red List of Threatened Species\. </I><<A HREF="http://www.iucnredlist.org">www.iucnredlist.org</A>>\. Downloaded on', pagina).group(1);
autore = re.sub(r'</?(I|i)>',r"''",autore)
#autore = re.sub(u'</i>',u'\'\'',autore)
autore = re.sub(u'&',u'&',autore)
if statocons == 'EX' or statocons == 'EW':
if re.search(u'\| *statocons *=.* *( *\| *dataestinzione=.*)',txt):
statocons=statocons + re.search(u'\| *statocons *=.* *( *\| *dataestinzione=.*)',txt).group(1)
if re.search(r'\| *statocons *= *%s' % (statocons),txt) and re.search(r'\| *statocons_versione *= *iucn%s' % (statocons_versione),txt) and (re.search(r'\{\{IUCN\|summ=%s\|autore= *%s *\}\}' % (summ,autore),txt) or re.search(r'\{\{IUCN\|autore= *%s *\|summ=%s\}\}' % (autore,summ),txt)):
return txt
if re.search(u'\| ?stato(cons)? ?= ?.*',txt):
if re.search(u'\| ?statocons_versione ?= ?.*',txt):
newtxt=re.sub(u'\| ?stato(cons)? ?= ?.*',u'|statocons=%s' % (statocons),txt);
newtxt=re.sub(u'\| ?statocons_versione ?= ?.*',u'|statocons_versione=iucn%s' % (statocons_versione),newtxt);
else:
newtxt=re.sub(u'\| ?stato(cons)? ?= ?.*',u'|statocons=%s\n|statocons_versione=iucn%s' % (statocons,statocons_versione),txt);
elif re.search(u'\| *nome *=.*',txt):
lnome=re.search(u'\| *nome *=(.*)',txt)
if lnome:
nome=lnome.group(1)
else:
nome=''
print nome
newtxt=re.sub(u'\| *nome *= *.*',u'|nome=%s\n|statocons=%s\n|statocons_versione=iucn%s' % (nome,statocons,statocons_versione), txt)
else:
print 'error'
return txt
if re.search(u'\{\{IUCN(\|(summ|autore)=.*\|(summ|autore)=.*)?\}\}',newtxt):
newtxt=re.sub(u'\{\{IUCN.*\}\}',u'{{IUCN|summ=%s|autore=%s}}' % (summ,autore.decode('latin-1')),newtxt)
elif re.search(u'== *Bibliografia *==',newtxt):
newtxt=re.sub(u'== *Bibliografia *==',u'== Bibliografia ==\n*{{IUCN|summ=%s|autore=%s}}' % (summ,autore.decode('latin-1')),newtxt)
elif re.search(u'== *Altri progetti *==',newtxt):
newtxt=re.sub(u'== *Altri progetti *==',u'== Bibliografia ==\n*{{IUCN|summ=%s|autore=%s}}\n\n== Altri progetti ==' % (summ,autore.decode('latin-1')),newtxt);
elif re.search(u'== *Collegamenti esterni *==',newtxt):
newtxt=re.sub(u'== *Collegamenti esterni *==',u'== Bibliografia ==\n*{{IUCN|summ=%s|autore=%s}}\n\n== Collegamenti esterni ==' % (summ,autore.decode('latin-1')),newtxt);
else:
newtxt = newtxt + u'\n== Bibliografia ==\n*{{IUCN|summ=%s|autore=%s}}' % (summ,autore.decode('latin-1'))
return newtxt
except AttributeError:
wikipedia.output(u'%s non trovato sul sito IUCN' % page.title());
return txt;
except AttributeError:
wikipedia.output(u'Impossibile inserire IUCN %s poichè non è una specie' % page.title());
return txt;
def cosasono(txt,page):
r = re.search(u'(.*) \(.*\)',page.title())
if r:
pagesenzadisambigua=r.group(1)
else:
pagesenzadisambigua=page.title()
r=re.search(u'\|(dominio|regno|sottoregno|superphylum|phylum|subphylum|infraphylum|microphylum|nanophylum|superclasse|classe|sottoclasse|infraclasse|superordine|ordine|sottordine|infraordine|superfamiglia|famiglia|sottofamiglia|trib.|genere|sottogenere|specie|sottospecie) *= *.*%s.*' % (pagesenzadisambigua), txt)
if r:
return r.group(1)
else:
r=re.search(u'(.)(.*) (.*) (.*)',pagesenzadisambigua)
if r:
if re.search(u'×',pagesenzadisambigua):
return 'none'
return 'sottospecie'
else:
r=re.search(u'(.)(.*) (.*)',pagesenzadisambigua)
if r:
return 'specie'
else:
return 'none'
if __name__ == "__main__":
try:
main()
# except KeyboardInterrupt:
# wikipedia.stopme()
# sys.exit()
finally:
wikipedia.stopme()
sys.exit()
Inserimento e correzione del template {{interprogetto}} nelle forme di vita
modificaScopo di questo bot è di inserire e correggere il template {{interprogetto}} all'interno delle varie forme di vita inserendo un link a commons e a wikispecies, potrebbe non funzionare correttamente se esistono link a ad altri progetti wikimedia. Esempio
altriprogetti.py
# -*- coding: utf-8 -*-
"""
Questo bot visualizza il nome di tutte le pagine reindirizzate con questi metodi:
-file - Lavora su tutte le pagine in date da un file locale.
Legge ogni [[wiki link]] e usa quei articoli.
L'argomento passato come "-file:filename".
-cat - Lavora in tutte le pagine di una specifica categoria.
L'argomento passato come "-cat:categoryname".
-page - Edita solamente una specifica pagina.
L'argomento passato come "-page:pagetitle". Si può passare l'argomento più volte, una per ogni pagina
-ref - Lavora su tutte le pagine linkate verso una certa pagina - come ad esempio [[Speciale:PuntanoQui]].
L'argomento passato come "-ref:referredpagetitle".
-filelinks - Lavora su tutte le pagine che linkano su un certo file.
L'argomento passato come "-filelinks:ImageName".
-links - Lavora su tutte le pagine linkate all'interno di una certa pagina.
L'argomento passato come "-links:linkingpagetitle".
-start - Lavora su tutte le pagine di wiki. partendo da una pagina data. Scegliere
"-start:!" per partire dalla prima pagina.
-namespace:n - Numero dei namespace su cui lavorare. Il parametro può essere usato più volte.
Lavora in combinazione con tutti gli altri parametri, eccetto il parametro -start.
Se si vuole per esempio iterare tutte le pagine a partire da User:M, usare -start:User:M.
"""
#
# (C) Brodo, 2007
#
# Distributed under the terms of the GPL license.
#
from __future__ import generators
import wikipedia, pagegenerators
import re, urllib2, sys
# Imports predefined replacements tasks from fixes.py
from fixes import fixes
def main():
gen=None
# Which namespaces should be processed?
# default to [] which means all namespaces will be processed
namespaces = []
PageTitles = []
genFactory = pagegenerators.GeneratorFactory()
for arg in wikipedia.handleArgs():
if arg.startswith('-namespace:'):
namespaces.append(int(arg[11:]))
elif arg.startswith('-page'):
if len(arg) == 5:
PageTitles.append(wikipedia.input(u'Which page do you want to change?'))
else:
PageTitles.append(arg[6:])
else:
generator = genFactory.handleArg(arg)
if generator:
gen = generator
if PageTitles:
pages = [wikipedia.Page(wikipedia.getSite(), PageTitle) for PageTitle in PageTitles]
gen = iter(pages)
if not gen:
# syntax error, show help text from the top of this file
wikipedia.showHelp()
wikipedia.stopme()
sys.exit()
if namespaces != []:
gen = pagegenerators.NamespaceFilterPageGenerator(gen, namespaces)
generator = pagegenerators.PreloadingGenerator(gen, pageNumber = 50)
#page=wikipedia.input(u'Inserisci la pagina da modificare:')
for page in generator:
try:
action ='';
txt = page.get()
#if cosasono(txt,page) == 'specie' or cosasono(txt,page) == 'sottospecie' :
# newtxt=fixIUCN(txt,page)
#else:
# newtxt=txt
#if txt != newtxt:
# action =action + 'fix IUCN - '
newtxt=fixAltriprogetti(txt,page);
if txt != newtxt:
action =action + 'fix /* Altri progetti */ - '
if txt != newtxt:
wikipedia.output(u"\n\n>>> \03{lightpurple}%s\03{default} <<<" % page.title())
wikipedia.showDiff(txt, newtxt)
choice = wikipedia.inputChoice(u'Modifico la pagina?', [u'Yes', u'No'], [u'y', u'N'], u'N')
if choice in [u'Y', u'y']:
wikipedia.setAction(u'%s' % (action))
page.put(newtxt)
else:
wikipedia.output(u'nessuna modifica necessaria in %s'% page.title())
except wikipedia.NoPage:
wikipedia.output(u'Page %s not found' % page.title());
wikipedia.stopme();
except wikipedia.IsRedirectPage:
wikipedia.output(u'Page %s is a redirect' % page.title());
def fixIUCN(txt,page):
try:
if cosasono(txt,page) == 'specie':
urlpage = re.search(u'(.*) (.*)',page.title()).group(1) + '+' + re.search(u'(.*) (.*)',page.title()).group(2);
pagina=urllib2.urlopen('http://www.iucnredlist.org/search/search.php?freetext=%s&modifier=starts&criteria=wholedb&taxa_species=1&Submit.x=87&Submit.y=14&redlistCategory[]=all&redlistAssessyear[]=all&country[]=all&aquatic[]=all®ions[]=all&habitats[]=all&threats[]=all' % urlpage).read()
elif cosasono(txt,page) == 'sottospecie':
urlpage = re.search(u'(.*) (.*) (.*)',page.title()).group(1) + '+' + re.search(u'(.*) (.*) (.*)',page.title()).group(2) + '+' + re.search(u'(.*) (.*) (.*)',page.title()).group(3)
pagina=urllib2.urlopen('http://www.iucnredlist.org/search/search.php?freetext=%s&modifier=all&criteria=wholedb&taxa_subspc=1&Submit.x=87&Submit.y=14&redlistCategory[]=all&redlistAssessyear[]=all&country[]=all&aquatic[]=all®ions[]=all&habitats[]=all&threats[]=all' % urlpage).read()
else:
return txt;
try:
regex1 = re.compile(u'<A HREF="details.php/(.*)/summ">');
regex2 = re.compile(u'<FONT FACE="Verdana" SIZE="2" COLOR="maroon">(..(/..)?) (.* )?(.*) <A HREF=(.*)ver (.*)(.*) (.*)');
summ = re.search(regex1,pagina).group(1);
statocons = re.search(regex2,pagina).group(1);
statocons_versione = re.search(regex2,pagina).group(6);
pagina = urllib2.urlopen('http://www.iucnredlist.org/search/details.php/%s/summ' % summ).read();
autore= re.search(u'<TD>(.*)\. <I>.*</I>\. In: IUCN 200.\. <I>2006 IUCN Red List of Threatened Species\. </I><<A HREF="http://www.iucnredlist.org">www.iucnredlist.org</A>>\. Downloaded on', pagina).group(1);
# modifico la pagina
if re.search(r'\|statocons=%s' % (statocons),txt) and re.search(r'\|statocons_versione=iucn%s' % (statocons_versione),txt) and re.search(r'\{\{IUCN\|summ=%s\|autore=%s\}\}' % (summ,autore),txt) :
return txt
if re.search(u'\| ?stato(cons)? ?= ?.*',txt):
if re.search(u'\| ?statocons_versione ?= ?.*',txt):
newtxt=re.sub(u'\| ?stato(cons)? ?= ?.*',u'|statocons=%s' % (statocons),txt);
newtxt=re.sub(u'\| ?statocons_versione ?= ?.*',u'|statocons_versione=iucn%s' % (statocons_versione),newtxt);
else:
newtxt=re.sub(u'\| ?stato(cons)? ?= ?.*',u'|statocons=%s\n|statocons_versione=iucn%s' % (statocons,statocons_versione),txt);
if re.search(u'\{\{IUCN(\|(summ|autore)=.*\|(summ|autore)=.*)?\}\}',newtxt):
newtxt=re.sub(u'\{\{IUCN(\|(summ|autore)=.*\|(summ|autore)=.*)?\}\}',u'{{IUCN|summ=%s|autore=%s}}' % (summ,autore),newtxt);
elif re.search(u'== *Bibliografia *==',newtxt):
newtxt=re.sub(u'== *Bibliografia *==',u'== Bibliografia ==\n*{{IUCN|summ=%s|autore=%s}}' % (summ,autore),newtxt)
elif re.search(u'== *Altri progetti *==',newtxt):
newtxt=re.sub(u'== *Altri progetti *==',u'==Bibliografia ==\n*{{IUCN|summ=%s|autore=%s}}\n\n== Altri progetti ==' % (summ,autore),newtxt);
elif re.search(u'== *Collegamenti esterni *==',newtxt):
newtxt=re.sub(u'== *Collegamenti esterni *==',u'==Bibliografia ==\n*{{IUCN|summ=%s|autore=%s}}\n\n== Collegamenti esterni ==' % (summ,autore),newtxt);
else:
newtxt = newtxt + u'\n== Bibliografia ==\n*{{IUCN|summ=%s|autore=%s}}' % (summ,autore)
return newtxt
except AttributeError:
wikipedia.output(u'%s non trovato sul sito IUCN' % page.title());
return txt;
except AttributeError:
wikipedia.output(u'Impossibile inserire IUCN %s poichè non è una specie' % page.title());
return txt;
def cosasono(txt,page):
r = re.search(u'(.*) \(.*\)',page.title())
if r:
pagesenzadisambigua=r.group(1)
else:
pagesenzadisambigua=page.title()
r=re.search(u'\|(dominio|regno|sottoregno|superphylum|phylum|subphylum|infraphylum|microphylum|nanophylum|superclasse|classe|sottoclasse|infraclasse|superordine|ordine|sottordine|infraordine|superfamiglia|famiglia|sottofamiglia|trib.|genere|sottogenere|specie|sottospecie) *= *.*%s.*' % (pagesenzadisambigua), txt)
if r:
return r.group(1)
else:
r=re.search(u'(.)(.*) (.*) (.*)',pagesenzadisambigua)
if r:
return 'sottospecie'
else:
r=re.search(u'(.)(.*) (.*)',pagesenzadisambigua)
if r:
return 'specie'
else:
return 'none'
def fixAltriprogetti(txt,page):
s=wikipedia.Site('species', 'species')
speciesfile=wikipedia.Page(s, page.title());
c=wikipedia.Site('commons','commons')
commonsfile=wikipedia.Page(c, page.title());
commonsexists=mexists(commonsfile)
if not commonsexists:
c=wikipedia.Site('commons','commons')
commonsfile=wikipedia.Page(c,u'Category:%s' % (page.title()));
commonsexists=mexists(commonsfile);
speciesexists=mexists(speciesfile);
if commonsexists and commonsfile.title() == page.title():
if speciesexists:
if re.search(u'\{\{interprogetto\|commons\|wikispecies\}\}',txt) or re.search(u'\{\{interprogetto\|wikispecies\|commons\}\}',txt):
return txt
else:
if re.search(u'\{\{interprogetto\|commons\}\}',txt):
return txt
elif commonsexists and commonsfile.title() == 'Category:' + page.title():
if speciesexists:
if re.search(u'\{\{interprogetto\|commons=%s\|wikispecies\}\}' % (commonsfile.title()),txt) or re.search(u'\{\{interprogetto\|wikispecies\|commons=%s\}\}' % (commonsfile.title()),txt):
return txt
else:
if re.search(u'\{\{interprogetto\|commons=%s\}\}' % (commonsfile.title()),txt):
return txt
elif speciesexists and speciesfile.title() == page.title():
if re.search(u'\{\{interprogetto\|wikispecies\}\}',txt):
return txt
elif not speciesexists and not commonsexists:
return txt
if re.search(u'\{\{interprogetto\|commons=%s\}\}' % (commonsfile.title()),txt) or re.search(u'\{\{interprogetto\|commons=%s\|wikispecies=%s\}\}' % (commonsfile.title(),speciesfile.title()),txt) or re.search(u'\{\{interprogetto\|wikispecies=%s\}\}' % (speciesfile.title()),txt):
return txt
if re.search(u'{{interprogetto.*',txt):
if commonsexists :
if speciesexists:
newtxt=re.sub(u'{{interprogetto.*',u'{{interprogetto|commons=%s|wikispecies=%s}}' % (commonsfile.title(),speciesfile.title()),txt);
else:
newtxt=re.sub(u'{{interprogetto.*',u'{{interprogetto|commons=%s}}' % (commonsfile.title()),txt);
else:
if speciesexists:
newtxt=re.sub(u'{{interprogetto.*',u'{{interprogetto|wikispecies=%s}}' % (speciesfile.title()),txt);
elif re.search(u'== ?Collegamenti esterni ?==',txt):
if commonsexists:
if speciesexists:
newtxt=re.sub(u'== ?Collegamenti esterni ?==',u'== Altri progetti ==\n{{interprogetto|commons=%s|wikispecies=%s}}\n\n== Collegamenti esterni ==' % (commonsfile.title(),speciesfile.title()),txt);
else:
newtxt=re.sub(u'== ?Collegamenti esterni ?==',u'== Altri progetti ==\n{{interprogetto|commons=%s}}\n\n== Collegamenti esterni ==' % (commonsfile.title()),txt);
else:
if speciesexists:
newtxt=re.sub(u'== ?Collegamenti esterni ?==',u'== Altri progetti ==\n{{interprogetto|wikispecies=%s}}\n\n== Collegamenti esterni ==' % (speciesfile.title()),txt);
else:
if commonsexists:
if speciesexists:
newtxt= txt + u'\n== Alri progetti ==\n{{interprogetto|commons=%s|wikispecies=%s}}' % (commonsfile.title(),speciesfile.title());
else:
newtxt= txt + u'\n== Alri progetti ==\n{{interprogetto|commons=%s}}' % (commonsfile.title());
else:
if speciesexists:
newtxt= txt + u'\n== Alri progetti ==\n{{interprogetto|wikispecies=%s}}' % (speciesfile.title());
if newtxt == txt:
return txt;
else:
return newtxt;
def mexists(page):
"""
True if the page exists, even if it's a redirect.
If the title includes a section, False if this section isn't found.
Questa funzione va a sostituire Page.exists() poichè la funzione soprascritta attiva una funzione di sleeping che preferisco rimanga disattivata
"""
try:
page.get(throttle = False)
except wikipedia.NoPage:
return False
except wikipedia.IsRedirectPage:
return True
except wikipedia.SectionError:
return False
return True
if __name__ == "__main__":
try:
main()
# except KeyboardInterrupt:
# wikipedia.stopme()
# sys.exit()
finally:
wikipedia.stopme()
sys.exit()
Creazione dei fringuelli di Darwin
modificauccelliDarwin.py
# -*- coding: utf-8 -*-
import wikipedia
import re
list = [
['Geospiza conirostris','Fringuello terricolo grosso dei cactus','[[Robert Ridgway|Ridgway]]', '1890'],
['Geospiza difficilis','Fringuello terricolo beccotagliente','[[Richard Bowdler Sharpe|Sharpe]]', '1888'],
['Geospiza fortis','Fringuello terricolo medio','[[John Gould|Gould]]', '1837'],
['Geospiza fuliginosa','Fringuello terricolo piccolo','[[John Gould|Gould]]', '1837'],
['Geospiza magnirostris','Fringuello terricolo grosso','[[John Gould|Gould]]', '1837'],
['Geospiza scandens','Fringuello terricolo dei cactus','([[John Gould|Gould]]', '1837)'],
['Camarhynchus crassirostris','Fringuello arboricolo beccogrosso','[[John Gould|Gould]]', '1837'],
['Camarhynchus heliobates','Fringuello delle mangrovie','([[Robert Evans Snodgrass|Snodgrass]] & [[Edmund Heller|Heller]]', '1901)'],
['Camarhynchus pallidus','Fringuello picchio','([[Philip Sclater|Sclater]] & [[Osbert Salvin|Salvin]]', '1870)'],
['Camarhynchus parvulus','Fringuello arboricolo insettivoro piccolo','([[John Gould|Gould]]', '1837)'],
['Camarhynchus pauper','Fringuello arboricolo di Charles','[[Robert Ridgway|Ridgway]]', '1890'],
['Camarhynchus psittacula','Fringuello arboricolo grosso ','[[John Gould|Gould]]', '1837'],
]
wikipedia.handleArgs()
for m in list:
print m[0]
i=wikipedia.Page(wikipedia.getSite(), m[0])
if i.exists(): #or i.title().find(u'Immagine') != -1 or i.title().find(u'Image') != -1 or i.title().find(u'idae') != -1:
continue
regex = re.compile(u'\[\[%s\]\]\'\' *\|\| *(.*) *\|\|' % i.title())
nomecomune = m[1]
scient = re.search(u'(.+?) (.+)', i.title())
genere = scient.group(1)
specie = genere[0] + u'. ' + scient.group(2)
biautore= m[2]
bidata = m[3]
testopagina = u"{{s|uccelli}}\n{{Tassobox\n|colore=pink\n|nome=%s\n|statocons=\n|immagine=[[Immagine:Missing.png|220px]]\n|didascalia=''{{subst:PAGENAME}}''\n|<!-- CLASSIFICAZIONE -->\n|dominio=\n|regno=[[Animalia]]\n|sottoregno=\n|superphylum=\n|phylum=[[Chordata]]\n|subphylum=[[Vertebrata]]\n|infraphylum=\n|microphylum=\n|nanophylum=\n|superclasse=\n|classe=[[Aves]]\n|sottoclasse=\n|infraclasse=\n|superordine=\n|ordine=[[Passeriformes]]\n|sottordine=\n|infraordine=\n|superfamiglia=\n|famiglia=[[Emberizidae]]\n|sottofamiglia=\n|genere=[[%s]]\n|specie='''%s'''\n<!--NOMENCLATURA BINOMIALE-->\n|binome={{subst:PAGENAME}}\n|biautore=%s\n|bidata=%s\n}}\nIl '''{{subst:lc:%s}}''' (''{{subst:PAGENAME}}'',%s %s) è un [[Aves|uccello]] della [[famiglia (tassonomia)|famiglia]] degli [[Emberizidae]], [[Endemismo|endemico]] dell' [[Ecuador]].\n\n\n== Descrizione==\n\n== Bibliografia ==\n*{{IUCN}}\n==Altri progetti==\n{{interprogetto|wikispecies}}\n\n==Collegamenti esterni==\n*{{avibase}}\n[[Categoria:Specie (uccelli)]]\n\n[[en:{{subst:PAGENAME}}]]" % (nomecomune,genere,specie,biautore,bidata,nomecomune,biautore,bidata)
print testopagina.encode('utf-8')
choice = wikipedia.inputChoice(u'Creo la pagina?', [u'Yes', u'No'], [u'y', u'N'], u'N')
if choice in [u'Y', u'y']:
wikipedia.setAction(u'Stub uccelli generato da [[Utente:Brodobot|Brodobot]].')
i.put(testopagina)
redirect=wikipedia.Page(wikipedia.getSite(),nomecomune)
if not redirect.exists() or redirect.isRedirectPage():
redirect.put(u'#REDIRECT [[%s]]\n[[Categoria:Nomi comuni specifici (uccelli)]]' % i.title())
wikipedia.stopme()
Creazione di pagine tramite avibase
modificaScopo di questo bot è di creare pagine ricavandole dal sito [1]
pagefromavibase.py
# -*- coding: utf-8 -*-
"""
Questo bot visualizza il nome di tutte le pagine reindirizzate con questi metodi:
-file - Lavora su tutte le pagine in date da un file locale.
Legge ogni [[wiki link]] e usa quei articoli.
L'argomento passato come "-file:filename".
-cat - Lavora in tutte le pagine di una specifica categoria.
L'argomento passato come "-cat:categoryname".
-page - Edita solamente una specifica pagina.
L'argomento passato come "-page:pagetitle". Si può passare l'argomento più volte, una per ogni pagina
-ref - Lavora su tutte le pagine linkate verso una certa pagina - come ad esempio [[Speciale:PuntanoQui]].
L'argomento passato come "-ref:referredpagetitle".
-filelinks - Lavora su tutte le pagine che linkano su un certo file.
L'argomento passato come "-filelinks:ImageName".
-links - Lavora su tutte le pagine linkate all'interno di una certa pagina.
L'argomento passato come "-links:linkingpagetitle".
-start - Lavora su tutte le pagine di wiki. partendo da una pagina data. Scegliere
"-start:!" per partire dalla prima pagina.
-namespace:n - Numero dei namespace su cui lavorare. Il parametro può essere usato più volte.
Lavora in combinazione con tutti gli altri parametri, eccetto il parametro -start.
Se si vuole per esempio iterare tutte le pagine a partire da User:M, usare -start:User:M.
"""
#
# (C) Brodo, 2007
#
# Distributed under the terms of the GPL license.
#
from __future__ import generators
import wikipedia, pagegenerators
import re, urllib2, sys
# Imports predefined replacements tasks from fixes.py
from fixes import fixes
def main():
gen=None
# Which namespaces should be processed?
# default to [] which means all namespaces will be processed
namespaces = []
PageTitles = []
genFactory = pagegenerators.GeneratorFactory()
for arg in wikipedia.handleArgs():
if arg.startswith('-namespace:'):
namespaces.append(int(arg[11:]))
elif arg.startswith('-page'):
if len(arg) == 5:
PageTitles.append(wikipedia.input(u'Which page do you want to change?'))
else:
PageTitles.append(arg[6:])
else:
generator = genFactory.handleArg(arg)
if generator:
gen = generator
if PageTitles:
pages = [wikipedia.Page(wikipedia.getSite(), PageTitle) for PageTitle in PageTitles]
gen = iter(pages)
if not gen:
# syntax error, show help text from the top of this file
wikipedia.showHelp()
wikipedia.stopme()
sys.exit()
if namespaces != []:
gen = pagegenerators.NamespaceFilterPageGenerator(gen, namespaces)
generator = pagegenerators.PreloadingGenerator(gen, pageNumber = 500)
#page=wikipedia.input(u'Inserisci la pagina da modificare:')
for page in generator:
try:
action ='';
txt = ''
if page.exists() or page.title().find(u'Immagine') != -1 or page.title().find(u'Image') != -1: #or i.title().find(u'idae') != -1:
continue
txt=paginafromavibase(txt,page)
#if txt == '':
# continue
find=re.compile(u'{{-start-}}(.*){{-stop-}}(.*)',re.DOTALL)
nomecomune=re.search(find, txt).group(1)
wikipedia.output(nomecomune.encode('utf-8'))
testopagina=re.search(find, txt).group(2)
print testopagina.encode('utf-8')
#newtxt=fixAltriprogetti(txt,page);
#if txt != newtxt:
# action =action + 'fix /* Altri progetti */ - '
choice = wikipedia.inputChoice(u'Creo la pagina?', [u'Yes', u'No'], [u'y', u'N'], u'N')
if choice in [u'Y', u'y']:
wikipedia.setAction(u'Stub uccelli generato da [[Utente:Brodobot|Brodobot]].')
page.put(testopagina)
redirect=wikipedia.Page(wikipedia.getSite(),nomecomune)
if not redirect.exists() or redirect.isRedirectPage():
wikipedia.setAction(u'')
redirect.put(u'#REDIRECT [[%s]]\n[[Categoria:Nomi comuni specifici (uccelli)]]' % page.title())
except wikipedia.NoPage:
wikipedia.output(u'Page %s not found' % page.title());
wikipedia.stopme();
except wikipedia.IsRedirectPage:
wikipedia.output(u'Page %s is a redirect' % page.title());
def paginafromavibase(txt,page):
avibasepage=getpage(page.title())
if avibasepage == 0:
return ''
avicomp=re.compile('<b>Ordine:</b><br> (.*)<br>')
ordine=getre(avicomp,avibasepage)
if ordine == 0:
return ''
avicomp=re.compile('<b>Famiglia:</b><br> (.*)<br>')
famiglia=getre(avicomp,avibasepage)
if famiglia == 0:
return ''
avicomp=re.compile('\(<I>%s</I>\) (.*), (.*)</td>' % page.title())
biautore=getre(avicomp,avibasepage)
if biautore == 0:
return ''
avicomp=re.compile('\(<I>%s</I>\) \%s\, (.*)</td>' % (page.title(),biautore))
bidata=getre(avicomp,avibasepage)
if bidata== 0:
bidata = ''
avicomp=re.compile('<br><b>Italiano: </b>(.*?)<br><b>')
nomecomunelist=getre(avicomp,avibasepage)
if nomecomunelist == 0:
nomecomunelist = ''
nomecomunelist = re.sub(u',',u'<br />',nomecomunelist)
avicomp=re.compile('<b>Italiano:</b><br> (.*)<br>')
nomecomune=getre(avicomp,avibasepage)
if nomecomune == 0:
return ''
articolo=getarticolo(nomecomune)
scient = re.search(u'(.+?) (.+)', page.title())
genere = scient.group(1)
specie = genere[0] + u'. ' + scient.group(2)
print u'\nNome comune: %s %s\nNome scientifico: %s\nOrdine: %s\nFamiglia: %s\nAutore: %s\nData: %s\nNomi comuni: %s\n' % (articolo, nomecomune, page.title(),famiglia,ordine, biautore, bidata, nomecomunelist)
txt = u"{{-start-}}%s{{-stop-}}{{s|uccelli}}\n{{Tassobox\n|colore=pink\n|nome=%s\n|statocons=\n|immagine=[[Immagine:Missing.png|220px]]\n|didascalia=''{{subst:PAGENAME}}''\n|<!-- CLASSIFICAZIONE -->\n|dominio=\n|regno=[[Animalia]]\n|sottoregno=\n|superphylum=\n|phylum=[[Chordata]]\n|subphylum=[[Vertebrata]]\n|infraphylum=\n|microphylum=\n|nanophylum=\n|superclasse=\n|classe=[[Aves]]\n|sottoclasse=\n|infraclasse=\n|superordine=\n|ordine=[[%s]]\n|sottordine=\n|infraordine=\n|superfamiglia=\n|famiglia=[[%s]]\n|sottofamiglia=\n|genere=[[%s]]\n|specie='''%s'''\n<!--NOMENCLATURA BINOMIALE-->\n|binome={{subst:PAGENAME}}\n|biautore=%s\n|bidata=%s\n<!-- ALTRO -->\n|nomicomuni=%s}}\n%s '''{{subst:lc:%s}}''' (''{{subst:PAGENAME}}'', %s %s) è un [[Aves|uccello]] della [[famiglia (tassonomia)|famiglia]] [[%s]].\n== Descrizione==\n\n== Bibliografia ==\n*{{IUCN}}\n==Altri progetti==\n{{interprogetto|wikispecies}}\n\n==Collegamenti esterni==\n*{{avibase}}\n[[Categoria:Specie (uccelli)]]\n\n[[en:{{subst:PAGENAME}}]]" % (nomecomune,nomecomune,ordine,famiglia,genere,specie,biautore,bidata,nomecomunelist,articolo,nomecomune,biautore,bidata,famiglia)
#print txt.encode('utf-8')
return txt
def getpage(titolo):
urlpage = re.search(u'(.*) (.*)',titolo).group(1) + '+' + re.search(u'(.*) (.*)',titolo).group(2)
try:
avibasepage = urllib2.urlopen('http://www.bsc-eoc.org/avibase/avibase.jsp?pg=search&qstr=%s&qlang=' % urlpage).read()
except AttributeError:
wikipedia.output(u'error in avibase per %s' % titolo);
return 0
try:
aviregex = re.compile(u'\'summary\',\'..\', *\'(.*)\', \'(.*)\'\)\">%s</a></td>' % titolo)
avibaseid = re.search(aviregex,avibasepage).group(1)
avibasets = re.search(aviregex,avibasepage).group(2)
except AttributeError:
wikipedia.output(u'%s non trovato sul sito avibase' % titolo);
return 0
try:
avibasepage = urllib2.urlopen('http://www.bsc-eoc.org/avibase/avibase.jsp?pg=summary&lang=IT&id=%s&ts=%s' % (avibaseid,avibasets)).read()
return avibasepage
except AttributeError:
wikipedia.output(u'error in avibase per %s' % titolo);
return 0
return 0
def getarticolo(nomecomune):
first = re.search(u'(.).*',nomecomune).group(1)
if (first == 'A') or (first == 'E') or (first == 'I') or (first == 'O') or (first == 'U'):
return 'L\''
else:
choice = wikipedia.inputChoice(u'Qual\'è il sesso del nome "%s"' % nomecomune, [u'Male', u'Female'], [u'M', u'F'])
if choice in [u'M', u'm']:
return 'Il'
else:
return 'La'
return ''
def getre(avicomp,avibasepage):
try:
string=re.search(avicomp,avibasepage).group(1)
return string
except AttributeError:
wikipedia.output(u'error in avibase per la ricerca');
return 0
if __name__ == "__main__":
try:
main()
# except KeyboardInterrupt:
# wikipedia.stopme()
# sys.exit()
finally:
wikipedia.stopme()
sys.exit()