Vés al contingut

Viquipèdia:Viquitrobada 2009/Taller de bots/Bot que tradueix enllaços interns

De la Viquipèdia, l'enciclopèdia lliure
# -*- 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()