Usuari:PereBot/robot puja commonscat a Wikidata
Aparença
# -*- coding: utf-8 -*-
# Programa per preparar l'escript per pujar a Wikidata
# el paràmetre commonscat de les categories.
# Les instruccions les imprimeix a la pantalla per copiar-les i enganxar-les
# al Quickstatements.
import sys
sys.path.append('C:\core')
import pywikibot
from pywikibot import pagegenerators
from pywikibot.compat import catlib
import re,operator
def plant(tit):
return pywikibot.Page(site,u"Plantilla:{}".format(tit))
#El programa comença aquí
refresca=True #True perquè refresqui els articles que calgui
site=pywikibot.getSite('ca')
sitecommons=pywikibot.getSite('commons','commons')
miracats=False #True per categories, False per articles
if miracats:
nomcat=u"Categories sense enllaç commonscat a Wikidata"
cat=catlib.Category(site,nomcat)
arts=cat.subcategoriesList(recurse=False)
else:
nomcat=u"Pàgines sense enllaç commonscat a Wikidata"
cat=catlib.Category(site,u"Pàgines sense enllaç commonscat a Wikidata")
arts=cat.articlesList(recurse=False)
resultat=u""
informetit=u"==Articles que no s'ha pogut pujar el paràmetre commonscat a Wikidata==\n\n"
informenowd=u"===Articles sense item a Wikidata===\n\n"
informepar=u"===Paràmetre apunta a categoria inexistent a Commons===\n\n"
informenopar=u"===Paràmetre per defecte apunta a categoria inexistent a Commons===\n\n"
artsqueda=arts
pccat=plant(u"Commonscat")
while len(artsqueda)>0:
if len(artsqueda)>50:
artslot=artsqueda[:50]
artsqueda=artsqueda[50:]
else:
artslot=artsqueda
artsqueda=[]
dicclot={}
diccinv={}
llistalot=[]
diccitem={}
diccp31={}
diccdef={}
for pag in pagegenerators.PreloadingGenerator(artslot):#[:25] per proves
# Comença la part de buscar el paràmetre a la pàgina
print pag.title()
if pag.namespace() in [1,2,3,5,7,9,11,13,15,17]:
continue
text=pag.get()
ccat=u""
if pccat in pag.templates():
trobats=re.findall(u"\{\{ ?[Cc]ommons ?cat ?\|(.*?)\}\}",text)
print u"Trobats:",trobats,len(trobats)
if len(trobats)==1:
ccat=trobats[0]
print u"paràmetre:",ccat
diccdef[pag]=False
elif len(trobats)==0:
trobaplant=re.findall(u"(\{\{ ?[Cc]ommons ?cat.*?\}\})",text)
print u"El que hi ha:",trobaplant
if re.search(u"(\{\{ ?[Cc]ommons ?cat ?\}\})",text):
ccat=pag.title().replace(u"Categoria:",u"")
print u"paràmetre per defecte:",ccat
diccdef[pag]=True
else:
print u"excés de plantilles Commonscat"
continue
if u"|" in ccat:
trossos=re.split(u"\|",ccat)
#print trossos
ccat=trossos[0]
print u"ccat amb |; queda",ccat
ccat=ccat.replace(u"Category:",u"").strip()
if len(ccat)<1:
print u"massa curt:",ccat
continue
#Comença la part de mirar si hi ha la propietat a Wikidata
try:
pagdata=pywikibot.ItemPage.fromPage(pag)
cont=pagdata.get()
#print cont
except pywikibot.NoPage:
print u"No hi ha pàgina a Wikidata"
informenowd=informenowd+u"# [[:{}]]\n".format(pag.title())
continue
qitem=pagdata.title()
print u"id de Wikidata:",qitem
diccitem[pag]=qitem
hihaccatdata=False
hihap31=False
for prop in cont["claims"]:
#print u"PROP:",prop
if prop=="P373":
print u"ja hi ha commonscat"
hihaccatdata=True
if prop=="P31":
print u"ja hi ha p31 (instància de)"
hihap31=True
if hihaccatdata==True:
if refresca==True:
try:
text=pag.get()
pag.put(text,u"bot refrescant la pàgina")
except pywikibot.InvalidTitle:
print u"títol no vàlid"
continue
try:
catcommons=catlib.Category(sitecommons,ccat)
except ValueError:
continue
except pywikibot.InvalidTitle:
print u"títol invàlid"
continue
diccinv[catcommons]=pag
llistalot.append(catcommons)
dicclot[pag]=ccat
diccp31[pag]=hihap31
else:
print u"No plantilla"
#Comença la part de comprovar que les categories existeixen a Commons
for catc in pagegenerators.PreloadingGenerator(llistalot):
pag=diccinv[catc]
try:
textcommons=catc.get()
print catc,u"carregada amb èxit"
except pywikibot.NoPage:
print catc,u"no existeix"
if diccdef[pag]==True:
informenopar=informenopar+u"# [[:{}]]\n".format(pag.title())
else:
informepar=informepar+u"# [[:{}]] {}\n".format(pag.title(),catc.title())
continue
#Comença la part d'escriure el resultat
ccat=dicclot[pag]
qitem=diccitem[pag]
linia=u'{}\tP373\t"{}"\tS143\tQ199693'.format(qitem,ccat)#commonscat
print linia
resultat=resultat+u"\n"+linia
if diccp31[pag]==False and miracats==True:
linia=u'{}\tP31\tQ4167836\tS143\tQ199693'.format(qitem)#és instància de categoria
print linia
resultat=resultat+u"\n"+linia
print u"Resultat fins ara:"
print resultat
informe=informetit+informenowd+informepar+informenopar+u"\n\n--~~~~\n"
print u"Informe:"
print informe
print u"Acabat"
paginforme=pywikibot.Page(site,u"Usuari:PereBot/"+nomcat)
paginforme.put(informe,u"Pàgines que no s'ha pogut pujar el paràmetre Commonscat a Wikidata")
pywikibot.stopme()