Differenze tra le versioni di "Esperimenti con Tper"
(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[...') |
(Nessuna differenza)
|
Versione delle 22:06, 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])