main.py - randomcrap - random crap programs of varying quality
 (HTM) git clone git://git.codemadness.org/randomcrap
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
       main.py (2392B)
       ---
            1 # Code adapted from: http://htmwiki.nl/#!hackathon/realtime.md
            2 # https://ndovloket.nl/
            3 # http://data.ndovloket.nl/REALTIME.TXT
            4 # https://www.hackdeoverheid.nl/aan-de-slag-met-open-ov-data/
            5 #
            6 # Dependencies: python3, python3-zeromq, zeromq
            7 #
            8 # XML spec BISON: http://data.ndovloket.nl/docs/bison/haltestandaard/xsd/
            9 
           10 from gzip import GzipFile
           11 from io import BytesIO
           12 import zmq
           13 
           14 import os
           15 import time
           16 
           17 gcounter = 0
           18 
           19 def get_message_filename():
           20         global gcounter # message counter
           21         path = "data/%d_%d.xml" % (int(time.time()), gcounter)
           22         return path
           23 
           24 def write_message(path, b):
           25         global gcounter # message counter
           26         f = open(path, "wb+")
           27         f.write(b)
           28         f.close()
           29         gcounter += 1
           30 
           31 # pass to separate program for flexibility.
           32 def parse_message(path):
           33         proc = os.popen("python3 parse.py < " + path, "r")
           34         output = proc.read()
           35         proc.close()
           36         print(output)
           37 
           38 context = zmq.Context()
           39 
           40 subscriber = context.socket(zmq.SUB)
           41 subscriber.connect("tcp://pubsub.besteffort.ndovloket.nl:7658")
           42 
           43 #subscriber.setsockopt_string(zmq.SUBSCRIBE, "/RIG/KV6posinfo")
           44 #subscriber.setsockopt_string(zmq.SUBSCRIBE, "/RIG/KV17cvlinfo")
           45 #subscriber.setsockopt_string(zmq.SUBSCRIBE, "/QBUZZ/KV15messages")
           46 #subscriber.setsockopt_string(zmq.SUBSCRIBE, "/QBUZZ/KV17cvlinfo")
           47 
           48 subscriber.setsockopt_string(zmq.SUBSCRIBE, "/ARR/KV6posinfo") # Arriva
           49 subscriber.setsockopt_string(zmq.SUBSCRIBE, "/CXX/KV6posinfo") # Connexxion, Breng, OV Regio IJsselmond
           50 subscriber.setsockopt_string(zmq.SUBSCRIBE, "/DITP/KV6posinfo") # (U-OV Sneltram)
           51 subscriber.setsockopt_string(zmq.SUBSCRIBE, "/EBS/KV6posinfo") # EBS
           52 subscriber.setsockopt_string(zmq.SUBSCRIBE, "/GVB/KV6posinfo") # GVB
           53 subscriber.setsockopt_string(zmq.SUBSCRIBE, "/OPENOV/KV6posinfo") # De Lijn
           54 subscriber.setsockopt_string(zmq.SUBSCRIBE, "/QBUZZ/KV6posinfo") # QBUZZ
           55 subscriber.setsockopt_string(zmq.SUBSCRIBE, "/RIG/KV6posinfo") # HTM, RET, Veolia
           56 subscriber.setsockopt_string(zmq.SUBSCRIBE, "/SYNTUS/KV6posinfo") # Syntus
           57 
           58 while True:
           59         multipart = subscriber.recv_multipart()
           60         address = multipart[0]
           61         #contents = ''.join(str(multipart[1:]))
           62         contents = multipart[1:][0]
           63         #print('DEBUG ', contents)
           64         try:
           65                 contents = GzipFile('','r',0,BytesIO(contents)).read()
           66 #                print('GZIP', address, str(contents))
           67                 path = get_message_filename()
           68                 write_message(path, contents)
           69                 parse_message(path)
           70         except:
           71                 raise
           72                 print('NOT ', address, contents)
           73 
           74 subscriber.close()
           75 context.term()