Usuari:PereBot/robot categories petites
Aparença
Programa per buscar categories amb menys de 5 elements. Produeix la llista que hi ha a Usuari:PereBot/categories petites / Usuari:Rebot/categories petites
Versió 1 Pere
[modifica]Versió actual del programa que fa servir l'API:
# -*- coding: utf-8 -*-
import sys
sys.path.append('C:\core')
import re,urllib,urllib2,json
import pywikibot
# El programa comença aquí
site=pywikibot.getSite('ca')
paginforme=pywikibot.Page(site,u"Usuari:PereBot/categories petites")
textvell=paginforme.get()
informe=[u"",u""]
informeno=[u"",u""]
pagweb0="http://ca.wikipedia.org/w/api.php?action=query&list=allcategories&format=json&acmin=1&acmax=4&aclimit=500&acprop=size&rawcontinue="
pagweb=pagweb0
textcont=""
while textcont<>"acabat":
print pagweb
pllista=urllib.urlopen(pagweb)
print "obert"
pbrut=pllista.read()
jpag=json.loads(pbrut)
#print jpag
lcats=jpag["query"]["allcategories"]
#print lcats
for dcat in lcats:
nom=dcat["*"]
mida=dcat["size"]
pags=dcat["pages"]
subcs=dcat["subcats"]
if subcs==0 or (subcs==1 and pags==0):
linia=u"# [[:categoria:{}]]: {} subcategories i {} pàgines\n".format(nom,subcs,pags)
titcat=u"Categoria:"+nom
if re.search(u"Categoria:(Articles|Pàgines|Usuaris|Anècdotes|Viquipedistes|Infotaules|Plantilles|Demandes|Esborranys|Imatges|Logotips|Manteniment|Moure a|Peticions|Preguntes|Preses de decisió|VP Grècia|Categories|Esborrar|Drets d'autor a revisar|Manteniment|.*(que necessiten|sense registre fòssil))",titcat):
informeno[subcs]=informeno[subcs]+linia
else:
informe[subcs]=informe[subcs]+linia
print linia
contbrut=re.findall('"accontinue":".*?"',pbrut)
if len(contbrut)>0:
#print contbrut
contbrut=contbrut[0]
contbrut=contbrut.replace('"accontinue":"','')
contbrut=contbrut[:-1]
print u"continuació:",contbrut
textcont="&accontinue="+contbrut
pagweb=pagweb0+textcont
else:
textcont="acabat"
print u"S'ha acabat"
textinforme=u"\n==Categories petites==\n\n"
textinforme=textinforme+u"===Categories enciclopèdiques===\n\n"
textinforme=textinforme+u"====Sense subcategoria====\n\n"+informe[0]
textinforme=textinforme+u"====Amb subcategoria====\n\n"+informe[1]
textinforme=textinforme+u"===Categories no enciclopèdiques===\n\n"
textinforme=textinforme+u"====Sense subcategoria====\n\n"+informeno[0]
textinforme=textinforme+u"====Amb subcategoria====\n\n"+informeno[1]
textinforme=textinforme+u"\n--~~~~\n\n\n"
paginforme.put(textvell+textinforme,u"Robot buscant categories petites")
pywikibot.stopme()
Versió 2 Pere
[modifica]Programa que feia servir abans per fer el mateix llegint directament les categories. És més complicat i moltíssim més lent (a més ara no em funciona perquè el generador AllCategories dóna error), tot i que en no dependre tant d'un query de l'API es controla molt millor què està fent el programa:
# -*- coding: utf-8 -*-
# Programa per buscar categories curtes.
# Exclou les categories no enciclopèdies filtrant-ne els noms.
# Detecta com a categories curtes les que tenen menys de cinc articles i cap subcategoria.
# Fa servir un fitxer amb un diccionari amb l'estructura de les categories que
# ha llegit, per estalviar feina els següents cops.
# PER FER: Buscar les categories sense cap article i amb una única subcategoria.
import sys
sys.path.append('C:\pywikipedia')
import wikipedia,catlib,urllib2,re,pickle,pagegenerators
#La teca comença aquí
def main():
categories=pagegenerators.CategoryGenerator(pagegenerators.AllpagesPageGenerator(site=site,namespace=14,start=u"!")) #En general, treure paràmetre start
fitx=open("categories.txt",'r') #El primer cop que executeu el programa, si no teniu el fitxer categories.txt, substituiu les 3 línies per bibliocats={}.
bibliocats=pickle.load(fitx) # Diccionari amb la llista de totes les subcategories d'una categoria (només un nivell)
fitx.close()
print u"Diccionari carregat amb",len(bibliocats),u"categories llegides"
bibliocatsk=bibliocats.keys()
paginforme=wikipedia.Page(site,u"Usuari:PereBot/categories petites")
textvell=paginforme.get()
informe=u"" # u"Edicions de prova\n\n" #Canviar per u"" excepte per proves
comptador=0 #Categories mirades
comptablocm=1800 #Categories mirades des de darrera guardada
comptabloct=0 #Categories trobades des de darrera guardada
comptapetites=0 #Categories trobades
textinici=u""
for categoria in categories:
comptador += 1
comptablocm += 1
tesubs=False
provada=False
# print categoria
titolcat=categoria.title()
if textinici==u"":
textinici=u"Primera categoria revisada [[:{}]]\n\n".format(titolcat)
if re.search(ur"(?:Categoria:(?:Articles|Pàgines|Usuaris|Anècdotes|Viquipedistes|Infotaules|Plantilles|Demandes|Esborranys|Imatges|Logotips|Manteniment de|Peticions|Preguntes|VP Grècia)|que necessiten|sense registre fòssil)",titolcat):
print comptador,categoria,"ignorada per ser aparentment de manteniment"
else:
if categoria in bibliocatsk:
wikipedia.output(u"{} {} llegida. Té {}categories.".format(comptador,categoria,len(bibliocats[categoria])))
else:
wikipedia.output(u"{} {} desconeguda".format(comptador,categoria))
subcats=categoria.subcategoriesList(recurse=False)
bibliocats[categoria]=subcats
provada=True
wikipedia.output(u"{} {} llegida. Té {} categories.".format(comptador,categoria,len(bibliocats[categoria])))
if len(bibliocats[categoria])==0:
tesubs=False
else:
tesubs=True
if tesubs==False:
articles=categoria.articlesList(recurse=False)
try:
wikipedia.output(u"{} {} té {} articles.".format(comptador,categoria,len(articles)))
except UnicodeEncodeError:
wikipedia.output(u"Té alguna subcategoria no imprimible")
if len(articles)<5: #Posar 5 excepte per proves
if provada==False:
subcats=categoria.subcategoriesList(recurse=False)
bibliocats[categoria]=subcats
wikipedia.output(u"{} Comprovant per si de cas {}. Té {} categories".format(comptador,categoria,len(bibliocats[categoria])))
if len(bibliocats[categoria])==0:
wikipedia.output(u"{} CATEGORIA PETITA".format(categoria))
informe+=u"* [[:{}]] té {}articles\n".format(titolcat,len(articles))
comptabloct+=1
comptapetites+=1
if (comptablocm+100*comptabloct)>2000:
comptabloct=0
comptablocm=0
textfinal=u"Trobades {} categories petites de {} categories revisades\n\n".format(comptapetites,comptador)
textfinal+=u"Darrera categoria revisada [[:{}]]\n\n".format(titolcat)
try:
textnou=u"{}\n\n==Categories petites==\n{}{}{}Tasca en curs. --~~~~\n".format(textvell,textinici,informe,textfinal)
paginforme.put(textnou,u"Categories petites")
except wikipedia.EditConflict:
textvell=paginforme.get(force=True)
textnou=u"{}\n\n==Categories petites==\n{}{}Tasca en curs. --~~~~\n".format(textvell,textinici,informe)
paginforme.put(textnou,u"Categories petites")
fitx=open("categories.txt",'w')
pickle.dump(bibliocats,fitx)
fitx.close()
# if comptador>30: #Per proves
# break #Per proves
textfinal=u"Trobades {:} categories petites de {:} categories revisades\n\n".format(comptapetites,comptador)
textfinal+=u"Darrera categoria revisada [[:{}]]\n\n".format(titolcat)
try:
textnou=u"{}\n\n==Categories petites==\n{}{}{}Tasca acabada. --~~~~\n".format(textvell,textinici,informe,textfinal)
paginforme.put(textnou,u"Categories petites")
except wikipedia.EditConflict:
textvell=paginforme.get(force=True)
textnou=u"{}\n\n==Categories petites==\n{}{}Tasca acabada. --~~~~\n".format(textvell,textinici,informe)
paginforme.put(textnou,u"Categories petites")
fitx=open("categories.txt",'w')
pickle.dump(bibliocats,fitx)
fitx.close()
return
#El programa comença aquí
if __name__ == "__main__":
try:
site=wikipedia.getSite('ca')
main()
finally:
wikipedia.stopme()
Versió Pau
[modifica]2022, Python3
# -*- coding: utf-8 -*-
import sys
import re,urllib,urllib.request,json
import pywikibot
# El programa comença aquí
site=pywikibot.Site('ca')
paginforme=pywikibot.Page(site,u"Usuari:Rebot/categories petites")
textvell=paginforme.get()
informe=[u"",u""]
informeno=[u"",u""]
pagweb0="http://ca.wikipedia.org/w/api.php?action=query&list=allcategories&format=json&acmin=1&acmax=4&aclimit=500&acprop=size&rawcontinue="
pagweb=pagweb0
textcont=""
while textcont!="acabat":
print (pagweb)
pllista=urllib.request.urlopen(pagweb)
print ("obert")
pbrut=pllista.read()
jpag=json.loads(pbrut.decode('utf-8'))
#print jpag
lcats=jpag["query"]["allcategories"]
#print lcats
for dcat in lcats:
nom=dcat["*"]
mida=dcat["size"]
pags=dcat["pages"]
subcs=dcat["subcats"]
if subcs==0 or (subcs==1 and pags==0):
linia=u"# [[:categoria:{}]]: {} subcategories i {} pàgines\n".format(nom,subcs,pags)
titcat=u"Categoria:"+nom
if re.search(u"Categoria:(Articles|Pàgines|Usuaris|Anècdotes|Viquipedistes|Infotaules|Plantilles|Demandes|Esborranys|Imatges|Logotips|Manteniment|Moure a|Peticions|Preguntes|Preses de decisió|VP Grècia|Categories|Esborrar|Drets d'autor a revisar|Manteniment|.*(que necessiten|sense registre fòssil))",titcat):
informeno[subcs]=informeno[subcs]+linia
else:
informe[subcs]=informe[subcs]+linia
print (linia)
contbrut=re.findall('"accontinue":".*?"',pbrut.decode('utf-8'))
if len(contbrut)>0:
#print contbrut
contbrut=contbrut[0]
contbrut=contbrut.replace('"accontinue":"','')
contbrut=contbrut[:-1]
print (u"continuació:",contbrut)
textcont="&accontinue="+contbrut
pagweb=pagweb0+textcont
else:
textcont="acabat"
print (u"S'ha acabat")
textinforme=u"\n==Categories petites==\n\n"
textinforme=textinforme+u"===Categories enciclopèdiques===\n\n"
textinforme=textinforme+u"====Sense subcategoria====\n\n"+informe[0]
textinforme=textinforme+u"====Amb subcategoria====\n\n"+informe[1]
textinforme=textinforme+u"===Categories no enciclopèdiques===\n\n"
textinforme=textinforme+u"====Sense subcategoria====\n\n"+informeno[0]
textinforme=textinforme+u"====Amb subcategoria====\n\n"+informeno[1]
textinforme=textinforme+u"\n--~~~~\n\n\n"
paginforme.put(textvell+textinforme,u"Robot buscant categories petites")
pywikibot.stopme()