#!/usr/bin/python
# -*- coding: utf-8 -*-
from __future__ import generators
import login
import wikipedia, pagegenerators, catlib, config
import sys
import re
def displayPage(text):
wikipedia.output(u'--------------------------')
wikipedia.output(text[:300])
wikipedia.output(u'--------------------------')
return
def findPattern(text, patterns):
for p in patterns:
if text.find(p)!=-1:
wikipedia.output(u'Trovato pattern: %s' %p)
return True
return False
patterns_no = [u'{{Comune',u'{{comune', u'{{Template:Comune', u'{{Template:comune', u'{{Geobox', u'{{geobox', u'{{Città', u'{{città', u'Municipalità', u'{{Aeroporto',u'{{Municipi','{{Infobox Azienda','{{S|aziende',u'{{Template:Città',u'{{disambigua}}',u'{{Disambigua}}',u'{{Frazione',u'{{Template:Frazione',u'{{frazione',u'{{Template:frazione','{{Squadra calcistica',u'#REDIRECT',u'{{Passo',u'{{Bundesland tedesco']
def findNo(text_it):
return findPattern(text_it,patterns_no)
patterns_coor_it = [u'{{Coord', u'{{coord']
def findCoord(text_it):
return findPattern(text_it,patterns_coor_it)
patterns_yes_text = [u'è un comune',u'è una città',u'è una municipalità',u'è un fiume',u'è un lago', u'è una provincia', u'è una regione', u'è un villaggio', u'è una frazione', u'è il capoluogo', u'è la capitale', u'è una cittadina', u'è un paese']
def findYesText(text_it):
return findPattern(text_it,patterns_yes_text)
def change(page,stringa,text=''):
global conta
if text=='':
text = page.get()
try:
page.put(stringa + '\n' + text )
except wikipedia.EditConflict:
wikipedia.output(u'Skipping %s because of edit conflict' % (page.title()))
except wikipedia.SpamfilterError, url:
wikipedia.output(u'Cannot change %s because of blacklist entry %s' %(page.title(),url))
conta = conta + 1
def svuotaCoda():
global codaAsk
global acceptall
global codait
global codaen
global codaen_titlepage
codaYN = []
codatext = []
choice = 'n'
l = len(codaAsk)
for i in range(0,l):
text = codaAsk[i].get()
codatext.append(text)
wikipedia.output(u'Candidato (%d): %s' %((i+1),codaAsk[i].title()))
displayPage(text)
choice = wikipedia.inputChoice(u'Do you want to accept these changes?', ['Yes', 'No', 'All'], ['y', 'N', 'a'], 'N')
codaYN.append(choice)
for i in range(0,l):
wikipedia.setAction(u'Aggiungo [[Template:Coord]] dalla pagina %s' %codaen_titlepage[i] )
if codaYN[i] in ['a', 'A']:
acceptall = True
if acceptall or codaYN[i] in ['y', 'Y']:
change(codaAsk[i], codait[i], codatext[i])
if codaYN[i] in ['n', 'N']:
wikipedia.output(u'Non hai accettato %s' %codaen_titlepage[i])
saveNoChanged(codaAsk[i])
del codaAsk[0:len(codaAsk)]
del codait[0:len(codait)]
del codaen[0:len(codaen)]
del codaen_titlepage[0:len(codaen)]
scrivistat()
def scrivistat():
global conta
f = file('numero_d.dat','w')
stringa = '%d' %conta
f.write(stringa)
f.close()
def leggistat():
global conta
f = file('numero_d.dat','r')
stringa = f.read()
conta = int(stringa)
f.close()
def saveLast(last):
f = file('last','w')
f.write((last + u'\n').encode('utf8'))
f.close()
wikipedia.output(u'Salvato ultimo')
def saveNoChanged(page):
f = file('Nochanged.dat','a')
f.write((page.aslink() + u'\n').encode('utf8'))
f.close()
try:
start = []
test = False
acceptall = False
codait = []
codaen = []
codaen_titlepage=[]
for arg in wikipedia.handleArgs():
if arg.startswith("-test"):
test = True
if arg.startswith("-start:"):
start = arg[7:]
if start:
start = (start);
else:
start = "!"
print start
lenMax = 20
sen=wikipedia.Site('en')
sit=wikipedia.Site('it')
login.LoginManager('la tua password', False, sit)
#template_coor_en = wikipedia.Page(sen,'Template:Coord')
#text_template_coor_en = template_coor_en.get()
templateName = 'Coor title d'
#templateName = 'Infobox_Bridge'
pages_with_template = pagegenerators.ReferringPageGenerator(wikipedia.Page(sen, sen.template_namespace() + ':' + templateName ), onlyTemplateInclusion = True)
regex_coord_titolo = re.compile('\{\{ ?[Cc]oor( title d) ?\|(.*?)\|?\}\}')
patterns_title = [u'{{Coord']
patterns_coord = [u'{{Coord', u'{{coord']
patterns_yes = [u'castello', u'Castello', u'museo', u'Museo', u'contea', u'Contea', u'tomba', u'Tomba', u'palazzo', u'Palazzo', u'università', u'Università', u'Abbazia', u'abbazia', u'Voivodato', u'Gallery', u'gallery', u'Monastero', u'Chiesa', u'Cattedrale', u'Teatro', u'Parco', u'Mare', u'Mar', u'Battaglia', u'Campo', u'Giardini', u'park', u'Park', u'Stadium', u'Basilica', u'Stato', u'Hall', u'Hall',u'Canale',u'Torre',u'Theatre',u'Golfo', u'Stretto', u'College', u'Center', u'Mausoleo',u'University',u'Monte',u'Deserto',u'stato', u'teatro', u'Club', u'teatro',u'Rocca',u'Centre',u'Studios',u'Ghiacciaio',u'provincia',u'tempio',u'battaglia',u'Grattacielo',u'Circuito',u'Penisola',u'Isola',u'Lago',u'Santuario',u'Miniere',u'Stadio',u'Falls',u'Arco',u'Cascate',u'Telescopio',u'Ponte',u'Fontana',u'Villa',u'Street',u'Grotta',u'Baia',u'Bridge',u'Tower',u'Towers',u'Hills',u'fiume',u'Diga',u'Piazza',u'Laguna',u'Biblioteca',u'City',u'Padiglione',u'Giardino',u'Mura',u'Borsa',u'Grotte',u'Capo',u'Colonna',u'Reggia',u'Foro',u'Tempio',u'Carcere',u'Piramide',u'Autodromo',u'Osservatorio',u'Ghetto',u'Building',u'Island',u'Duomo',u'Museum',u'Tunnel',u'Piramidi',u'Residenza',u'Offensiva',u'Isole',u'Hôtel',u'Notre Dame',u'Universität',u'Oracolo',u'(dipartimento)',u'Cappella',u'Passo',u'Monti',u'Theater',u'Fortezza',u'Colle',u'Porta',u'Alpi',u'Provincia',u'Valle',u'Cantone',u'cantone',u'Arcipelago',u'Val',u'regione',u'distretto',u'isola']
leggistat()
if start!='!':
for page_en in pages_with_template:
wikipedia.output(page_en.title())
if page_en.title() == start:
break
wikipedia.output(u'Parto')
codaAsk = []
for page_en in pages_with_template:
if page_en.namespace()!=0:
wikipedia.output(u'Pagina non nel namespace principale')
continue
interwiki_list = page_en.interwiki()
for page_it in interwiki_list:
if page_it.site()==sit:
abort = False;
wikipedia.output(u' Candidato: ')
wikipedia.output(u'%s' % page_en.aslink(),colors=[13]*len(page_en.aslink()))
wikipedia.output(u' italiano: ');
wikipedia.output(u'%s' % page_it.aslink(),colors=[13]*len(page_it.aslink()))
try:
text_it = page_it.get()
if not page_it.canBeEdited():
wikipedia.output(u'Skipping locked page %s' % page_it.title())
continue
except wikipedia.NoPage:
wikipedia.output(u'Page %s not found' % page_it.title())
continue
except wikipedia.IsRedirectPage:
wikipedia.output(u'Seguo il redirect')
page_it = wikipedia.Page(sit,page_it.getRedirectTarget())
text_it = page_it.get()
if findCoord(text_it):
abort = True
if findNo(text_it):
abort = True
if abort==False:
try:
text_en = page_en.get()
except wikipedia.NoPage:
wikipedia.output(u'Page %s not found' % page_en.title())
continue
if regex_coord_titolo.search(text_en):
string_coord_en = text_en[regex_coord_titolo.search(text_en).start():regex_coord_titolo.search(text_en).end()]
string_coord_it = '{{Coord|' + regex_coord_titolo.search(text_en).group(2) + '|display=title}}'
wikipedia.setAction(u'Aggiungo [[Template:Coord]] dalla pagina %s' % page_en.aslink() )
if not acceptall:
if ( findPattern(page_it.title(),patterns_yes) or findYesText(text_it) ):
wikipedia.output(u'Cambio automatico',colors=[12]*17)
wikipedia.output(u'Stringa originale: %s' %string_coord_en)
wikipedia.output(u'Stringa nuova: %s' %string_coord_it,colors=[14]*(15+len(string_coord_it)))
wikipedia.setAction(u'Aggiungo [[Template:Coord]] dalla pagina %s' % page_en.aslink() )
change(page_it,string_coord_it,text_it)
else:
wikipedia.output(u'Accodo (%d)' %(len(codaAsk)+1))
codaAsk.append(page_it)
codait.append(string_coord_it)
codaen.append(string_coord_en)
codaen_titlepage.append(page_en.aslink())
if len(codaAsk) == lenMax:
svuotaCoda()
else:
wikipedia.output(u'PROBLEMA: TEMPLATE NON TROVATO SULLA en')
break
finally:
svuotaCoda()
saveLast(page_en.title())
wikipedia.stopme()