Privacy Policy Cookie Policy Terms and Conditions Usuario:Chabbot/code - Wikipedia, la enciclopedia libre

Usuario:Chabbot/code

De Wikipedia, la enciclopedia libre

# -*- coding: utf-8  -*- 

#mirar [[Llave]]
#añadir wikicita

import codecs
import wikipedia
#import xmlreader
import re
import string
#import webbrowser

#regexps (añadir según aparezcan o hacer una regla mejor)

#convertir a esta gente en algo que se pueda iterar
r_externos=re.compile(ur"==\s*[eE]nlaces externos\s*==")
r_notas=re.compile(ur"==\s*[nN]otas\s*==")
r_refs=re.compile(ur"==\s*[rR]eferencias\s*==")
r_cats=re.compile(ur"\[\[[cC]ategoría:.*]]")
r_esbozo=re.compile(ur"{{[eE]sbozo")
r_miniesbozo=re.compile(ur"{{[Mm]iniesbozo")
r_aviso=re.compile(ur"{{[aA]visomédico}}")
r_desam=re.compile(ur"{{[dD]esambiguación}}")
r_el=re.compile(ur"{{EL}}")
r_enlacillo=re.compile(ur"==\s*[eE]nlace externo\s*==")

#no pasar por estos
r_forbidden=re.compile(ur"(Usuario:)|(Ayuda:)|(Wikipedia:)")

r_commons=re.compile(ur"(?:{{[cC]ommons)(\|(?P<link>[^}|]*))?(\|(?P<nombre>[^}]*))?}}\s*\n?\s*")
r_commonscat=re.compile(ur"(?:{{[cC]ommonscat)(\|(?P<link>[^}|]*))?(\|(?P<nombre>[^}]*))?}}\s*\n?\s*")
r_source=re.compile(ur"(?:{{[wW]ikisource)(\|(?P<link>[^}|]*))?(\|(?P<nombre>[^}]*))?}}\s*\n?\s*")
r_source_autor=re.compile(ur"(?:{{[wW]ikisource autor)(\|(?P<link>[^}|]*))?(\|(?P<nombre>[^}]*))?}}\s*\n?\s*")
r_source_doc=re.compile(ur"(?:{{[wW]ikisource documento histórico)(\|(?P<link>[^}|]*))?(\|(?P<nombre>[^}]*))?}}\s*\n?\s*")
r_source_obra=re.compile(ur"(?:{{[wW]ikisource obra)(\|(?P<link>[^}|]*))?(\|(?P<nombre>[^}]*))?}}\s*\n?\s*")
r_books=re.compile(ur"(?:{{[wW]ikibooks)(\|(?P<link>[^}|]*))?(\|(?P<nombre>[^}]*))?}}\s*\n?\s*")
r_quote=re.compile(ur"(?:{{[wW]ikiquote)(\|(?P<link>[^}|]*))?(\|(?P<nombre>[^}]*))?}}\s*\n?\s*")
r_dict=re.compile(ur"(?:{{[wW]iktionary)(\|(?P<link>[^}|]*))?(\|(?P<nombre>[^}]*))?}}\s*\n?\s*")
r_dictpar=re.compile(ur"(?:{{[wW]ikcionariopar)(\|(?P<link>[^}|]*))?(\|(?P<nombre>[^}]*))?}}")
r_species=re.compile(ur"(?:{{[wW]ikispecies)(\|(?P<link>[^}|]*))?(\|(?P<nombre>[^}]*))?}}\s*\n?\s*")
r_newline=re.compile(r"\s*\n\s*")


#sitios wiki
site = wikipedia.getSite()

#ficheros: la lista de artículos a revisar y un fichero de salida que contendrá los títulos de los artículos y la ipr que les toca. Los de salida son más que nada para debug.
file=codecs.open('lista', mode='rwb', errors='strict', encoding='utf-8',  buffering=1)
salida=codecs.open('salida', mode='wb', errors='strict', encoding='utf-8',  buffering=1)
nuevo_art=codecs.open('nart.wiki', mode='wb', errors='strict', encoding='utf-8',  buffering=1)

#string.capitalize pasa a minúsculas las que no son iniciales, hacemos una nueva
def capital(str):
        return string.upper(str[0])+str[1:]

#python no tiene funciones para insertar cadenas en otras cadenas??
def insert(original, new, pos):
        return original[:pos] + new + original[pos:]

#utt: resultado de la búsqueda con regexp
#prefijo: el prefijo ipr del proyecto
#str_ipr: la cadena de llamada a {{ipr... que nos estamos montando paso a paso
#articulo: el título del artículo

def iprize(utt, prefijo, str_ipr, articulo, prep=None, objeto=None):
        if utt:
                str_ipr = str_ipr + "|" + prefijo
                if utt.group("link") and capital(utt.group("link")):# != articulo:
                        str_ipr=str_ipr + u"=" + utt.group("link")
                else:
                        str_ipr=str_ipr + u"=" + articulo
                if utt.group("nombre") and capital(utt.group("nombre")):# != articulo:
                        str_ipr=str_ipr + u"|" +prefijo+"_etiqueta=" + utt.group("nombre")
                if prep != None:
                        str_ipr=str_ipr + u"|" +prefijo +u"_preposicion=" + prep
                if objeto != None:
                        str_ipr=str_ipr + u"|" +prefijo +u"_objeto=" + objeto
        return str_ipr  

#especial para wikcionario, que no tiene inicial en mayúsculas
def iprwikt(utt, str_ipr):
        str_ipr = str_ipr + "|wiktionary"
        if utt.group("link") and utt.group("link"):# != articulo:
                str_ipr=str_ipr + u"=" + utt.group("link")
        if utt.group("nombre") and utt.group("nombre"):# != articulo:
                str_ipr=str_ipr + "|wiktionary_etiqueta=" + utt.group("nombre")
        return str_ipr

#consulta si grabar o graba directamente
def consultagraba(articulo,nuevoart, consultar=None):
        ap=wikipedia.Page(wikipedia.getSite(),articulo)
        #TODO:sería estupendo ver el preview en un browser
        #print nuevoart
        if consultar != None:
                key=wikipedia.input("Grabar?")
                if key != "n":
                        ap.put(nuevoart,comment=u"+{{interproyecto}} Bot") 
        else:
                try:
                        ap.put(nuevoart,comment=u"+{{interproyecto}} Bot") 
                except wikipedia.SpamfilterError:
                        print "no posible"

#busca donde poner start de acuerdo a una regexp
def busca(utt,start):
        if utt:
                if start == -1 or start > utt.start():
                        start=utt.start()
        return start

for articulo in file:
        if articulo[0] == '#':
                continue
        #quitamos el \n
        articulo=articulo[:-1]
        
        str_ipr=u"{{interproyecto"

        page_es=wikipedia.Page(site,articulo)
        texto=page_es.get()
        
        #una pasada a ver si tiene plantillas de interproyecto. Python es un poco guarro a este respecto, pues la lista incluye poca información. ESTO RALENTIZA
        l_utt_commons   =r_commons.findall(texto)
        l_utt_commonscat=r_commonscat.findall(texto)
        l_utt_source    =r_source.findall(texto)
        l_utt_source_autor=r_source_autor.findall(texto)
        l_utt_source_doc  =r_source_doc.findall(texto)
        l_utt_source_obra =r_source_obra.findall(texto)
        l_utt_books     =r_books.findall(texto)
        l_utt_quote     =r_quote.findall(texto)
        l_utt_dict      =r_dict.findall(texto)
        l_utt_dictpar   =r_dictpar.findall(texto)
        l_utt_species   =r_species.findall(texto)

        #comprobamos que sólo haya una plantilla como máximo de cada tipo. Si hay más pasando, aplicar criterio humano
        if len(l_utt_commons)+len(l_utt_commonscat) > 1 or len(l_utt_source) >1 or len(l_utt_source_autor) >1 or len(l_utt_source_doc) >1 or len(l_utt_source_obra) >1 or len(l_utt_books) >1 or len(l_utt_quote) >1 or len(l_utt_dict) >1 or len(l_utt_dictpar) >1 or len(l_utt_species) >1:
                print "Tags múltiples, revisar manualmente"
                continue
        
        #pasadita que recoge donde están
        utt_commons     =r_commons.search(texto)
        utt_commonscat     =r_commonscat.search(texto)
        utt_source      =r_source.search(texto)
        utt_source_autor=r_source_autor.search(texto)
        utt_source_doc  =r_source_doc.search(texto)
        utt_source_obra =r_source_obra.search(texto)
        utt_books       =r_books.search(texto)
        utt_quote       =r_quote.search(texto)
        utt_dict        =r_dict.search(texto)
        utt_dictpar    =r_dictpar.search(texto)
        utt_species     =r_species.search(texto)

#       #commons es un caso especial por tener ccat
#       if utt_commons:
#               str_ipr = str_ipr + u"|c"
#               if utt_commons.group("link"):
#                       enlace=utt_commons.group("link")
#                       if capital(enlace[0:9]) == u"Category:":
#                               str_ipr = str_ipr + u"cat"
#                               enlace=enlace[9:]
#                       if capital(enlace) != articulo:
#                               str_ipr = str_ipr + u"=" + enlace
#               if utt_commons.group("nombre"):
#                       if capital(utt_commons.group("nombre")) != articulo:
#                               str_ipr = str_ipr + u"|c_etiqueta=" + utt_commons.group("nombre")
        #wikt es especial: hay que conservar la minúscula
        if utt_dict:
                str_ipr=iprwikt(utt_dict,str_ipr)
        if utt_dictpar:
                str_ipr=iprwikt(utt_dictpar,str_ipr)
        
        #wikisource es muy pejilguero
        if utt_source_autor:
                str_ipr=iprize(utt_source_autor, u"wikisource", str_ipr, articulo, u"de")
        elif utt_source_doc:
                str_ipr=iprize(utt_source_doc, u"wikisource", str_ipr, articulo, u"histórico", u"el documento" )
        elif utt_source_obra:
                str_ipr=iprize(utt_source_obra, u"wikisource", str_ipr, articulo, u"de", u"una copia")
        else:
                str_ipr=iprize(utt_source, u"wikisource", str_ipr, articulo)

        #print utt_commons

        if utt_commonscat:
                str_ipr = str_ipr + "|commons"
                if utt_commonscat.group("link"):# != articulo:
                        str_ipr=str_ipr + u"=Category:" + utt_commonscat.group("link")
                else:
                        str_ipr=str_ipr + u"=Category:" + articulo 
                if utt_commonscat.group("nombre") :# != articulo:
                        str_ipr=str_ipr + "|commons_etiqueta=" + utt_commonscat.group("nombre")
        #a poner iprs más normales
        str_ipr=iprize(utt_commons, u"commons", str_ipr, articulo)
        str_ipr=iprize(utt_books, u"wikibooks", str_ipr, articulo)
        str_ipr=iprize(utt_quote, u"wikiquote", str_ipr, articulo)
        str_ipr=iprize(utt_species, u"wikispecies", str_ipr, articulo)

        str_ipr=str_ipr+"}}"
        
        #Si hay realmente cosas que cambiar:
        if str_ipr != u"{{interproyecto}}":
                print "plantillas encontradas"        
                #borramos las plantillas (TODO: ojo con los \n)
                texto=r_commons.sub(u"",texto)
                texto=r_commonscat.sub(u"",texto)
                texto=r_source_autor.sub(u"",texto)
                texto=r_source.sub(u"",texto)
                texto=r_source_obra.sub(u"",texto)
                texto=r_source_doc.sub(u"",texto)
                texto=r_books.sub(u"",texto)
                texto=r_quote.sub(u"",texto)
                texto=r_dict.sub(u"",texto)
                texto=r_species.sub(u"",texto)
                texto=r_dictpar.sub(u"",texto)

                texto=r_enlacillo.sub("==Enlaces externos==",texto)

                #a ver dónde ponemos el huevo
                utt_enext = r_externos.search(texto)

                if utt_enext:
                        ap=wikipedia.Page(wikipedia.getSite(),articulo)
                        caso = ""
                        if texto[utt_enext.end()+1] != u"\n":
                                caso = "caso 1"
                                nuevoart=insert(texto,u"\n"+str_ipr,utt_enext.end())
                        else:
                                caso = "caso 2"
                                nuevoart=insert(texto,u"\n"+str_ipr,utt_enext.end()+1)
                        #print caso
                        #print texto[utt_enext.end()]
                        #print texto[utt_enext.end()+1]
                        consultagraba(articulo,nuevoart,None)

                else:
                        #no hay seccion enlaces externos. Trataremos de ponerla antes de las referencias, las notas, las categorías, etc. TODO: Sustituir la lista de plantillas por una regexp que busque plantillas genéricas
                #       utt_notas=r_notas.search(texto)
                #       utt_refs=r_refs.search(texto)
                        utt_esbozo=r_esbozo.search(texto)
                        utt_miniesbozo=r_miniesbozo.search(texto)
                        utt_cats=r_cats.search(texto)
                        utt_aviso=r_aviso.search(texto)
                        utt_desam=r_desam.search(texto)
                        utt_el=r_el.search(texto)

                        start=-1

                        start=busca(utt_cats, start)
                #       start=busca(utt_notas,start)
                #       start=busca(utt_refs,start)
                        start=busca(utt_esbozo,start)
                        start=busca(utt_miniesbozo,start)
                        start=busca(utt_aviso,start)
                        start=busca(utt_desam,start)
                        start=busca(utt_el,start)
                        
                        #hemos encontrado dónde poner la sección?
                        if start == -1:
                                print "El artículo ni siquiera tiene categorías, revisar manualmente"
                                continue
                        else:
                                while texto[start-1] == "\n":
                                        start=start-1
                                if start != 0:
                                        start=start+1
                                if texto[start-1] == u"\n" and texto[start-2] == u"\n":
                                        nuevoart=insert(texto,u"==Enlaces externos==\n"+str_ipr+u"\n",start)
                                else:
                                        nuevoart=insert(texto,u"\n==Enlaces externos==\n"+str_ipr+u"\n\n",start)
                                        #GRABAMOS
                                        consultagraba(articulo,nuevoart,None)

        print "hecho"
#       opera = webbrowser.get('opera')
#       opera.open("http://es.wikipedia.org/w/index.php?title="+articulo+"&diff=cur&oldid=prev",2)
        

file.close()
salida.close()
nuevo_art.close()
wikipedia.stopme()
THIS WEB:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Static Wikipedia 2008 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2007:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Static Wikipedia 2006:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu