Created
December 22, 2025 10:46
-
-
Save ESJavadex/ca935277f1010dcf7393ba528fc90961 to your computer and use it in GitHub Desktop.
Loteria Navidad 2025 - API comprobar
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/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