# app.py from flask import Flask, request, Response, render_template import time import queue import os from scraper.book_scraper import BookScraper from scraper.sites import BookSite from scraper.logger import add_listener, remove_listener, LOG_BUFFER app = Flask(__name__) @app.route("/") def index(): return render_template("index.html") # ---------------------------------------------------------- # RUN SCRAPER # ---------------------------------------------------------- @app.route("/run", methods=["POST"]) def run_scraper(): data = request.json site = BookSite() scraper = BookScraper(site, data["url"]) result = scraper.execute() return { "title": result["title"], "buffer": LOG_BUFFER.getvalue() } # ---------------------------------------------------------- # REALTIME LOG STREAM (SSE) # ---------------------------------------------------------- @app.route("/stream") def stream(): def event_stream(): q = queue.Queue() # push logregels van BookScraper naar SSE def listener(line): q.put(line) add_listener(listener) try: while True: msg = q.get() # blokkeert totdat logregel binnenkomt yield f"data: {msg}\n\n" except GeneratorExit: pass finally: remove_listener(listener) return Response(event_stream(), mimetype="text/event-stream") # ---------------------------------------------------------- if __name__ == "__main__": debug = os.getenv("FLASK_DEBUG", "0") == "1" host = os.getenv("HOST", "0.0.0.0") port = int(os.getenv("PORT", "5000")) app.run(debug=debug, host=host, port=port)