#!/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'---Anteprima it.wiki------')
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 coordinate', u'{{geobox coordinate', u'{{Geobox Coordinate', u'{{geobox Coordinate', 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']
preTemplateEn = 70
postTemplateEn = 30
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
global codaen_context
codaYN = []
codatext = []
choice = 'n'
l = len(codaAsk)
for i in range(0,l):
text = codaAsk[i].get()
codatext.append(text)
stringatemp = u'Candidato (%d): %s' %((i+1),codaAsk[i].title())
lunghezzatemp = len(stringatemp)
wikipedia.output(stringatemp,colors=[12]*lunghezzatemp)
stringatemp = u' %s' %(codaen_titlepage[i])
lunghezzatemp = len(stringatemp)
wikipedia.output(stringatemp,colors=[12]*lunghezzatemp)
displayPage(text)
colortemp = [None] * preTemplateEn + [12] * len(codaen[i]) + [None] * postTemplateEn
wikipedia.output(u'---Contesto en.wiki-------')
wikipedia.output(codaen_context[i],colors=colortemp)
wikipedia.output(u'--------------------------')
stringatemp = u'Inserisco: %s' % codait[i]
colortemp = [None] * 11 + [12] * len(codait[i])
wikipedia.output(stringatemp, colors=colortemp)
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_titlepage)]
del codaen_context[0:len(codaen_context)]
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 = []
codaen_context = []
conta = 0
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
auto = False;
print auto;
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 dm'
pages_with_template = pagegenerators.ReferringPageGenerator(wikipedia.Page(sen, sen.template_namespace() + ':' + templateName ), onlyTemplateInclusion = True)
regex_coord_titolo = re.compile('\{\{ ?[Cc]oor([ _]dm) ?\|(.*?)\|?\}\}')
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(u'Salto: %s' %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
search = regex_coord_titolo.search(text_en)
if search:
string_coord_en = text_en[search.start():search.end()]
string_coord_it = '{{Coord|' + search.group(2) + '|display=title}}'
wikipedia.setAction(u'Aggiungo [[Template:Coord]] dalla pagina %s' % page_en.aslink() )
if not acceptall:
if ( auto and (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_context.append(text_en[search.start()-preTemplateEn:search.end()+postTemplateEn])
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()