Usuari:PereBot/robot centre viquipèdies
Vegeu els resultats d'aquest programa a Usuari:Pere prlpz/El centre de la Terra segons la Viquipèdia o Usuari:Pere prlpz/The center of the Earth according to Wikipedia.
# -*- coding: utf-8 -*-
# Calcula el centroide dels items de Wikidata amb coordenades i link a cada viquipèdia
import sys
sys.path.append('C:\core')
import pywikibot
#from pywikibot import pagegenerators
#from pywikibot.compat import catlib
import re,urllib,urllib2,json,time,math,pickle
def calcula(wk):
urlquerys=[]
if wk=="wikidata":
urlquerys.append(u"https://wdq.wmflabs.org/api?q=claim[625]%20and%20noclaim[376]&props=625")
urlquerys.append(u"https://wdq.wmflabs.org/api?q=claim[625]%20and%20claim[376:2]&props=625")
else:
urlquerys.append(u"https://wdq.wmflabs.org/api?q=claim[625]%20and%20link[{}]%20and%20noclaim[376]&props=625".format(wk))
urlquerys.append(u"https://wdq.wmflabs.org/api?q=claim[625]%20and%20link[{}]%20and%20claim[376:2]&props=625".format(wk))
n=0
sumax=0
sumay=0
sumaz=0
for urlquery in urlquerys:
print urlquery
pllista=urllib.urlopen(urlquery)
print "obert"
try:
pbrut=pllista.read()
print u"llegit"
jpag=json.loads(pbrut)
except:
print "error en llegir. esperant"
time.sleep(60)
try:
pbrut=pllista.read()
jpag=json.loads(pbrut)
except:
print "error en llegir. esperant"
time.sleep(100)
try:
pbrut=pllista.read()
jpag=json.loads(pbrut)
except:
print "error en llegir. esperant"
time.sleep(200)
pbrut=pllista.read()
jpag=json.loads(pbrut)
print u"longitud:",len(pbrut)
if len(pbrut)<200:
print pbrut
numdades=len(jpag["items"])
print numdades,u"punts"
for it in jpag["props"]["625"]:
n=n+1
try:
trossos=re.split(u"\|",it[2])
except TypeError:
print it[2]
print it
n=n-1
continue
lat=float(trossos[0])
lon=float(trossos[1])
if lat<-90 or lat>90 or lon<-180 or lon>180:
print u"Punt fora de rang",lat,lon
print it
n=n-1
continue
#print lat,lon
latr=math.radians(lat)#*math.pi/180
lonr=math.radians(lon)#*math.pi/180
#print latr,lonr
x=math.cos(latr)*math.cos(lonr)
y=math.sin(lonr)*math.cos(latr)
z=math.sin(latr)
sumax=sumax+x
sumay=sumay+y
sumaz=sumaz+z
#print x,y,z
if n%100000==0:#float(n)/100-int(n/100)==0:
#print float(n)/100,int(n/100)
print n,sumax,sumay,sumaz
print n,sumax,sumay,sumaz
xcen=sumax/n
ycen=sumay/n
zcen=sumaz/n
print xcen,ycen,zcen
loncenr=math.atan2(ycen,xcen)
latcenr=math.asin(zcen)
latcen=math.degrees(latcenr)
loncen=math.degrees(loncenr)
print latcen,loncen
rcen=(xcen**2+ycen**2+zcen**2)**0.5
return n,latcen,loncen,rcen
# El programa comença aquí
site=pywikibot.getSite('ca')
#sitedata=site.data_repository()
fig={"ca":u"Nuvola Catalonia flag.svg",
"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"ISO 639 Icon rm.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",
"ceb":u"ISO 639 Icon ceb.svg",
"war":u"ISO 639 Icon war.svg",
"vo":u"Volapük flag.jpg",
"eo":u"Nuvola Esperanto flag.svg",
"ms":u"Nuvola Malaysian flag.svg",
"id":u"Nuvola Indonesian flag.svg",
"min":u"Flag of Minang.svg",
"la":u"Vexilloid of the Roman Empire.svg",
"wikidata":u"Wikidata-logo-en.svg",
}
llegeix=True #True per llegir del fitxer, False per calcular de nou
completa=True #True per calcular els que no tingui, False només representa amb les dades que ja té
if llegeix==True:
fitx=open(u"centre món.txt",'r')
dicc=pickle.load(fitx)
fitx.close()
else:
dicc={}
llegenda=u"El centre de la terra segons cada viquipèdia"
tmapa=u"{{"+u"Location map+|Terra|width=1600|float=center|caption={}|places=".format(llegenda)+u"\n"
taula=u'{| class="wikitable sortable" border="1"\n|+ Centre\n|-\n'
taula=taula+u'! scope="col" | Wiki\n! scope="col" | Punts \n! scope="col" | Profunditat (km)\n ! scope="col" | Prof (% de radi)\n ! scope="col" class="unsortable" | Coordenades \n ! scope="col" | Data de les dades\n'
for llengua in sorted(fig.keys()):
if llengua=="wikidata":
wiki=llengua
else:
wiki=u"{}wiki".format(llengua)
print wiki
if wiki in dicc.keys():
print u"ja calculat",dicc[wiki]
num,latc,lonc,radc,temps=dicc[wiki]
elif completa==True:
num,latc,lonc,radc=calcula(wiki)
temps=time.time()
dicc[wiki]=(num,latc,lonc,radc,temps)
fitx=open(u"centre món.txt",'w')
pickle.dump(dicc,fitx)
fitx.close()
else:
continue
imatge=fig[llengua]
tmapa=tmapa+u"{{"+u"Location map~|Terra|lat={}|long={}|position=right|marksize=14|mark={}|label={}".format(latc,lonc,imatge,llengua)+u"}}\n"
if llengua=="wikidata":
twiki=u"[http://tools.wmflabs.org/autolist/index.php?language=ca&project=wikipedia&category=&depth=12&wdq=CLAIM%5B625%5D%20AND%20NOCLAIM%5B376%5D&pagepile=&statementlist=&run=Run&mode_manual=or&mode_cat=or&mode_wdq=not&mode_find=or&chunk_size=10000 wikidata]"
else:
twiki=u"[http://tools.wmflabs.org/autolist/index.php?language={1}&project=wikipedia&category=&depth=12&wdq=CLAIM%5B625%5D%20AND%20LINK%5B{0}%5D%20AND%20NOCLAIM%5B376%5D&pagepile=&statementlist=&run=Run&mode_manual=or&mode_cat=or&mode_wdq=not&mode_find=or&chunk_size=10000 {0}]".format(wiki,llengua)
tcoord=u"{{"+u"coord|{}|{}|display=inline|name={}".format(latc,lonc,wiki)+u"}}"
profkm=6371*(1-radc)
data=time.asctime(time.gmtime(temps))
taula=taula+u"|-\n"
taula=taula+u'|{}||{{{{ntr|{}}}}}||{{{{ntr|{:.0f}}}}}|| align="right" |{:.2%}||{}||{}\n'.format(twiki,num,profkm,(1-radc),tcoord,data)
tmapa=tmapa+u"}}\n"
taula=taula+u"|}\n"
#print dicc
text=tmapa+u"{{mapa llista coordenades}}\n"+taula
pagdesti=pywikibot.Page(site,u"Usuari:PereBot/prova")
pagdesti.put(text,u"Robot busca el centre de la Terra")
pywikibot.stopme()