Viquipèdia:Viquitrobada 2009/Taller de bots/Bot que tradueix enllaços interns
Aparença
# -*- coding:utf-8 -*-
u'''
Bot per traduir enllaços interns d'un article emprant interwikis
Cal crear primer la pàgina copiant l'article a la viquipèdia en català
sense traduir res.
El Bot cerca els enllaços interns, llegeix els articles a la viquipèdia
de l'idioma original, si els troba hi cerca la interwiki cap al català
i si en té substituex l'enllaç intern original per l'enllaç cap al article
català
'''
#Carrega mòduls
import re
import wikipedia
#Demana nom de la pàgina en català i idioma d'origen
pagina_a_traduir = wikipedia.input(u"Pàgina a traduïr?")
idioma = wikipedia.input(u"Idioma?")
#llegeix la pàgina a arreglar que està a: Usuari:Jrgoma/Laboratori
pagina = wikipedia.Page( wikipedia.getSite(), pagina_a_traduir)
text = pagina.get()
nou_text = text
#Prepara expressions regulars
'''p és una expressió regular per trobar enllaços interns comença per dos claudators,
segueix per una cadena de qualsevol caracter sense sense : per evitar agafar imatges,
categories i interwikis i acaba amb dos claudators es posa el ? per evitar que empalmi dos
enllaços interns diferents'''
#Trobar tots els elnllaços interns
ER_interns = re.compile( r'\[\[([^|:]+?)(?:\|[^:\]]+)??\]\]' )
interns=ER_interns.findall(text)
ER_iw_catala = re.compile( r'\[\[ca:([^\]]+?)\]\]' )
#Intenta traduir cada un dels enllaços
for intern in interns:
titol=intern.group(1)
page = wikipedia.Page(wikipedia.getSite(idioma), titol)
#Si la pàgina existeix, obtenim el contingut
if not page.exists():
# L'enllaç en l'idioma original no existeix
wikipedia.output(u"Pàgina %s no existeix; se salta." % page.aslink())
continue
else:
#cerquem l'enllaç interlingüístic en català.
text_orig = page.get(get_redirect = True)
iw_catala = RE_iw_catala.search(text_orig)
nou_text = nou_text.replace("[["+intern, "[["+iw_catala) #ERROR GREU! Ho explique a la discussió
#Aquesta seria una alternativa, que varem vore al taller.
#else:
# interwikis = page.interwiki()
# for iw in interwikis:
# if iw.site().language() == "ca":
# nou_text = nou_text.replace("[["+intern, "[["+iw.title())
# break
#Desa la pàgina modificada
pagina.put(nou_text, u'bot traduint automàticament enllaços interns')
#Atura el bot
wikipedia.stopme()