Usuari:PereBot/robot fa mapes cobertura viquipèdies
Aparença
Els mapes generats amb aquest programa són a Especial:Cerca_per_prefix/User:PereBot/cobertura
# -*- coding: utf-8 -*-
# Genera un mapa amb el nombre d'items de Wikidata amb enllaç a cawiki
# sobre el total d'items de Wikidata.
import sys
sys.path.append('C:\core')
import pywikibot
from pywikibot import pagegenerators
from pywikibot.compat import catlib
import re,urllib,urllib2,math,time
# Actualitza informe
def putinforme(pag,afegit,sumari,signa=False,afegeix=True):
if pag.exists():
textinforme=paginforme.get()+u"\n"+afegit
else:
textinforme=afegit
if not afegeix:
textinforme=afegit
if signa:
textinforme=textinforme+u"\n--~~~~\n"
paginforme.put(textinforme,sumari)
return
# Obre una pàgina web i la llegeix
# L'argument és l'adreça (una cadena de text)
def llegeix(adreca):
pllista=urllib.urlopen(adreca)
contingut=pllista.read()
return contingut
# Tria la imatge del punt segons el nombre d'articles
def figura(cat,total):
if total==0:
fig=u"White pog.svg"
elif cat>0.95*total:
fig=u"Green 008000 pog.svg"
elif cat>0.75*total:
fig=u"Green 00ff00 pog.svg"
elif cat>0.5*total:
fig=u"Yellow ffff00 pog.svg"
elif cat>0.25*total:
fig=u"Orange pog.svg"
elif cat>0.05*total:
fig=u"Red ff0000 pog.svg"
else:
fig=u"Dark Red 800000 pog.svg"
return fig
# Dades de la Plantilla:Location map Earth
def mapaterra():
name=u"Terra"
top = 90
bottom = -90
left = -180
right = 180
return name,top,bottom,left,right
# Dades de la Plantilla:Location map Zimbabwe
def mapazimbabwe():
name=u"Zimbabwe"
top = -15.2
bottom = -22.8
left = 24.8
right = 33.6
return name,top,bottom,left,right
# Dades de la Plantilla:Location map Argentina
def mapaargentina():
name=u"Argentina"
top = -21.0
bottom = -56.5
left = -76.5
right = -52.5
return name,top,bottom,left,right
# Dades de la Plantilla:Location map Brasil
def mapabrasil():
name=u"Brasil"
top = 6.0
bottom = -34.0
left = -74.5
right = -32.0
return name,top,bottom,left,right
# Dades de la Plantilla:Location map Uruguai
def mapauruguai():
name=u"Uruguai"
top = -29.86
bottom = -35.19
left = -58.71
right = -52.89
return name,top,bottom,left,right
# Dades de la Plantilla:Location map Corea del Sud
def mapaxina():
name=u"Xina"
top = 54
bottom = 18
left = 73
right = 135
return name,top,bottom,left,right
# Dades de la Plantilla:Location map Corea del Sud
def mapacoreasud():
name=u"Corea del Sud"
top = 38.9
bottom = 33.0
left = 124.5
right = 132.0
return name,top,bottom,left,right
# Dades de la Plantilla:Location map Ucraïna
def mapaucraina():
name=u"Ucraïna"
top = 52.7
bottom = 44.1
left = 21.5
right = 40.7
return name,top,bottom,left,right
# Dades de la Plantilla:Location map Síria
def mapasiria():
name=u"Síria"
top=37.6
bottom=32.0
left=34.9
right=42.7
return name,top,bottom,left,right
# Dades de la Plantilla:Location map Croàcia
def mapacroacia():
name = u"Croàcia"
top=46.8
bottom=42.1
left=13.1
right=19.9
return name,top,bottom,left,right
# Dades de la Plantilla:Location map Bèlgica
def mapabelgica():
name = u"Bèlgica"
top=51.8
bottom=49.2
left=2.2
right=6.9
return name,top,bottom,left,right
# Dades de la Plantilla:Location map Noruega
def mapanoruega():
name = u"Noruega"
top=71.5
bottom=57.6
left=4.1
right=31.6
return name,top,bottom,left,right
# Dades de la Plantilla:Location map Àustria
def mapaaustria():
name=u"Àustria"
top = 49.2
bottom = 46.3
left = 9.4
right = 17.2
return name,top,bottom,left,right
# Dades de la Plantilla:Location map Itàlia
def mapaitalia():
name=u"Itàlia"
top = 47.4
bottom = 35.3
left = 6.2
right = 19.0
return name,top,bottom,left,right
# Dades de la Plantilla:Location map Espanya
def mapaesp():
name=u"Espanya"
top = 44.4
bottom = 34.7
left = -9.9
right = 4.8
return name,top,bottom,left,right
# Dades de la Plantilla:Location map Andalusia
def mapaandalusia():
name=u"Andalusia"
top= 38.869010
bottom= 35.716589
left=-7.640606
right=-1.551795
return name,top,bottom,left,right
# Dades de la Plantilla:Location map Bretanya
def mapabretanya():
name=u"França Bretanya"
top= 49.00
bottom= 47.20
left= -5.25
right= -0.90
return name,top,bottom,left,right
# Dades de la Plantilla:Location map Lorena
def mapalorena():
name=u"Lorena"
top = 50
bottom = 47.5
left = 4.5
right = 8
return name,top,bottom,left,right
# Dades de la Plantilla:Location map Alsàcia
def mapaalsacia():
name=u"Alsàcia"
top = 49.15
bottom = 47.35
left = 6.7
right = 8.35
return name,top,bottom,left,right
# Dades de la Plantilla:Location map Pirineus
def mapapirineus():
name = u"Pirineus"
top = 43.97
bottom = 41.05
left = -2.820
right = 3.810
return name,top,bottom,left,right
# Dades de la Plantilla:Location map Occitània
def mapaoc():
name=u"Occitània"
top = 46.9
bottom = 41.7
left = -2.7901
right = 8.5464
return name,top,bottom,left,right
# Dades de la Plantilla:Location map Euskal Herria
def mapaeuskalherria():
name=u"Euskal Herria"
top=43.584166
bottom=41.88222
left=-3.453056
right=-0.565
return name,top,bottom,left,right
# Dades de la Plantilla:Mapa de localització als Països Catalans
def mapappcc():
name=u"Països Catalans"
top=43.500000
bottom=37.220000
left=-2.480000
right=5.700000
return name,top,bottom,left,right
# Dades de la Plantilla:Mapa de localització Pirineus Orientals
def mapapirineusorientals():
name = u"Pirineus Orientals districtes"
top=42.999860
bottom=42.299861
left=1.649861
right=3.299861
return name,top,bottom,left,right
# Dades de la Plantilla:Mapa de localització Aragó
def mapaarago():
name = u"Aragó"
top= 43.055249
bottom= 39.750129
left=-2.282836
right=0.858865
return name,top,bottom,left,right
# Dades de la Plantilla:Mapa de localització Andorra
def mapaand():
name = u"Andorra relleu"
top = 42.675
bottom = 42.4
left = 1.3875
right = 1.8125
return name,top,bottom,left,right
# Dades de la Plantilla:Mapa de localització Mallorca
def mapamallorca():
name = u"Mallorca"
top= 40.218
bottom=39.012
left=2.224
right=3.671
return name,top,bottom,left,right
# Dades de la Plantilla:Mapa de localització Mallorca
def mapapalma():
name = u"Palma"
top= 39.5961
bottom=39.5563
left=2.6216
right=2.6741
return name,top,bottom,left,right
# Dades de la Plantilla:Mapa de localització Pitiüses
def mapapit():
name = u"Pitiüses"
top = 39.123
bottom = 38.636
left = 1.1527
right = 1.654444
return name,top,bottom,left,right
# Dades de la Plantilla:Mapa de localització País Valencià 2
def mapaval():
name=u"País Valencià 2"
top=40.830435
bottom=37.445000
left=-1.891800
right=1.180300
return name,top,bottom,left,right
# Dades de la Plantilla:Mapa de localització Catalunya
def mapacat():
name=u"Catalunya"
top=43.112262
bottom=40.23813
left=-0.15000
right=3.95000
return name,top,bottom,left,right
# Dades de la Plantilla:Location map Baixa Cerdanya
def mapabaixacerdanya():
name = u"Baixa Cerdanya"
top = 42.55
bottom= 42.25
left = 1.54
right = 2.0
return name,top,bottom,left,right
# Dades de la Plantilla:Location map Barcelona
def mapabcn():
name = u"Barcelona"
top =41.448
bottom =41.345
left =2.087
right =2.245
return name,top,bottom,left,right
# El programa comença aquí
nommapa,latmaxvora,latminvora,longminvora,longmaxvora=mapaand() # Poseu la funció que correspongui al mapa que vulgueu fer servir
fig={"ca":u"Nuvola Catalonia flag.svg", # Descomenteu les llengües de les viquipèdies que vulgueu considerar (més viquipèdies, més lent)
"es":u"Nuvola Spain flag escudada.svg",
"en":u"Nuvola United Kingdom flag.svg",
"fr":u"Nuvola apps klettres.png",
"it":u"Nuvola Italy flag.svg",
"de":u"Nuvola German flag.svg",
"nl":u"Nuvola Dutch flag.svg",
#"ja":u"Nuvola Japan flag.svg",
"zh":u"Nuvola Chinese flag.svg",
#"zh-classical":u"Nuvola Taiwanese flag.svg",
#"ko":u"Nuvola Korean flag.svg",
"eu":u"Nuvola Basque Country flag.svg",
#"ar":u"Green flag.svg",
#"an":u"Flag Aragón.svg",
#"ast":u"Flag of Asturias.svg",
#"pt":u"Nuvola Portuguese flag.svg",
#"gl":u"Nuvola Galician flag.svg",
"oc":u"Icon of Occitania.svg",
#"ru":u"Nuvola Russian flag.svg",
#"pl":u"Nuvola Polish flag.svg",
#"el":u"Nuvola Greek flag.svg",
#"ro":u"Nuvola apps ro flag.png",
#"br":u"Nuvola Brittany flag.svg",
#"uk":u"Nuvola Ukrainian flag.svg",
#"cs":u"Nuvola Czech flag.svg",
#"hu":u"Nuvola Hungary flag.svg",
#"sr":u"Nuvola Serbian flag.svg",
#"sh":u"Serbo-Croatian language flag.gif",
#"hr":u"Nuvola Croatian flag.svg",
#"bs":u"Nuvola Bosnian flag.svg",
#"sl":u"Nuvola Slovenian flag.svg",
#"sk":u"Nuvola Slovakian flag.svg",
#"sq":u"Nuvola Albanian flag.svg",
#"he":u"Nuvola Israeli flag.svg",
#"bg":u"Nuvola Bulgaria flag.svg",
#"hy":u"Nuvola Armenian flag.svg",
#"no":u"Nuvola Norwegian flag.svg",
#"da":u"Nuvola Danish flag.svg",
#"nn":u"Flag of Vestlandet.svg",
#"sv":u"Nuvola Swedish flag.svg",
#"fo":u"Nuvola Faroese flag.svg",
#"is":u"Nuvola Icelandic flag.svg",
#"se":u"Sami flag.svg",
#"fi":u"Nuvola Finnish flag.svg",
#"et":u"Nuvola Estonian flag.svg",
#"lv":u"Nuvola Latvian flag.svg",
#"lt":u"Nuvola Lithuanian flag.svg",
#"az":u"Nuvola Azerbaijanian flag.svg",
#"ka":u"Nuvola Georgian flag.svg",
#"tr":u"Nuvola Turkish flag.svg",
#"mk":u"Nuvola Macedonian flag.svg",
#"be":u"Nuvola Belarus flag 1995.svg",
#"lb":u"Nuvola Luxemburgish flag.svg",
#"wa":u"Flag of Wallonia.svg",
#"vls":u"West-Vlaams.JPG",
#"als":u"Houptsyte.png",
#"ga":u"Nuvola Irish flag.svg",
#"lmo":u"Flag of Lombardy.svg",
#"cy":u"Nuvola welsh flag simplified.svg",
#"fa":u"Nuvola Iranian flag.svg",
#"ku":u"Flag of Kurdistan.svg",
#"uz":u"Nuvola Uzbek flag.svg",
#"tk":u"Nuvola Turkmen flag.svg",
#"kk":u"Nuvola Kazakh flag.svg",
#"rm":u"Red ff0000 pog.svg",
#"fur":u"Friuli Flag.svg",
#"sc":u"Nuvola Sardinia flag.svg",
#"pms":u"Flag of Piedmont.svg",
#"co":u"Nuvola Corsica flag.svg",
#"crh":u"Flag of the Crimean Tatar people.svg",
#"bo":u"Flag of Tibet.svg",
#"zh-min-nan":u"Minyu.png",
#"zh-yue":u"Pukguy.png",
#"mn":u"Nuvola Mongolian flag.svg",
#"th":u"Nuvola Thai flag.svg",
#"vi":u"Nuvola Vietnamian flag.svg",
#"new":u"Nuvola Nepal flag.svg",
#"hi":u"Nuvola Indian flag.svg",
#"af":u"Nuvola South African flag.svg",
}
lleng=fig.keys()
print lleng
lleng.sort()
print lleng
nomslleng=str(lleng)
print nomslleng
fig["0"]=u"White pog.svg"
fig["="]=u"NUL logo.svg"
midamax=28
midamin=6
raditerra=6378
ample=800
ampletrama=45 # Canviar ample trama segons proporcions del mapa per no passar de 200-250 punts
puntshor=int(math.ceil(ample/ampletrama-0.5))
print "puntshor",puntshor
deltalong=(longmaxvora-longminvora)/puntshor
print "deltalong",deltalong
mitjalat=(latmaxvora+latminvora)/2
print "mitjalat",mitjalat
disthor=raditerra*math.pi*deltalong/180*math.cos(mitjalat/180*math.pi)
print "disthor",disthor
distvert=disthor*2/(3**0.5)
print "distvert",distvert
totdistvert=(latmaxvora-latminvora)*raditerra*math.pi/180
print "totdistvert",totdistvert
puntsvert=int(math.ceil(totdistvert/distvert-0.5))
print "puntsvert",puntsvert
deltalat=distvert/raditerra*180/math.pi
print "deltalat",deltalat
mitjalong=(longmaxvora+longminvora)/2
print "mitjalong",mitjalong
latinicial=mitjalat-deltalat*(puntsvert-1)/2
print "latinicial",latinicial
longinicial=mitjalong-deltalong*(puntshor-1)/2
print "longinicial",longinicial
dist=(disthor**2+(distvert/2)**2)**0.5/2
print "dist",dist
area=math.pi*dist**2
if area>2:
factmida=(midamax-midamin)/area**(1.0/3.0)
else:
factmida=(midamax-midamin)/10**(1.0/3.0)
tmapa={}
#Encapçalament mapes
llegenda=u"'''Viquipèdia amb més articles''' en un radi de {:.2f} km al voltant de cada punt (segons Wikidata)".format(dist)
llegenda=llegenda+u"<br/>Viquipèdies comparades: "+nomslleng
comtrama=u"<!-- ampletrama={} -->".format(ampletrama)
tmapar=comtrama+u"{{Location map+"+u"|{}|width={}|float=center|caption={}|places=".format(nommapa,ample,llegenda)+u"\n"
for l in lleng:
llegenda=u"'''Items de Wikidata amb enllaç a {}wiki''' / '''Total items de Wikidata''' en un radi de {:.2f} km al voltant de cada punt".format(l,dist)
llegenda=llegenda+u"<br/>Podeu convertir els valors en articles/km2 dividint per {:.2f} km2".format(area)
tmapa[l]=comtrama+u"{{Location map+|"+nommapa+u"|width={}|float=center|caption={}|places=".format(ample,llegenda)+u"\n"
#Punts mapes
for x in range(0,puntshor):
for y in range (0,puntsvert):
ymod=y-0.25+0.5*(x%2)
lon=longinicial+deltalong*x
lat=latinicial+deltalat*ymod
dirtot=u"https://wdq.wmflabs.org/api?q=around[625,{},{},{}]".format(lat,lon,dist)
numtot=len(eval(llegeix(dirtot))["items"])
#etiquetatot=u"[http://tools.wmflabs.org/wikidata-todo/autolist2.php?language=ca&project=wikipedia&category=&depth=12&wdq=around%5B625%2C{}%2C{}%2C{}%5D&mode=undefined&statementlist=&run=Run&label_contains=&label_contains_not=&chunk_size=10000 {}]".format(lat,lon,dist,numtot)
midapunt=(midamin+factmida*numtot**(1.0/3.0))
midaband=int(midapunt*1.2)
midapunt=int(midapunt)
maxa=0
wmax=u"0"
wempat=u""
nempat=0
nums={}
for l in lleng:
if numtot>0:
dirl=u"https://wdq.wmflabs.org/api?q=around[625,{},{},{}]%20AND%20link[{}wiki]".format(lat,lon,dist,l)
try:
numl=len(eval(llegeix(dirl))["items"])
except IOError:
print u"error IOError; esperant 60 segons"
time.sleep(60)
try:
numl=len(eval(llegeix(dirl))["items"])
except:
continue
except SyntaxError:
print u"error de sintaxi; esperant 60 segons"
time.sleep(60)
try:
numl=len(eval(llegeix(dirl))["items"])
except:
continue
else:
numl=0
#etiquetacat=u"[http://tools.wmflabs.org/wikidata-todo/autolist2.php?language={}&project=wikipedia&category=&depth=12&wdq=around%5B625%2C{}%2C{}%2C{}%5D%20and%20link%5B{}wiki%5D&mode=undefined&statementlist=&run=Run&label_contains=&label_contains_not=&chunk_size=10000 {}]".format(l,lat,lon,dist,l,numl)
#etiqueta=u"{}/<br/>{}".format(etiquetacat,etiquetatot)
etiqueta=u"[http://tools.wmflabs.org/autolist/autolist1.html?lang={}&q=around%5B625%2C{:.6f}%2C{:.6f}%2C{:.6f}%5D {}<br/>{}]".format(l,lat,lon,dist,numl,numtot)
imatge=figura(numl,numtot)
if numtot>0: # Per no posar els punts blancs i estalviar plantilles
tmapa[l]=tmapa[l]+u"{{Location map~|"+nommapa+u"|"+u"lat={}|long={}|position=right|marksize={}|mark={}|label={}".format(lat,lon,midapunt,imatge,etiqueta)+u"}}\n"
if numl>maxa:
maxa=numl
wmax=l
wempat=l
nempat=1
elif numl==maxa and numl>0:
wmax="="
wempat=wempat+u"<br/>"+l
nempat=nempat+1
nums[l]=numl
print u'{}/{}'.format(x,puntshor),lat,u'{}/{}'.format(y,puntsvert),lon,nums,wmax
#Punt rànquing
if numtot==0:
wempat=wmax
if wmax=="=" or wmax==u"0":
if nempat>4:
wempat="="
etiqueta=u"[http://tools.wmflabs.org/autolist/autolist1.html?lang=ca&q=around%5B625%2C{:.6f}%2C{:.6f}%2C{:.6f}%5D {}]".format(lat,lon,dist,wempat)
#etiqueta=u"[http://tools.wmflabs.org/wikidata-todo/autolist2.php?language=ca&project=wikipedia&category=&depth=12&wdq=around%5B625%2C{}%2C{}%2C{}%5D&mode=undefined&statementlist=&run=Run&label_contains=&label_contains_not=&chunk_size=10000 {}]".format(lat,lon,dist,wempat)
else:
etiqueta=u"[http://tools.wmflabs.org/autolist/autolist1.html?lang={}&q=around%5B625%2C{:.6f}%2C{:.6f}%2C{:.6f}%5D {}]".format(wmax,lat,lon,dist,wmax)
#etiqueta=u"[http://tools.wmflabs.org/wikidata-todo/autolist2.php?language={}&project=wikipedia&category=&depth=12&wdq=around%5B625%2C{}%2C{}%2C{}%5D%20and%20link%5B{}wiki%5D&mode=undefined&statementlist=&run=Run&label_contains=&label_contains_not=&chunk_size=10000 {}]".format(wmax,lat,lon,dist,wmax,wmax)
imatge=fig[wmax]
if numtot>0: # Per no posar els punts blancs i estalviar plantilles
tmapar=tmapar+u"{{Location map~|"+nommapa+u"|"+u"lat={}|long={}|position=right|marksize={}|mark={}|label={}".format(lat,lon,midaband,imatge,etiqueta)+u"}}\n"
#Tanca
tmapar=tmapar+u"}}\n"
for l in lleng:
tmapa[l]=tmapa[l]+u"}}\n"
#Puja
site=pywikibot.getSite('ca')
paginforme=pywikibot.Page(site,u"Usuari:PereBot/cobertura/{}/ranking".format(nommapa))
putinforme(paginforme,tmapar,u"Rànquing de viquipèdies",afegeix=False)
for l in lleng:
paginforme=pywikibot.Page(site,u"Usuari:PereBot/cobertura/{}/{}".format(nommapa,l))
putinforme(paginforme,tmapa[l],u"Cobertura de les viquipèdies",afegeix=False)
pywikibot.stopme()