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 21: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])