Progetto:Bot/Programmi in Python per i bot/allinea.py: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Creata nuova pagina: <syntaxhighlight lang="python"> # -*- coding: utf-8 -*- import pywikibot as bot import re from os import listdir,system,path from pywikibot.d...
 
aggiunta funzione correggi_scriptor()
 
Riga 1:
<syntaxhighlight lang="python">
# -*- coding: utf-8 -*-
# versione 19.09.2022: aggiunta funzione correggi_scriptor()
import pywikibot as bot
import re
from os import listdir,system,path
from pywikibot.data import api
 
 
mul=bot.Site("mul","wikisource")
Line 15 ⟶ 17:
VT=u'\x0b' # vertical tab
FF=u'\x0c' # form feed
'''
Comando di esempio
allinea("Vico, Giambattista – Il diritto universale, Vol. II, 1936 – BEIC 1961223.djvu",120,132)
'''
 
 
def allinea(nomePagina):
def get_qid(pagina):
# ricava il qid dell'elemento wikidata connesso alla pagina
return pagina.data_item().id
 
def allineaGlobale(n=None):
lista="""Indice:Boccaccio, Giovanni – Opere latine minori, 1924 – BEIC 1767789.djvu 1 394
Indice:Vico, Giambattista – Le orazioni inaugurali, il De Italorum sapientia e le polemiche, 1914 – BEIC 1965567.djvu 1 332
Indice:Campanella, Tommaso – Poesie, 1915 – BEIC 1777758.djvu 1 328
Indice:Campanella, Tommaso – Lettere, 1927 – BEIC 1776819.djvu 1 468
Indice:Politici e moralisti del Seicento, 1930 – BEIC 1898115.djvu 1 324
Indice:Vico, Giambattista – Il diritto universale, Vol. I, 1936 – BEIC 1960672.djvu 1 274
Indice:Vico, Giambattista – Il diritto universale, Vol. II, 1936 – BEIC 1961223.djvu 1 332
""".split("\n")
if n!=None:
lista=lista[n:n+1]
for e in lista:
opera=e.split("\t")
opera[1]=int(opera[1])
opera[2]=int(opera[2])
allinea(opera[0], opera[1], opera[2])
return
def allineaPagine(base,ini,fin):
# base: base indice (senza namespace nè slash finale)
if not base.startswith("Pagina:"):
base="Pagina:"+base
if not base.endswith("/"):
base+="/"
for p in range(ini,fin):
nomePagina=base+str(p)
print(nomePagina)
allineaPagina(nomePagina)
return
 
def correggi_scriptor(base,ini,fin):
# base: base indice (senza namespace nè slash finale)
if not base.startswith("Pagina:"):
base="Pagina:"+base
if not base.endswith("/"):
base+="/"
for p in range(ini,fin):
nomePagina=base+str(p)
paginaLa=bot.Page(la, nomePagina)
testoOld=paginaLa.get()
testoNew=ac2wl(testoOld)
if testoNew!=testoOld:
paginaLa.put(testoNew,"replacing Scriptor links with Wl templates")
return
def allineaPagina(nomePagina):
# distingui cinque casi:
# la pagina non esiste
Line 24 ⟶ 84:
# IwpageSection secondario da precedente allineamento
# nessuni Iwpage nè IwpageSection
r1=re.compile(r'level="\d"')
r2=re.compile(r'user=".+?"')
paginaIt=bot.Page(it, nomePagina)
paginaLa=bot.Page(la, nomePagina)
if (not paginaIt.exists()) or (not paginaLa.exists()): # caso 1
caso=1
else:
header, body, footer=decomp(paginaIt.get())
h,b,f=decomp(paginaLa.get())
bh=correggi(bh)
iwpageb=find_stringacorreggi(bodyb,"{{Iwpage|la","}}",1paginaLa)
lr=str(paginaLaif paginaIt.latestRevisionexists()):
header, body, footer=decomp(paginaIt.get())
body=body.replace("{{iwpage","{{Iwpage") # normalizzazione Iwpage
iwpage=find_stringa(body,"{{Iwpage|la","}}",1)
if iwpage=="":
print("pagina da non allineare")
return
else:
header=h
footer=f
body=""
iwpage="{{Iwpage|la}}"
 
lr=str(paginaLa._revid)
level=find_stringa(h,'level="','"',0)
levelIt=find_stringa(header,'level="','"',0)
body=body.replace("{{iwpage","{{Iwpage") # normalizzazione Iwpage
# analisi casi
if "<!--{{Iwpage|la}}" in body:
Line 49 ⟶ 124:
caso=6
print(caso)
## if level!=levelIt:
 
## print("SAL di itwikisource %s discordante con il SAL di lawikisource %s" % (levelIt, level))
if caso==1:
print("AlmenoLa una delle paginepagina non esiste su la.wikisource")
return
if caso==2 or caso==3 or caso==6:
 
if not lr in paginaIt.get()body:
body="{{Allineatore|la}}<!--%s, %s, %s-->" % (iwpage,lr, level)+b
# due righe nuove: allineamento header
header=h
header=r1.sub('level="%s"' % level,header)
header=r2.sub('user="BrolloBot"', header)
print(h,header)
paginaIt.put(header+body+footer, "Allineamento Iwpage")
else:
print("Pagina ", nomePagina, " già allineata")
if caso==4:
Line 103 ⟶ 188:
return section
 
def decomp(testo): # decompone il testo nsPagina in header, body, footer
header=testo[0:testo.find("</noinclude>")+len("</noinclude>")]
footer=testo[testo.rfind("<noinclude"):]
Line 109 ⟶ 194:
return (header,body,footer)
def correggi(testo,paginaLa): # corregge il testo sorgente in caso di codice incompatibile
testo=testo.replace("{{Indent|2}}[[scriptor:",":[[Scriptor:")
## if "[[Scriptor:" in testo:
## testo=ac2wl(testo)
## paginaLa.put(testo,"Replacing Scriptor: link with Wl template")
testo=testo.replace("{{Indent|2}}","::")\
.replace("{{Rh","{{RigaIntestazione")\
.replace("{{rh","{{RigaIntestazione")
 
return testo
 
def ac2wl(testo):
testo=testo.replace("[[scriptor", "[[Scriptor")
lista=produci_lista(testo, "[[Scriptor","]]",1)
for i in range(len(lista)):
try:
scriptor=[find_stringa(lista[i],"[[","|",0), find_stringa(lista[i],"|","]]",0)]
qid=get_qid(bot.Page(la,scriptor[0]))
wl="{{Wl|%s|%s}}" % (qid,scriptor[1])
print(lista[i], wl)
testo=testo.replace(lista[i], wl)
except:
print(lista[i]+" non risolto")
return testo
 
def allinea(base, ini, fin):
if base.startswith("Indice:"):
base=base.replace("Indice:","")
if not base.startswith("Pagina:"):
base="Pagina:"+base
 
if not base.endswith("/"):
base+="/"
for i in range(ini,fin):
allineaPagina((base+"%d") % i)
return
 
def iwpage_it(base, ini, fin):
# crea pagine Iwpage|it in la.wikisource
header='<noinclude><pagequality level="0" user="BrolloBot" /></noinclude>'
for p in range(ini, fin):
pageIt=bot.Page(it, "Pagina:"+base+"/"+str(p))
pageLa=bot.Page(la, "Pagina:"+base+"/"+str(p))
if pageIt.exists() and not pageLa.exists():
testoIt=pageIt.get()
print(pageIt.title())
t=decomp(testoIt)
if not "wpage|la" in testoIt: # and not 'level="0"' in testoIt:
## print(pageIt.title())
## t=decomp(testoIt)
#print(t[1])
pageLa.put(header+"{{Iwpage|it}}"+'<noinclude></noinclude>', "Applico Iwpage")
return
 
def iwpage_la(base, ini, fin):
# crea pagine Iwpage|la in it.wikisource
header='<noinclude><pagequality level="0" user="BrolloBot" /></noinclude>'
for p in range(ini, fin):
pageIt=bot.Page(it, "Pagina:"+base+"/"+str(p))
pageLa=bot.Page(la, "Pagina:"+base+"/"+str(p))
if pageLa.exists() and not pageIt.exists():
testoLa=pageLa.get()
print(pageLa.title())
t=decomp(testoLa)
pageIt.put(header+"{{Iwpage|la}}"+'<noinclude></noinclude>', "Applico Iwpage")
return
 
def move_to_la(base, ini, fin,sal=None,iwpage=True, rewrite=False):
# copia pagine da it.wikisource a la.wikisource e le sostituisce opzionalmente con
# Iwpage|la
h0='<noinclude><pagequality level="0" user="BrolloBot" /></noinclude>'
for p in range(ini, fin):
pageIt=bot.Page(it, "Pagina:"+base+"/"+str(p))
pageLa=bot.Page(la, "Pagina:"+base+"/"+str(p))
if pageIt.exists():# and not pageLa.exists():
testoIt=pageIt.get()
print(pageIt.title())
header,body,footer=decomp(testoIt)
user=find_stringa(header,'user="','"', 1)
oldSal=find_stringa(header,'level="','"', 1)
h=header.replace(user,'user="BrolloBot"')
if sal != None:
h=h.replace(oldSal,'level="%s"' % sal)
h=h.replace("RigaIntestazione","Rh")
print(h)
if not "wpage|la" in testoIt: # and not 'level="0"' in testoIt:
if rewrite:
if pageLa.exists():
pageLa.put(h+body+footer)
 
else:
pageLa.put(body)
if iwpage:
testoIt=h+"{{Iwpage|la}}"+footer
pageIt.put(testoIt)
return
 
</syntaxhighlight>