1. !/usr/bin/python
  2. -*- 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'

A questo titolo corrispondono più voci, di seguito elencate.
Questa è una pagina di disambiguazione; se sei giunto qui cliccando un collegamento, puoi tornare indietro e correggerlo, indirizzandolo direttamente alla voce giusta. Vedi anche le voci che iniziano con o contengono il titolo.

',u'

A questo titolo corrispondono più voci, di seguito elencate.
Questa è una pagina di disambiguazione; se sei giunto qui cliccando un collegamento, puoi tornare indietro e correggerlo, indirizzandolo direttamente alla voce giusta. Vedi anche le voci che iniziano con o contengono il titolo.

',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 = '

Il template {{Coord}} ha riscontrato degli errori (istruzioni):
  • coordinate non specificate

'

                       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()