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

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