Utente:Wisbot/import.py
- !/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'

',u'

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