Mijn vraag:
Ik wil een stabiele en efficiënte mogelijkheid om een XML-feed gepushed via ZMQ naar een API te brengen.
De NS heeft via het NDOV-loket een ZMQ-datastroom met actuele treinposities, en daar wil ik wat mee doen. Ik weet dat elke halve minuut een XML-bestand via ZMQ wordt gepushed met de actuele locaties. Nu heb ik een poosje geleden een simpele Python implementatie geschreven waarmee je deze data steeds naar een bestand kan schrijven. Maar efficiënt is het niet, en het idee heb ik maar even 'on hold' gezet tot ik een keer wat beters bedacht.
Nu zit ik te denken om de XML-feed naar Redis te schrijven, zodat het in het geheugen wordt opgeslagen, zodat ik de key uit Redis, met daarin de XML-feed, naar een API kan outputten, zodat ik dus met iets als api.site.nl/api/locations steeds de actuele locaties kan ophalen.
Zoiets als dit (met een beetje hulp van ChatGPT):
Relevante software en hardware die ik gebruik
Redis, Docker, Python met de nodige modules
Wat ik al gevonden of geprobeerd heb
Ik heb al ontdekt dat dit een mogelijkheid was. Maar misschien kan dit nog werden geperfectioneerd? Ik ben geen ultieme kei in Python en Redis.
Nu vroeg ik mij af: Is dit wel een goede setup, en zit ik op het goede spoor (pun intended) wat in ieder geval beter is dan constant een xml-file genereren? Of kan dit nog beter en efficiënter?
En ja, als ik het voor elkaar heb. Dan breng ik het vast wel uit voor Docker.
Ik wil een stabiele en efficiënte mogelijkheid om een XML-feed gepushed via ZMQ naar een API te brengen.
De NS heeft via het NDOV-loket een ZMQ-datastroom met actuele treinposities, en daar wil ik wat mee doen. Ik weet dat elke halve minuut een XML-bestand via ZMQ wordt gepushed met de actuele locaties. Nu heb ik een poosje geleden een simpele Python implementatie geschreven waarmee je deze data steeds naar een bestand kan schrijven. Maar efficiënt is het niet, en het idee heb ik maar even 'on hold' gezet tot ik een keer wat beters bedacht.
Nu zit ik te denken om de XML-feed naar Redis te schrijven, zodat het in het geheugen wordt opgeslagen, zodat ik de key uit Redis, met daarin de XML-feed, naar een API kan outputten, zodat ik dus met iets als api.site.nl/api/locations steeds de actuele locaties kan ophalen.
Zoiets als dit (met een beetje hulp van ChatGPT):
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| from flask import Flask, jsonify import redis app = Flask(__name__) redis_client = redis.StrictRedis(host='localhost', port=6379, db=0) @app.route('/api/locations', methods=['GET']) def get_xml_data(): xml_data = redis_client.get('locations') if xml_data: return Response(xml_data, content_type='application/xml') else: return jsonify({'message': 'XML data not found'}), 404 if __name__ == '__main__': app.run(debug=True) |
Relevante software en hardware die ik gebruik
Redis, Docker, Python met de nodige modules
Wat ik al gevonden of geprobeerd heb
Ik heb al ontdekt dat dit een mogelijkheid was. Maar misschien kan dit nog werden geperfectioneerd? Ik ben geen ultieme kei in Python en Redis.
Nu vroeg ik mij af: Is dit wel een goede setup, en zit ik op het goede spoor (pun intended) wat in ieder geval beter is dan constant een xml-file genereren? Of kan dit nog beter en efficiënter?
En ja, als ik het voor elkaar heb. Dan breng ik het vast wel uit voor Docker.
☀️ Goedemorgen zonneschijn! ☀️
☀️Ja, je maakt me zo gelukkig, en door jou voel ik me fijn! ☀️