From 9e8f3bcb4737e913e3d053695ed6009119a60238 Mon Sep 17 00:00:00 2001 From: unai Date: Tue, 3 Feb 2026 15:35:48 +0000 Subject: [PATCH] fix: update version to 0.3.2 in pyproject.toml and enhance README with EPG and filtering details --- README.md | 33 ++++++++++++++++++++++++++++----- pyproject.toml | 2 +- 2 files changed, 29 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 6ee13f4..b718a74 100644 --- a/README.md +++ b/README.md @@ -8,9 +8,11 @@ Servicio Python que genera y actualiza automáticamente listas de reproducción ## Características - **Actualización automática** — Regenera la playlist en intervalos configurables -- **Servidor HTTP integrado** — Sirve el archivo M3U directamente sin dependencias externas +- **EPG integrado** — Descarga y filtra automáticamente la guía de programación (XMLTV) +- **Filtros avanzados** — Incluye canales por prefijo o excluye por contenido del nombre +- **Servidor HTTP integrado** — Sirve el archivo M3U y EPG directamente sin dependencias externas - **Docker ready** — Despliegue simple con Docker Compose -- **Escritura atómica** — Actualiza el archivo sin interrumpir descargas activas +- **Escritura atómica** — Actualiza archivos sin interrumpir descargas activas - **Seguridad** — Se ejecuta con usuario no privilegiado en contenedor - **Multi-hilo** — Servidor threaded para manejar múltiples clientes simultáneos @@ -41,9 +43,10 @@ Servicio Python que genera y actualiza automáticamente listas de reproducción docker compose up -d ``` -4. **Accede a la playlist:** +4. **Accede a la playlist y EPG:** ``` http://localhost:8080/playlist.m3u + http://localhost:8080/epg.xml ``` ### Sin Docker @@ -74,6 +77,21 @@ Servicio Python que genera y actualiza automáticamente listas de reproducción | `PORT` | Puerto del servidor HTTP local | ❌ | `8080` | | `UPDATE_INTERVAL` | Intervalo de actualización (segundos) | ❌ | `3600` | | `OUTPUT_FILE` | Nombre del archivo M3U generado | ❌ | `playlist.m3u` | +| `INCLUDE_TEXT` | Lista JSON de prefijos. Solo canales que **empiecen** con alguno | ❌ | `[]` | +| `EXCLUDE_TEXT` | Lista JSON de textos. Excluye canales que **contengan** alguno | ❌ | `[]` | + +### Filtros + +- **`INCLUDE_TEXT`**: Filtra canales que **empiecen** con alguno de los textos especificados (lógica OR). Si está vacío, incluye todos los canales. +- **`EXCLUDE_TEXT`**: Excluye canales cuyo nombre **contenga** alguno de los textos (lógica OR). Se aplica después del filtro de inclusión. +- Los mismos filtros se aplican automáticamente al EPG. + +Ejemplo: +```env +# Solo canales que empiecen con "ES:" o "UK:", excluyendo los que contengan "Adult" +INCLUDE_TEXT=["ES:", "UK:"] +EXCLUDE_TEXT=["Adult", "XXX"] +``` ## Arquitectura @@ -87,10 +105,15 @@ Servicio Python que genera y actualiza automáticamente listas de reproducción │ │ Fetch API │ │ │ ThreadingHTTPServer │ │ │ │ (Xtream Codes) │ │ │ │ │ │ └───────┬────────┘ │ │ GET /playlist.m3u │ │ -│ │ │ │ │ │ +│ │ │ │ GET /epg.xml │ │ │ ┌───────▼────────┐ │ └────────────────────────────┘ │ │ │ Generate M3U │ │ │ -│ │ (Atomic Write) │──┼──────► public/playlist.m3u │ +│ │ + Apply Filter │──┼──────► public/playlist.m3u │ +│ └───────┬────────┘ │ │ +│ │ │ │ +│ ┌───────▼────────┐ │ │ +│ │ Fetch & Filter │ │ │ +│ │ EPG (XMLTV) │──┼──────► public/epg.xml │ │ └───────┬────────┘ │ │ │ │ │ │ │ sleep(interval) │ │ diff --git a/pyproject.toml b/pyproject.toml index 9870a68..35a537a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "m3u_list_builder" -version = "0.0.0" +version = "0.3.2" description = "Python tool to build M3U lists from various sources." authors = ["Unai Blazquez "] readme = "README.md"