Skip to content

Commit 2855fe1

Browse files
authored
Merge branch 'master' into patch-82
2 parents d72887b + bc7b18e commit 2855fe1

18 files changed

Lines changed: 1270 additions & 95 deletions

.github/PULL_REQUEST_TEMPLATE.md

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
## Información general
2+
<!-- Explica brevemente qué canal o emisora quieres añadir, modificar o eliminar. Opcional. -->
3+
4+
## Campos afectados
5+
<!-- Marca todos los campos que se modifican. Requerido. -->
6+
* [ ] Nombre
7+
* [ ] Stream
8+
* [ ] Web
9+
* [ ] Logo
10+
* [ ] EPG
11+
* [ ] Info
12+
13+
## Origen de la emisión
14+
<!-- Marca al menos una opción. Este apartado es obligatorio si añades o modificas un Stream. -->
15+
16+
* [ ] Sitio web oficial
17+
* [ ] Plataforma de terceros cuyo origen es oficial
18+
* [ ] Plataforma de terceros cuyo origen desconozco
19+
* [ ] Origen desconocido
20+
* [ ] Otro origen:
21+
22+
### Validación del Stream
23+
<!-- Obligatorio si añades o modificas un Stream. Indica cómo has comprobado que funciona y, si es posible, en qué reproductor o dispositivo. -->
24+
25+
## Información adicional
26+
<!-- Añade cualquier observación que pueda resultar útil durante la revisión. Opcional. -->
27+
28+
<!-- Recuerda haber leído la guía de contribuciones https://github.com/LaQuay/TDTChannels/blob/master/CONTRIBUTING.md -->
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
name: Catalog validation
2+
3+
on:
4+
pull_request:
5+
paths:
6+
- TELEVISION.md
7+
- RADIO.md
8+
- scripts/pr_review/**
9+
- .github/workflows/catalog-validation.yml
10+
11+
permissions:
12+
contents: read
13+
14+
concurrency:
15+
group: catalog-validation-${{ github.event.pull_request.number }}
16+
cancel-in-progress: true
17+
18+
jobs:
19+
validate:
20+
name: Validate catalog changes
21+
runs-on: ubuntu-slim
22+
timeout-minutes: 10
23+
steps:
24+
- name: Check out repository
25+
uses: actions/checkout@v7
26+
with:
27+
fetch-depth: 0
28+
29+
- name: Set up Python
30+
uses: actions/setup-python@v6
31+
with:
32+
python-version: "3.12"
33+
34+
- name: Run validator self-tests
35+
id: unit_tests
36+
run: python -m unittest discover -s scripts/pr_review/tests -v
37+
38+
- name: Run blocking deterministic validation
39+
id: deterministic_validation
40+
env:
41+
GITHUB_BASE_SHA: ${{ github.event.pull_request.base.sha }}
42+
run: python scripts/pr_review/validate_catalog.py --report-file .catalog-validation-report.json
43+
44+
- name: Run advisory stream availability checks
45+
id: network_checks
46+
continue-on-error: true
47+
env:
48+
GITHUB_BASE_SHA: ${{ github.event.pull_request.base.sha }}
49+
run: python scripts/pr_review/validate_catalog.py --network --report-file .catalog-validation-report.json
50+
51+
- name: Publish validation summary
52+
if: always()
53+
run: |
54+
python scripts/pr_review/render_summary.py \
55+
--report-file .catalog-validation-report.json \
56+
--unit-tests "${{ steps.unit_tests.outcome }}" \
57+
--deterministic-validation "${{ steps.deterministic_validation.outcome }}" \
58+
--network-checks "${{ steps.network_checks.outcome }}" \
59+
>> "$GITHUB_STEP_SUMMARY"

AGENTS.md

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
# AGENTS.md
2+
3+
## Purpose: Pull Request validation
4+
5+
This repository is public.
6+
7+
These instructions are intended for implementing and maintaining automated Pull Request validation for TDTChannels using GitHub Actions and small supporting scripts.
8+
9+
The main catalog files are:
10+
11+
* `TELEVISION.md`
12+
* `RADIO.md`
13+
14+
Contributions must follow `CONTRIBUTING.md`.
15+
16+
## Required reading
17+
18+
Before changing validation logic:
19+
20+
1. Read `CONTRIBUTING.md`.
21+
2. Inspect the real structure of `TELEVISION.md` and `RADIO.md`.
22+
3. Review representative entries and legitimate historical exceptions.
23+
4. Check the existing workflows under `.github/workflows/`.
24+
25+
Do not assume the catalog is perfectly uniform and do not rewrite catalog data merely to simplify validation.
26+
27+
## Implementation guidelines
28+
29+
* Keep changes focused on Pull Request validation.
30+
* Do not refactor unrelated files.
31+
* Prefer small, maintainable, and testable implementations.
32+
* Prefer the Python standard library unless a dependency clearly improves correctness.
33+
* Add or update tests for behavioral changes.
34+
* Run all relevant tests before finishing.
35+
* Report repository-specific exceptions, ambiguities, and known limitations.
36+
37+
## Validation behavior
38+
39+
* Validate only added or modified catalog entries whenever possible.
40+
* Load the full catalog only when required, such as for duplicate detection.
41+
* Favor low false-positive rates over aggressive blocking.
42+
* Keep deterministic validation separate from network availability checks.
43+
* Network checks must always be advisory because GitHub-hosted runners may execute outside Spain and many streams are geo-restricted.
44+
* Do not download video or audio segments unless explicitly requested.
45+
* Use `GET`, follow redirects, apply short timeouts and response-size limits, and use an identifiable User-Agent.
46+
* Do not treat `Content-Type` as definitive proof of the response format.
47+
48+
## GitHub Actions
49+
50+
* Use standard GitHub-hosted runners.
51+
* Support Pull Requests from forks.
52+
* Prefer workflows that require no secrets.
53+
* Use minimum permissions.
54+
* Do not add write permissions solely to post comments.
55+
* Add sensible job timeouts and cancel obsolete runs where appropriate.
56+
* Do not add automatic approval or automatic merge.
57+
58+
## Public repository and secrets
59+
60+
Treat repository files, Git history, Pull Requests, workflow logs, fixtures, artifacts, and comments as publicly visible.
61+
62+
* Never commit, generate, paste, or expose credentials, tokens, passwords, API keys, private keys, cookies, signed URLs, session identifiers, or other sensitive values.
63+
* Do not print secrets, authorization headers, cookies, or environment variables in logs.
64+
* Use clearly fake placeholders or environment-variable references in tests and examples.
65+
* Do not commit `.env` files.
66+
* If credentials appear to be required, stop and report the requirement instead of adding them.
67+
* If sensitive information is discovered, do not reproduce it. Report its location and recommend revocation and removal.
68+
69+
## Legal and compliance boundaries
70+
71+
* Only use streams and sources publicly and legitimately exposed by their official broadcaster or distributor.
72+
* Do not add or facilitate access to unauthorized, private, pirated, paywalled, or unlawfully redistributed streams.
73+
* Do not bypass authentication, DRM, geoblocking, access controls, anti-bot protections, or other technical restrictions.
74+
* Do not extract hidden streams, forge authorization data, reuse private tokens, or impersonate official clients.
75+
* Flag unclear authorization or official origin for human review.
76+
77+
## Scope
78+
79+
Unless explicitly requested:
80+
81+
* Do not add AI validation, paid APIs, or external infrastructure.
82+
* Do not modify contributor submissions automatically.
83+
* Do not post automatic Pull Request comments.
84+
* Do not merge changes.
85+
* Leave changes ready for human review.

AUTHORS.md

Lines changed: 38 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,38 @@
1-
#### Author
2-
- Marc [@LaQuay](https://github.com/LaQuay)
3-
4-
#### Team
5-
- Antonio [@atnbueno](https://github.com/atnbueno)
6-
- Paco [@pacoDevelop](https://github.com/pacoDevelop)
7-
- Jacobo [@poborp](https://github.com/poborp)
8-
9-
#### Colaboradores (in alphabetical order)
10-
- Adrian [@adrianpaniagualeon](https://github.com/adrianpaniagualeon)
11-
- Aitor [@aitorillo](https://github.com/aitorillo)
12-
- Alex Gabriel [@97carmine](https://github.com/97carmine)
13-
- Angel [@PIC16f841](https://github.com/PIC16f841)
14-
- Berto [@Berto9050](https://github.com/Berto9050)
15-
- CaRLymx [@carlymx](https://github.com/carlymx)
16-
- Carlos [@profesorasix](https://github.com/profesorasix)
17-
- Carratraka [@carratraka](https://github.com/carratraka)
18-
- David [@david-cp](https://github.com/David-cp
19-
- Jorge [@jaguaza](https://github.com/jaguaza)
20-
- José Antonio [@nomentero](https://github.com/Nomenteros)
21-
- Juan [@okelet](https://github.com/okelet)
22-
- Miguel A. [@MiguelAngel2345](https://github.com/MiguelAngel2345)
23-
- Ricardo [@RicardoVelaC](https://github.com/RicardoVelaC)
24-
- Valentin [@vk496](https://github.com/vk496)
25-
26-
#### Antiguos Colaboradores)
27-
- HelmerLuzo [@HelmerLuzo](https://github.com/HelmerLuzo)
28-
- Playz [@playzzz](https://github.com/playzzz)
29-
30-
Si haces una *Pull Request*, no olvides incluirte en este fichero.
31-
32-
Más info: https://www.tdtchannels.com/colabora
1+
# Autores y colaboradores
2+
3+
Este proyecto existe gracias a toda la gente que aporta enlaces, reporta fallos y mejora el código. ¡Gracias!
4+
5+
## Autor
6+
7+
- Marc — [@LaQuay](https://github.com/LaQuay)
8+
9+
## Equipo
10+
11+
- José Antonio — [@Nomenteros](https://github.com/Nomenteros)
12+
- Jacobo — [@poborp](https://github.com/poborp)
13+
- Antonio — [@atnbueno](https://github.com/atnbueno)
14+
15+
## Colaboradores
16+
17+
_Por orden alfabético._
18+
19+
- Adrian — [@adrianpaniagualeon](https://github.com/adrianpaniagualeon)
20+
- Aitor — [@aitorillo](https://github.com/aitorillo)
21+
- Alex Gabriel — [@97carmine](https://github.com/97carmine)
22+
- Angel — [@PIC16f841](https://github.com/PIC16f841)
23+
- Berto — [@Berto9050](https://github.com/Berto9050)
24+
- Carlos — [@profesorasix](https://github.com/profesorasix)
25+
- CaRLymx — [@carlymx](https://github.com/carlymx)
26+
- Carratraka — [@carratraka](https://github.com/carratraka)
27+
- David — [@David-cp](https://github.com/David-cp)
28+
- Jorge — [@jaguaza](https://github.com/jaguaza)
29+
- Juan — [@okelet](https://github.com/okelet)
30+
- Miguel A. — [@MiguelAngel2345](https://github.com/MiguelAngel2345)
31+
- Paco — [@pacoDevelop](https://github.com/pacoDevelop)
32+
- Playz — [@playzzz](https://github.com/playzzz)
33+
- Ricardo — [@RicardoVelaC](https://github.com/RicardoVelaC)
34+
- Valentin — [@vk496](https://github.com/vk496)
35+
36+
---
37+
38+
¿Has enviado una *pull request*? No olvides añadirte a este fichero.

RADIO.md

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,9 @@
7777
| Élite Oldies | [stream](https://streaming2.elitecomunicacion.es/proxy/eliteoldies/stream) | [web](https://www.cadenaelite.es/eliteoldies/) | [logo](https://graph.facebook.com/cadena.elitegranada/picture?width=200&height=200) | - | - |
7878
| Élite Urban | [stream](https://streaming2.elitecomunicacion.es/proxy/eliteurban/stream) | [web](https://www.cadenaelite.es/eliteurban/) | [logo](https://graph.facebook.com/cadena.elitegranada/picture?width=200&height=200) | - | - |
7979
| MariskalRock Radio | [stream](https://media.profesionalhosting.com:8047/stream) | [web](https://mariskalrock.com) | [logo](https://graph.facebook.com/mariskalrock/picture?width=200&height=200) | - | - |
80-
| La Urban Radio | [mp3](https://st1.urbanrevolution.es:8443/laurbanfm.mp3) | [web](https://www.urbanrevolution.es) | [logo](https://graph.facebook.com/urbanrevolution.es/picture?width=200&height=200) | - | - |
80+
| La Urban Radio | [stream](https://radio.urbanrevolution.es:8443/hispano) | [web](https://Urbanrevolution.es) | [logo](https://graph.facebook.com/urbanrevolution.es/picture?width=200&height=200) | - | - |
81+
| FLOW Radio | [stream](http://flow.urbanrevolution.es:8445/flow) | [web](https://flowradio.es/) | [logo](https://graph.facebook.com/flowradio.es/picture?width=200&height=200) | - | - |
82+
| House Radio | [stream](https://house.urbanrevolution.es:8446/houseaac) | [web](https://house.urbanrevolution.es:446/public/house_radio_spain) | [logo](https://graph.facebook.com/houseradiofm/picture?width=200&height=200) | - | - |
8183

8284
## Deportivas
8385

@@ -141,7 +143,7 @@
141143
| SER Jaén | [mp3](https://playerservices.streamtheworld.com/api/livestream-redirect/SER_JAEN.mp3) | [web](https://cadenaser.com/radio-jaen/) | [logo](https://graph.facebook.com/cadenaser/picture?width=200&height=200) | S_Jaen.Radio | - |
142144
| SER Jerez | [mp3](https://playerservices.streamtheworld.com/api/livestream-redirect/SER_ASO_JEREZ.mp3) | [web](https://cadenaser.com/radio-jerez/) | [logo](https://graph.facebook.com/cadenaser/picture?width=200&height=200) | S_Jerez.Radio | - |
143145
| SER Jódar | [mp3](https://playerservices.streamtheworld.com/api/livestream-redirect/SER_ASO_JODAR.mp3) | [web](https://cadenaser.com/radio-jodar/) | [logo](https://graph.facebook.com/cadenaser/picture?width=200&height=200) | S_Jodar.Radio | - |
144-
| SER La Janda | [stream](https://eu1.lhdserver.es:8073/stream) | [web](https://cadenaser.com/ser-la-janda/) | [logo](https://graph.facebook.com/cadenaser/picture?width=200&height=200) | S_LaJanda.Radio | - |
146+
| SER La Janda | [mp3](https://playerservices.streamtheworld.com/api/livestream-redirect/SER_ASO_LA_JANDA.mp3) | [web](https://cadenaser.com/ser-la-janda/) | [logo](https://graph.facebook.com/cadenaser/picture?width=200&height=200) | S_LaJanda.Radio | - |
145147
| SER Levante | [mp3](https://playerservices.streamtheworld.com/api/livestream-redirect/SER_ASO_LEVANTE.mp3) | [web](https://cadenaser.com/ser-levante-albox) | [logo](https://graph.facebook.com/cadenaser/picture?width=200&height=200) | S_Levante.Radio | - |
146148
| SER Linares | [mp3](https://playerservices.streamtheworld.com/api/livestream-redirect/SER_LINARES.mp3) | [web](https://cadenaser.com/radio-linares/) | [logo](https://graph.facebook.com/cadenaser/picture?width=200&height=200) | S_Linares.Radio | - |
147149
| SER Lucena | [mp3](https://playerservices.streamtheworld.com/api/livestream-redirect/SER_ASO_LUCENA.mp3) | [web](https://cadenaser.com/ser-lucena/) | [logo](https://graph.facebook.com/cadenaser/picture?width=200&height=200) | S_Lucena.Radio | - |
@@ -417,6 +419,7 @@
417419
| Radio Arrebato | [stream](http://srv0510.emisorasonline.com:8025/stream) | [web](https://www.radioarrebato.net) | [logo](https://graph.facebook.com/radioarrebato107.4/picture?width=200&height=200) | - | - |
418420
| ONE FM | [mp3](https://stream.onefm.es:8000/onefm.mp3) | [web](https://onefm.es) | [logo](https://graph.facebook.com/OneFM.es/picture?width=200&height=200) | - | - |
419421
| Radio Serranía | [mp3](https://stream.zeno.fm/suyydyfgwf9uv) | [web](https://www.radioserrania.es) | [logo](https://play-lh.googleusercontent.com/4QQwgiAxHgttu-Cnz2zlypFKnvevz1v30xYi0qaAzzAhwZnfZ8UszPapSCarQeCEIg=s200) | - | - |
422+
| Radio Santa María | [mp3](https://s20.myradiostream.com/15414/listen.mp3) | [web](https://rtvd.org/radio-htm/) | [logo](https://pbs.twimg.com/profile_images/1730156030795939840/NtRBSxdr_200x200.jpg) | - | - |
420423

421424
### Castilla y León
422425

0 commit comments

Comments
 (0)