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