Esperimenti con Tper

Da raspibo.
Versione del 26 mar 2019 alle 22:06 di Renzo (discussione | contributi) (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[...')
(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)
Jump to navigation Jump to search

t.py: prossimo passaggio bus

  1. !/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()

  1. 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

  1. !/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,"++++++")

  1. for verso,percorso in linee[linea,bacino]:
  2. print("Verso", verso," Percorso",percorso)
  3. lineafermate=None
  4. for a in lineepercorsi[(linea,verso,percorso,bacino)]:
  5. if lineafermate:
  6. lineafermate += archi[a][1:]
  7. else:
  8. lineafermate=archi[a]
  9. for f in lineafermate:
  10. 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()

  1. for v in versi:
  2. print("verso: {} da: ".format(v),end=)
  3. for c in capolinea[v]:
  4. print("{}-{} ".format(c, fermate[c][0]),end=)
  5. print(" a: ",end=)
  6. for c in rcapolinea[v]:
  7. print("{}-{} ".format(c, fermate[c][0]),end=)
  8. 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])