server.py 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. #!/usr/bin/env python3
  2. """server.py — väike HTTP-teenus tõlkeboti fetch-mootorile.
  3. Endpointid:
  4. POST /fetch body {"url": "...", "mode": "auto|direct|solverr"} -> fetch() tulemus
  5. GET /health -> {"ok": true}
  6. """
  7. import json
  8. from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer
  9. from tolke_fetch import fetch
  10. PORT = 8192
  11. class Handler(BaseHTTPRequestHandler):
  12. server_version = "tolkfetch/1.0"
  13. def _send(self, code, payload):
  14. body = json.dumps(payload, ensure_ascii=False).encode("utf-8")
  15. self.send_response(code)
  16. self.send_header("Content-Type", "application/json; charset=utf-8")
  17. self.send_header("Content-Length", str(len(body)))
  18. self.end_headers()
  19. self.wfile.write(body)
  20. def do_GET(self):
  21. if self.path.startswith("/health"):
  22. self._send(200, {"ok": True, "service": "tolkfetch"})
  23. else:
  24. self._send(404, {"ok": False, "reason": "not found"})
  25. def do_POST(self):
  26. if not self.path.startswith("/fetch"):
  27. self._send(404, {"ok": False, "reason": "not found"})
  28. return
  29. try:
  30. n = int(self.headers.get("Content-Length") or 0)
  31. data = json.loads(self.rfile.read(n) or b"{}")
  32. except Exception as e:
  33. self._send(400, {"ok": False, "reason": "halb JSON: " + str(e)[:120]})
  34. return
  35. try:
  36. res = fetch(data.get("url") or "", data.get("mode") or "auto")
  37. except Exception as e:
  38. res = {"ok": False, "url": data.get("url", ""),
  39. "reason": "teenuse viga: " + str(e)[:200]}
  40. self._send(200, res)
  41. def log_message(self, fmt, *args):
  42. pass
  43. if __name__ == "__main__":
  44. srv = ThreadingHTTPServer(("0.0.0.0", PORT), Handler)
  45. srv.serve_forever()