Differenze tra le versioni di "Esperimenti con Tper"
Jump to navigation
Jump to search
(Creata pagina con 't.py: prossimo passaggio bus <code language=python> #!/usr/bin/env python3 import sys import urllib.request from xml.dom import minidom prefix="TperHellobus: " stop=sys.argv[...') |
|||
Riga 1: | Riga 1: | ||
t.py: prossimo passaggio bus | t.py: prossimo passaggio bus | ||
− | < | + | <source language=python> |
#!/usr/bin/env python3 | #!/usr/bin/env python3 | ||
import sys | import sys | ||
Riga 25: | Riga 25: | ||
print("Fermata: {}-{} Linea: {} Ora: {}".format(stop,description,line,time)) | print("Fermata: {}-{} Linea: {} Ora: {}".format(stop,description,line,time)) | ||
print(result) | print(result) | ||
− | </ | + | </source> |
linea.py: stampa le fermate di una linea | linea.py: stampa le fermate di una linea | ||
− | < | + | <source language=python> |
#!/usr/bin/env python3 | #!/usr/bin/env python3 | ||
import sys | import sys | ||
Riga 137: | Riga 137: | ||
draw(v,src,dst,lineaarchi[v]) | draw(v,src,dst,lineaarchi[v]) | ||
− | </ | + | </source> |
Versione attuale delle 22:08, 26 mar 2019
t.py: prossimo passaggio bus
#!/usr/bin/env python3
import sys
import urllib.request
from xml.dom import minidom
prefix="TperHellobus: "
stop=sys.argv[1]
line=sys.argv[2] if len(sys.argv) > 2 else ""
time=sys.argv[3] if len(sys.argv) > 3 else ""
f=urllib.request.urlopen("https://hellobuswsweb.tper.it/web-services/hello-bus.asmx/QueryHellobus?fermata={}&linea={}&oraHHMM={}".format(stop,line,time))
reply=f.read()
f.close()
#print(reply)
xmldoc = minidom.parseString(reply)
result = xmldoc.getElementsByTagName("string")[0].firstChild.data
if result[:len(prefix)]==prefix: result=result[len(prefix):]
fermate={}
with open("fermate_20150415.csv","r") as f:
for row in f:
codice,denominazione,ubicazione,comune,_,_,latitudine,longitudine,codice_zona = row[:-1].split(';')
fermate[codice]=denominazione,ubicazione,comune
description=fermate[stop][0] if stop in fermate else ""
print("Fermata: {}-{} Linea: {} Ora: {}".format(stop,description,line,time))
print(result)
linea.py: stampa le fermate di una linea
#!/usr/bin/env python3
import sys
ver="20151101"
fermate={}
with open("fermate_"+ver+".csv","r") as f:
for line in f:
codice,denominazione,ubicazione,comune,_,_,latitudine,longitudine,codice_zona = line[:-1].split(';')
fermate[codice]=denominazione,ubicazione,comune
archi={}
with open("archi_"+ver+".csv","r") as f:
for line in f:
codice,offset_posizione,coordinata_x,coordinata_y,latitudine,longitudine,codice_fermata = line[:-1].split(';')
if codice_fermata != '0':
archi.setdefault(codice,[]).append(codice_fermata)
linee={}
lineepercorsi={}
with open("lineepercorsi_"+ver+".csv","r") as f:
for line in f:
codice_linea,verso,percorso,_,codice_arco,bacino,_,_ = line[:-1].split(';')
linee.setdefault((codice_linea,bacino),[])
if (verso,percorso) not in linee[codice_linea,bacino]:
linee[codice_linea,bacino].append((verso,percorso))
lineepercorsi.setdefault((codice_linea,verso,percorso,bacino),[]).append(codice_arco)
linea=sys.argv[1]
bacino='BO'
print("LINEA ++++++",linea,"++++++")
#for verso,percorso in linee[linea,bacino]:
# print("Verso", verso," Percorso",percorso)
# lineafermate=None
# for a in lineepercorsi[(linea,verso,percorso,bacino)]:
# if lineafermate:
# lineafermate += archi[a][1:]
# else:
# lineafermate=archi[a]
#
# for f in lineafermate:
# print(f, fermate[f])
lineaarchi={}
lineararchi={}
lineafermate={}
versi=set()
for verso,percorso in linee[linea,bacino]:
versi.add(verso)
if not verso in lineaarchi:
lineaarchi[verso]={}
lineararchi[verso]={}
lineafermate[verso]=set()
for a in lineepercorsi[(linea,verso,percorso,bacino)]:
lineafermate[verso] |= set(archi[a])
for i in range(len(archi[a])-1):
lineaarchi[verso].setdefault(archi[a][i],set()).add(archi[a][i+1])
lineararchi[verso].setdefault(archi[a][i+1],set()).add(archi[a][i])
versi=list(versi)
versi.sort()
#for v in versi:
# print("verso: {} da: ".format(v),end='')
#for c in capolinea[v]:
# print("{}-{} ".format(c, fermate[c][0]),end='')
# print(" a: ",end='')
# for c in rcapolinea[v]:
# print("{}-{} ".format(c, fermate[c][0]),end='')
# print()
def draw(v,src,dst,arc):
print("+++ VERSO: ",v)
while src:
remain=[x for x in src if x not in dst]
n=min(remain)
src.remove(n)
print("{}-{}".format(n, fermate[n][0]),end='')
while True:
n = arc[n].pop()
print(" -> {}-{}".format(n, fermate[n][0]),end='')
if n in dst:
dst.remove(n)
break
print()
for v in versi:
src=[]
dst=[]
for n in lineafermate[v]:
if n not in lineararchi[v]:
src.append(n)
if n not in lineaarchi[v]:
dst.append(n)
for n in lineafermate[v]:
nxt=lineaarchi[v].get(n,[])
prv=lineararchi[v].get(n,[])
if len(prv) > 1:
for _ in prv:
dst.append(n)
src.append(n)
if len(nxt) > 1:
dst.append(n)
for _ in nxt:
src.append(n)
draw(v,src,dst,lineaarchi[v])