epg_func #11

Merged
unai merged 3 commits from epg_func into Dev 2026-02-03 15:37:47 +00:00
2 changed files with 29 additions and 6 deletions
Showing only changes of commit 9e8f3bcb47 - Show all commits

View File

@ -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) │ │

View File

@ -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 <unaibg2000@gmail.com>"]
readme = "README.md"