• Licencia: GPL
  • Autor: emijrp
from __future__ import generators
import sys, re
import wikipedia, pagegenerators,catlib, config
import thread, time

for category in [u'Astronomía', u'Astrometría', u'Mecánica celeste', u'Biología', u'Evolución', u'Zoología', u'Física', u'Geología', u'Edad Media', u'Informática', u'Bases de datos', u'Lenguajes de programación', u'Programación', u'Algoritmos', u'Seguridad informática', u'Software', u'Literatura de Francia', u'Escritores de Francia', u'Literatura de Italia', u'Escritores de Italia', u'Mitología griega', u'Mitología romana', u'Tecnología', u'Fotografía', u'Mercadotenia', u'Monedas', u'Sistemas operativos', u'Política', u'Empresas multinacionales', u'Geografía', u'Cine', u'Geometría', u'Educación']:
	analizadas=0
	rojos=0
	azules=0
	enlaces=0
	listaMencionados=[]
	listaRojos=[]
	listaAzules=[]

	cat=catlib.Category(wikipedia.Site("es", "wikipedia"), u"Category:%s" % category)
	pagegenerator = pagegenerators.CategorizedPageGenerator(cat, False)

	for page in pagegenerator:
		try:
		 if page.isRedirectPage():
				wikipedia.output( u"==== %s ====\nRedireccion" % page.title())
		 else:
				analizadas+=1
				wtitle=page.title()
				#wtext=page.get()
				
				listaEnlaces=page.linkedPages()
				
				#wikipedia.output(u"----------------------------------\n%s enlaza con %s artículos" % (wtitle,len(listaEnlaces)))
				for i in listaEnlaces:
					title=i.title()
					if title not in listaMencionados and i.namespace()==0:
						listaMencionados.append(title)
						enlaces+=1
		except:
		 pass

	wikipedia.output(u"Enlaces [%s]" % str(enlaces))

	cont=len(listaMencionados)
	ini=0
	fin=0
	num=250

	while fin!=cont:
		if cont-fin>num:
			ini=fin
			fin+=num
		else:
			ini=fin
			fin+=cont-fin

		pages = [wikipedia.Page(wikipedia.Site("es", "wikipedia"), PageTitle) for PageTitle in listaMencionados[ini:fin]]
		gen = iter(pages)
		preloadingGen = pagegenerators.PreloadingGenerator(gen, pageNumber = num)

		for page in preloadingGen:
			cont-=1
			title=page.title()
			if re.search(ur"\'|\:|\[|\#|https?\:\/\/", title):
				continue
			
			if page.exists():
				azules+=1
				listaAzules.append(title)
				#wikipedia.output(u"[%s] EXISTE" % title)
			else:
				rojos+=1
				listaRojos.append(title)
				#wikipedia.output(u"[%s] FALTA" % title)


	salida=u"{{Usuario:Emijrp/Artículos que faltan/Cabecera}}\n\n"
	listaRojos.sort()
	tope=300
	for i in listaRojos:
		if tope>0:
			salida+=u"#[[%s]] {{User:Emijrp/b|%s|%s}}\n" % (i, re.sub(ur" ", ur"_", i), re.sub(ur" ", ur"+", i))
			tope-=1

	wikipedia.output(u"AQF [%s]" % str(len(listaRojos)))
	wiii=wikipedia.Page(wikipedia.Site("es", "wikipedia"), u"User:Emijrp/Artículos que faltan/%s" % category)
	wiii.put(salida, u"BOT - Actualizando lista")
	time.sleep(300)