Utente:Alebot/Scripts
Aspetto
- script ad hoc per gestione delle chiamate a {{QuickbarCity}}
#!/usr/bin/python
# -*- coding: utf-8 -*-
import wikipedia
from scripts import *
'{{}}'
def quickbarCity(ref=None):
sito=wikipedia.Site("it","wikivoyage")
if ref==None:
ref=references("Template:QuickbarCity",sito)
for i in ref:
if i.namespace()==0:
testo=i.get().replace("[[immagine:","[[Immagine:")\
.replace("[[Image:","[[Immagine:")\
.replace("[[image:","[[Immagine:")\
.replace("[[File:","[[Immagine:")\
.replace("[[file:","[[Immagine:")
oldTemplate=find_stringa(testo,"{{QuickbarCity","}}",1,"{{")
d,l=parseTemplate(testo,"QuickbarCity")
if not "image" in d:
print "template irregolare:",i.title()
continue
if "[[Immagine:" in d["image"]:
linkOld=find_stringa(d["image"],"[[Immagine:","]]",1)
link=linkOld[11:-2].split("|")
immagine=link.pop(0)
descrizione=None
for j in link:
if (not j in "left;right;center") and (not j.endswith("px")):
descrizione=j
break
if not descrizione==None:
immagine+="{{!}}"+descrizione
d["image"]=immagine+"\n"
#print i.title(),d["image"].replace(linkOld,immagine)
newTemplate=rewrite(d,l)
testo=testo.replace(oldTemplate,newTemplate)
i.put(testo)
return
- da scripts.py, scripts generali per la gestione di chiamate a template tipo Infobox
# esegue il parsing di un template con tutti parametri nominali.
# Restituisce un dizionario e una lista
def parseTemplate(testo,template):
template=template[0:1].upper()+template[1:]
testo=testo.replace("{{"+template,"{{"+template[0:1].upper()+template[1:])\
.replace("{{"+template[0:1].lower()+template[1:],"{{"+template[0:1].upper()+template[1:])
templateOld=find_stringa(testo,"{{"+template,"}}",1,"{{")
template=templateOld[2:-2]
lista=[]
l1=produci_lista(template,"{{","}}",1,"{{")
l2=produci_lista(template,"[[","]]",1,"[[")
l3=produci_lista(template,"\n{|","|}",1,"\n{|")
n=0
l=l1+l2+l3
d={}
for i in l:
template=template.replace(i,"###el"+str(n)+"###",1)
n+=1
template=template.split("|")
for i in range(len(template)):
r=range(len(l))
r.reverse()
for j in r:
template[i]=template[i].replace("###el"+str(j)+"###",l[j])
l=[]
for i in range(len(template)):
x=template[i].split("=",1)
if len(x)==2:
d[x[0].strip(" \n\t\r")]=x[1]
l.append(x[0].strip(" \n\t\r"))
else:
d["templateName"]=x[0].strip(" \n\t\r")
l[0:1]=["templateName"]
return d,l
#riscrive il template da dizionario e lista parseTemplate.
def rewrite(d,l):
testo="{{"+d["templateName"]+"\n"
for i in l[1:]:
testo+=" | "+i+" = "+d[i]
testo+="}}\n"
return testo
def references(template,sito):
#def getReferences(self, follow_redirects=True, withTemplateInclusion=True,
# onlyTemplateInclusion=False, redirectsOnly=False, internal = False)
generatore=wikipedia.Page(sito,template).getReferences(onlyTemplateInclusion=True)
return generatore
- find_stringa() e produci_lista()
- ricerca di stringhe per stringa iniziale e finale, resistente a elementi annidati (purchè "bilanciati")
# Nuova versione, gestisce i tag annidati; x e' la parte "aspecifica" del
# tag di apertura (es: {{ cercando {{Intestazione| )
def find_stringa(stringa,idi,idf,dc=0,x=None,side="left"):
if side=="right":
idip=stringa.rfind(idi)
else:
idip=stringa.find(idi)
idfp=stringa.find(idf,idip+len(idi))+len(idf)
if idip>-1 and idfp>0:
if x!=None:
while stringa[idip:idfp].count(x)>stringa[idip:idfp].count(idf):
if stringa[idip:idfp].count(x)>stringa[idip:idfp].count(idf):
idfp=stringa.find(idf,idfp)+len(idf)
if dc==0:
vvalore=stringa[idip+len(idi):idfp-len(idf)]
else:
vvalore=stringa[idip:idfp]
else:
vvalore=""
return vvalore
def produci_lista(testo,idi,idf,dc=1,inizio=None):
t=testo[:]
lista=[]
while not find_stringa(t,idi,idf,1,inizio)=="":
el=find_stringa(t,idi,idf,1,inizio)
t=t.replace(el,"",1)
if dc==0:
el=find_stringa(el,idi,idf,0,inizio)
lista.append(el)
return lista