Differenze tra le versioni di "Esperimenti con Tper"

Da raspibo.
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
  
<code language=python>
+
<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)
</code>
+
</source>
  
 
linea.py: stampa le fermate di una linea
 
linea.py: stampa le fermate di una linea
  
<code language=python>
+
<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])
  
</code>
+
</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])