61 lines
2.0 KiB
Python
61 lines
2.0 KiB
Python
import json
|
|
import os
|
|
import threading
|
|
from http.server import BaseHTTPRequestHandler, HTTPServer
|
|
from urllib.parse import parse_qs, urlparse
|
|
|
|
sys_dir = os.path.dirname(os.path.abspath(__file__))
|
|
import sys
|
|
sys.path.insert(0, sys_dir)
|
|
|
|
import config
|
|
from voz import anuncio_en_teles, anuncio_simple, youtube_en_teles
|
|
|
|
|
|
class Handler(BaseHTTPRequestHandler):
|
|
def do_GET(self):
|
|
q = parse_qs(urlparse(self.path).query)
|
|
path = urlparse(self.path).path
|
|
|
|
if path == "/tv/youtube":
|
|
url = (q.get("url") or [""])[0]
|
|
if not url:
|
|
self._resp(400, {"error": "falta parametro url"})
|
|
return
|
|
threading.Thread(target=youtube_en_teles, args=(url,), daemon=True).start()
|
|
print(f"[TV-API] YouTube lanzado: {url[:80]}")
|
|
self._resp(200, {"ok": True, "url": url, "modo": "youtube"})
|
|
return
|
|
|
|
texto = (q.get("texto") or q.get("msg") or [""])[0]
|
|
if not texto:
|
|
self._resp(400, {"error": "falta parametro texto"})
|
|
return
|
|
simple = (q.get("simple") or ["0"])[0] == "1"
|
|
fn = anuncio_simple if simple else anuncio_en_teles
|
|
threading.Thread(target=fn, args=(texto,), daemon=True).start()
|
|
print(f"[TV-API] Mensaje lanzado ({'simple' if simple else 'alarma'}): {texto[:80]}")
|
|
self._resp(200, {"ok": True, "mensaje": texto, "modo": "simple" if simple else "alarma"})
|
|
|
|
def _resp(self, code, obj):
|
|
body = json.dumps(obj).encode("utf-8")
|
|
self.send_response(code)
|
|
self.send_header("Content-Type", "application/json; charset=utf-8")
|
|
self.send_header("Content-Length", str(len(body)))
|
|
self.end_headers()
|
|
self.wfile.write(body)
|
|
|
|
def log_message(self, *a):
|
|
pass
|
|
|
|
|
|
def main():
|
|
puerto = int(os.getenv("TV_API_PUERTO", "8600"))
|
|
print(f"TV API escuchando en :{puerto}")
|
|
print(f"Uso: http://<ip>:{puerto}/tv/mensaje?texto=Mensaje")
|
|
HTTPServer(("0.0.0.0", puerto), Handler).serve_forever()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|