Skip to content

Instantly share code, notes, and snippets.

@ESJavadex
Created December 22, 2025 10:46
Show Gist options
  • Select an option

  • Save ESJavadex/ca935277f1010dcf7393ba528fc90961 to your computer and use it in GitHub Desktop.

Select an option

Save ESJavadex/ca935277f1010dcf7393ba528fc90961 to your computer and use it in GitHub Desktop.
Loteria Navidad 2025 - API comprobar
#!/usr/bin/env python3
"""
Comprobador de Lotería de Navidad 2025
Utiliza múltiples APIs para comprobar los números
Uso:
python comprobar_loteria_navidad.py # Comprueba números predefinidos
python comprobar_loteria_navidad.py 12345 67890 # Comprueba números específicos
python comprobar_loteria_navidad.py -w # Modo watch (actualiza cada minuto)
"""
import sys
import os
import argparse
import requests
import json
import time
import subprocess
from datetime import datetime
from typing import Optional, List
# APIs disponibles para consultar
APIS = {
"oficial": "https://www.loteriasyapuestas.es/servicios/premioDecimoWeb",
"elpais": "https://api.elpais.com/ws/LoteriaNavidadPremiados",
"alternativa": "https://api-loteria.pabloclementeperez.com/output/LoteriaNavidad.json"
}
# Cache de premios de la API
PREMIOS_CACHE = {}
API_STATUS = {"ok": False, "last_update": None}
# Memoria de premios ya notificados (para no repetir alarmas)
PREMIOS_NOTIFICADOS = set()
def cargar_premios():
"""Carga todos los premios desde la API."""
global PREMIOS_CACHE, API_STATUS
url = "https://api-loteria.pabloclementeperez.com/output/LoteriaNavidad.json"
headers = {"User-Agent": "Mozilla/5.0"}
try:
response = requests.get(url, headers=headers, timeout=15)
response.raise_for_status()
data = response.json()
if data.get("status") == "1":
PREMIOS_CACHE = data
API_STATUS["ok"] = True
API_STATUS["last_update"] = datetime.now()
return True
except Exception:
pass
API_STATUS["ok"] = False
return False
def comprobar_decimo(numero: str) -> dict:
"""Comprueba un décimo en el cache de premios."""
numero_orig = numero.zfill(5)
numero_int = str(int(numero)) # Sin ceros iniciales
# Buscar en cache
if numero_int in PREMIOS_CACHE:
premio_serie = int(PREMIOS_CACHE[numero_int])
premio_decimo = premio_serie // 10 # Convertir de serie a décimo
return {"numero": numero_orig, "premio": premio_decimo}
return {"numero": numero_orig, "premio": 0}
def formatear_resultado(resultado: dict) -> str:
"""Formatea el resultado para mostrar."""
if resultado.get("error"):
return "⏳ API no disponible"
premio = resultado.get("premio", 0)
if premio is None:
return "❓ Sin datos"
if premio > 0:
premio_fmt = f"{premio:,}".replace(",", ".")
return f"🎉 ¡PREMIO! {premio_fmt} €"
return "😔 Sin premio"
def sonar_alarma(premio: int, numero: str):
"""Reproduce una alarma cuando hay premio."""
# Sonido de campana del terminal
print("\a" * 3)
# En macOS usar 'say' para anunciar el premio
if sys.platform == "darwin":
mensaje = f"¡Premio! El número {' '.join(numero)} tiene {premio} euros"
try:
subprocess.run(["say", "-v", "Monica", mensaje], check=False)
except Exception:
pass
# Notificación del sistema en macOS
if sys.platform == "darwin":
try:
script = f'display notification "Número {numero} - {premio:,}€" with title "🎉 ¡PREMIO LOTERÍA!" sound name "Glass"'
subprocess.run(["osascript", "-e", script], check=False)
except Exception:
pass
def parse_args():
"""Procesa argumentos de línea de comandos."""
parser = argparse.ArgumentParser(
description="🎄 Comprobador de Lotería de Navidad 2025",
formatter_class=argparse.RawDescriptionHelpFormatter,
epilog="""
Ejemplos:
%(prog)s Comprueba números guardados
%(prog)s 12345 67890 Comprueba números específicos
%(prog)s -l Lista números guardados
%(prog)s -p Muestra premios principales
"""
)
parser.add_argument(
"numeros",
nargs="*",
help="Números a comprobar (5 dígitos cada uno)"
)
parser.add_argument(
"-l", "--list",
action="store_true",
help="Lista los números guardados"
)
parser.add_argument(
"-p", "--premios",
action="store_true",
help="Muestra los premios principales"
)
parser.add_argument(
"-q", "--quiet",
action="store_true",
help="Modo silencioso (solo resultados)"
)
parser.add_argument(
"-w", "--watch",
action="store_true",
help="Modo vigilancia (actualiza cada minuto)"
)
parser.add_argument(
"-i", "--interval",
type=int,
default=60,
help="Intervalo en segundos para modo watch (default: 60)"
)
return parser.parse_args()
# Números guardados (puedes añadir los tuyos aquí)
NUMEROS_GUARDADOS = [
]
def mostrar_premios():
"""Muestra información sobre los premios."""
print("📊 Premios Lotería Navidad 2025:")
print()
print(" 🥇 Gordo (1er premio): 400.000 €/décimo")
print(" 🥈 2º premio: 125.000 €/décimo")
print(" 🥉 3er premio: 50.000 €/décimo")
print(" 4º premios (2): 20.000 €/décimo")
print(" 5º premios (8): 6.000 €/décimo")
print(" Pedrea (1.794): 100 €/décimo")
print(" 💰 Reintegro: 20 €/décimo")
print()
print(" 🔗 Datos via API El País")
def comprobar_numeros(numeros: List[str], quiet: bool = False, alarma: bool = False) -> int:
"""Comprueba una lista de números y muestra resultados."""
# Cargar premios de la API
if not PREMIOS_CACHE:
cargar_premios()
if not quiet:
print("=" * 55)
print("🎄 LOTERÍA DE NAVIDAD 2025")
print("=" * 55)
if API_STATUS["ok"]:
print(f" ✅ API OK | {len(PREMIOS_CACHE)} premios cargados")
else:
print(" ❌ API no disponible")
print("-" * 55)
total_premio = 0
premios_encontrados = []
for numero in numeros:
numero = numero.zfill(5)
resultado = comprobar_decimo(numero)
estado = formatear_resultado(resultado)
print(f" {numero} → {estado}")
premio = resultado.get("premio") or 0
if premio and premio > 0:
total_premio += premio
premios_encontrados.append((numero, premio))
if not quiet:
print("=" * 55)
if total_premio > 0:
total_fmt = f"{total_premio:,}".replace(",", ".")
print(f"💰 TOTAL: {total_fmt} €")
# Activar alarma solo para premios NUEVOS
if alarma:
for numero, premio in premios_encontrados:
if numero not in PREMIOS_NOTIFICADOS:
PREMIOS_NOTIFICADOS.add(numero)
sonar_alarma(premio, numero)
print(f" 🆕 ¡NUEVO PREMIO DETECTADO: {numero}!")
elif not quiet:
print("📊 Total: 0 €")
return total_premio
def limpiar_pantalla():
"""Limpia la pantalla del terminal."""
os.system('clear' if os.name == 'posix' else 'cls')
def modo_watch(numeros: List[str], intervalo: int):
"""Ejecuta comprobación en bucle cada X segundos."""
print("🔄 Modo vigilancia activado. Ctrl+C para salir.")
print(f" Intervalo: {intervalo} segundos")
print()
time.sleep(2)
iteracion = 0
try:
while True:
iteracion += 1
limpiar_pantalla()
# Recargar premios en cada iteración
global PREMIOS_CACHE
PREMIOS_CACHE = {}
cargar_premios()
print(f"🔄 VIGILANCIA #{iteracion} | {datetime.now().strftime('%H:%M:%S')}")
print()
total = comprobar_numeros(numeros, alarma=True)
if total > 0:
print()
print("🚨 ¡¡¡ PREMIO DETECTADO !!! 🚨")
# Esperar intervalo
time.sleep(intervalo)
except KeyboardInterrupt:
print("\n\n👋 Vigilancia detenida.")
def main():
args = parse_args()
# Modo listar números guardados
if args.list:
print("📋 Números guardados:")
for n in NUMEROS_GUARDADOS:
print(f" {n}")
return
# Modo mostrar premios
if args.premios:
mostrar_premios()
return
# Determinar qué números comprobar
if args.numeros:
numeros = args.numeros
else:
numeros = NUMEROS_GUARDADOS
# Modo watch (vigilancia)
if args.watch:
modo_watch(numeros, args.interval)
return
# Comprobar números una vez
comprobar_numeros(numeros, quiet=args.quiet)
if __name__ == "__main__":
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment