Usuari:PereBot/robot llista GEC
Aparença
Programes que comparen els títols dels articles de la Viquipèdia i de l'Enciclopèdia Catalana enllaçats d'un mateix element de Wikidata. L'objectiu principal és trobar els articles mal enllaçats. La llista és a Usuari:PereBot/manteniment Wikidata/Gran Enciclopèdia Catalana.
La versió ràpida fa servir diferents consultes (incloent una als resultats anteriors obtinguts amb la versió lenta). La versió lenta llegeix un a un els elements de Wikidata i els articles de l'Enciclopèdia per obtenir els títols, i en general més molt menys recomanable (triga una pila d'hores en comptes de molt pocs minuts).
Versió ràpida
[modifica]# -*- coding: utf-8 -*-
import sys
sys.path.append('C:\compat')
sys.path.append('C:\compat\userinterfaces')
import catlib,pagegenerators,re,urllib,urllib2,json,wikipedia
# El programa comença aquí
cawiki=wikipedia.getSite('ca')
site=cawiki
# Llegeix relació idwikidata-idgec
consulta="https://wdq.wmflabs.org/api?q=CLAIM[1296]%20and%20LINK[cawiki]&props=1296"
pcons=urllib.urlopen(consulta)
print "obert"
tcons=pcons.read()
print "llegit"
jcons=json.loads(tcons)
idgecs={}
for el in jcons["props"]["1296"]:
idgecs[el[0]]=el[2]
#print el[0],el[2]
#print idgecs
# Llegeix relació idwikidata-títolcawiki
comptabloc=0
comptador=0
numarts=len(jcons["items"])
sqids=""
titcawiki={}
for idw in jcons["items"]:#[:1000]: #Anul·lar amb [] o [:500]: per proves
comptabloc=comptabloc+1
comptador=comptador+1
sqids=sqids+"|Q{}".format(idw)
if comptabloc>49 or comptador==numarts:
sqids=sqids[1:]
print sqids
consulta="http://www.wikidata.org/w/api.php?action=wbgetentities&format=json&ids={}&sites=cawiki&props=sitelinks&languages=ca&sitefilter=cawiki".format(sqids)
pcons=urllib.urlopen(consulta)
print "obert"
tcons=pcons.read()
print "llegit"
jtits=json.loads(tcons)
#print jtits
for item in jtits["entities"].keys():
idwd=int(item[1:])
try:
titca=jtits["entities"][item]["sitelinks"]["cawiki"]["title"]
except KeyError:
print item,u"no té interviqui"
titca="sense article a cawiki"
print comptador,u"/",numarts,idwd,titca
titcawiki[idwd]=titca
comptabloc=0
sqids=""
#print titcawiki
# Llegeix relació idgec-títolgec
print u"buscant arxiugec"
arxiugec=wikipedia.Page(cawiki,u"Usuari:PereBot/manteniment Wikidata/Gran Enciclopèdia Catalana/arxiu1")
textpag=arxiugec.get()
troba=re.findall(u"\[http://www\.enciclopedia\.cat/EC-GEC-([0-9]*?)\.xml (.*?)\]",textpag)
#print troba
print u"llegit arxiugec"
titgecs={}
for parell in troba:
titgecs[parell[0]]=parell[1]
#print titgecs
print u"trobats titgecs"
# Comença a comparar
paginforme=wikipedia.Page(site,u"Usuari:PereBot/manteniment Wikidata/Gran Enciclopèdia Catalana")
text0=paginforme.get()
capinforme=u"\n==Viquipèdia i Gran Enciclopèdia Catalana==\n\n"
informedif=u"===Noms diferents===\n\n"
informeiguals=u"===Noms iguals===\n\n"
informepart=u"===Noms amb partícules diferents===\n\n"
informeerrors=u"===Errors i articles no trobats===\n\n"
comptador=0
comptabloc=80
primer=True
saltar=0 #Per saltar-se els primers
for idwd in idgecs.keys()[saltar:]:
if primer==True:
primer=False
if saltar>0:
capinforme=capinforme.replace("==\n\n"," (continuació)==\n\n")
comptador=comptador+1
comptabloc=comptabloc+1
titdata=u"Q{}".format(idwd)
try:
titca=titcawiki[idwd]
except KeyError:
titca=u"sense enllaç cawiki"
try:
idgec=idgecs[idwd]
except KeyError:
idgec=u"sense indentificador gec"
try:
titgec=titgecs[idgec]
except KeyError:
titgec=u"títol gec desconegut"
if idgec==u"sense indentificador gec":
titgec=idgec
else:
#Busquem el títol a la GEC si no el sabem
urlgec="http://www.enciclopedia.cat/EC-GEC-{}.xml".format(idgec)
print comptador,u"buscant",titca,u"a",urlgec
try:
pgec=urllib.urlopen(urlgec)
except IOError:
print "Error IO en obrir",urlgec
pgec=u"Error o títol no determinat"
#print "obert"
if pgec==u"Error o títol no determinat":
titgec=pgec
else:
tgec=pgec.read()
try:
titgec=re.findall(u'<meta content="(.*)" about',tgec)[0]
except IndexError:
titgec=u"Error o títol no determinat"
print type(titgec)
titgec=unicode(titgec,'utf-8')
titgecs[idgec]=titgec
print titca,idgec,titgec
#print type(titca),type(idgec),type(titgec)
stitca=titca #titca.encode('utf-8')
stitcacomp=re.sub(u" \(.*\)",u"",titca) #.encode('utf-8')
#print comptador,titca,titgec
#print comptador,stitca,titgec
print comptador,u"wp:{}, gec:{}".format(titca,titgec)
iguals=(stitcacomp.lower()==titgec.lower().replace(u"’",u"'"))
urlgec="http://www.enciclopedia.cat/EC-GEC-{}.xml".format(idgec)
linia=u"# '''[[{}]]''': [{} {}]; ''[[d:{}]]''\n".format(stitca,urlgec,titgec,titdata)
if iguals:
informeiguals=informeiguals+linia
elif titgec==u"Error o títol no determinat" or titgec==u"sense indentificador gec" or titgec==u"Pàgina no disponible":
informeerrors=informeerrors+linia
else:
stitcanopart=re.sub(u" . | .. ",u" ",stitcacomp)
titgecnopart=re.sub(u" . | .. ",u" ",titgec)
iguals=(stitcanopart.lower()==titgecnopart.lower().replace(u"’",u"'"))
if iguals:
informepart=informepart+linia
else:
informedif=informedif+linia
if comptabloc>4000:
informe=capinforme+informepart+informedif+informeerrors+informeiguals
paginforme.put(text0+informe,u"Comparant títols de la Viquipèdia i la Gran Enciclopèdia Catalana")
comptabloc=0
informe=capinforme+informedif+informepart+informeerrors+informeiguals
paginforme.put(text0+informe+u"--~~~~\n\n",u"Comparant títols de la Viquipèdia i la Gran Enciclopèdia Catalana")
wikipedia.stopme()
Versió lenta
[modifica]# -*- coding: utf-8 -*-
import sys
sys.path.append('C:\compat')
sys.path.append('C:\compat\userinterfaces')
import wikipedia,catlib,pagegenerators,re,urllib,urllib2,json
# El programa comença aquí
sitedata=wikipedia.getSite('wikidata','wikidata')
site=wikipedia.getSite('ca')
paginforme=wikipedia.Page(site,u"Usuari:PereBot/manteniment Wikidata/Gran Enciclopèdia Catalana")
if paginforme.exists():
text0=paginforme.get()
else:
text0=""
capinforme="\n==Viquipèdia i Gran Enciclopèdia Catalana==\n\n"
informedif="===Noms diferents===\n\n"
informeiguals="===Noms iguals===\n\n"
consulta="http://wdq.wmflabs.org/api?q=CLAIM[1296]"
pcons=urllib.urlopen(consulta)
print "obert"
tcons=pcons.read()
print "llegit"
jcons=json.loads(tcons)
comptador=0
comptabloc=80
primer=True
saltar=3825 #Per saltar-se els primers
for idd in jcons["items"][saltar:]:
if primer==True:
primer=False
if saltar>0:
capinforme=capinforme.replace("==\n\n"," (continuació)==\n\n")
comptador=comptador+1
comptabloc=comptabloc+1
print idd
titdata="Q{}".format(idd)
titca=u""
idgec=u""
try:
pagdata=wikipedia.DataPage(sitedata,title=titdata)
#print pagdata
cont=pagdata.get()
#print cont
titca=cont[u'links'][u'cawiki'][u'name']
#print titca
claims=cont[u'claims']
for claim in claims:
num=claim["m"][1]
if num==1296:
#print claim
idgec=claim["m"][3]
except IndexError:
print u"Error: paràmetre sense contingut a wikidata"
ccat=u""
except wikipedia.NoPage:
print u"Error: no hi ha pàgina a wikidata"
except wikipedia.MaxTriesExceededError:
print u"Error: Temps excedit"
except urllib2.HTTPError:
print u"Error HTTP (no deu funcionar el web)"
except KeyError:
print "KeyError: no hi deu haver interviquis o claims"
#except TypeError:
# print "TypeError: no hi deu haver interviquis"
if titca==u"":
print u"Sense iw català"
continue
elif idgec==u"":
print u"Sense enllaç GEC"
continue
urlgec="http://www.enciclopedia.cat/EC-GEC-{}.xml".format(idgec)
#print comptador,titca,urlgec
try:
pgec=urllib.urlopen(urlgec)
except IOError:
print "Error IO en obrir",urlgec
continue
#print "obert"
tgec=pgec.read()
try:
titgec=re.findall(u'<meta content="(.*)" about',tgec)[0]
except IndexError:
titgec="Error o títol no determinat"
#print type(titca),type(titgec)
#print " gec:{}".format(titgec)
stitca=titca.encode('utf-8')
stitcacomp=re.sub(u" \(.*\)",u"",titca).encode('utf-8')
print comptador,"wp:{}, gec:{}".format(stitca,titgec)
iguals=(stitcacomp.lower()==titgec.lower().replace("’","'"))
linia="# '''[[{}]]''': [{} {}]; ''[[d:{}]]''\n".format(stitca,urlgec,titgec,titdata)
if iguals:
informeiguals=informeiguals+linia
else:
informedif=informedif+linia
if comptabloc>120:
informe=capinforme+informedif+informeiguals
paginforme.put(text0+unicode(informe,'utf-8'),u"Comparant títols de la Viquipèdia i la Gran Enciclopèdia Catalana")
comptabloc=0
informe=capinforme+informedif+informeiguals
paginforme.put(text0+unicode(informe,'utf-8')+u"--~~~~\n\n",u"Comparant títols de la Viquipèdia i la Gran Enciclopèdia Catalana")
wikipedia.stopme()