Esperimenti con Tper

Da raspibo.
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

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