Notas de quickstart
Ejecuta tu script de cuotas cada 15 minutos con cron
Una entrada en cron cada 15 minutos corre tu búsqueda 96 veces al día, dentro de la cuota gratuita. Convierte el bucle en una ejecución única.
La clave gratuita de la API de cuotas de Pinnacle permite 100 solicitudes al día, y el quickstart de Python ya señala que una llamada cada 15 minutos cabe en ella todo el día. La forma más limpia de mantener ese ritmo no es un bucle durmiendo, sino cron: 96 ejecuciones al día, cada una una sola búsqueda, sin proceso que vigilar.
De bucle a ejecución única
El script del quickstart sondea en un bucle while con un sleep al final. Para cron, inviértelo: una ejecución hace una búsqueda y sale. Guarda el cursor del valor last de cada respuesta en un archivo pequeño, léelo al arrancar, y la siguiente ejecución lo envía como since, así que toda ejecución tras la primera busca solo lo que cambió.
import json, os, requests
BASE, KEY = os.environ["ODDS_BASE_URL"], os.environ["ODDS_API_KEY"]
CURSOR = "/opt/odds/cursor.txt"
since = open(CURSOR).read().strip() if os.path.exists(CURSOR) else None
params = {"sport_id": 2}
if since:
params["since"] = since
r = requests.get(BASE + "/kit/v1/markets", params=params,
headers={"x-portal-apikey": KEY}, timeout=10)
r.raise_for_status()
data = r.json()
open(CURSOR, "w").write(str(data["last"]))
for ev in data["events"]:
print(ev["home"], "v", ev["away"])
Una ejecución que falla en un 429 simplemente sale: la siguiente ejecución programada es el reintento, lo que encaja con la regla del quickstart de esperar el período del Retry-After en lugar de insistir.
La entrada en cron
Tres líneas en el crontab definen el entorno y la programación:
ODDS_BASE_URL=https://your-base
ODDS_API_KEY=your-key
*/15 * * * * flock -n /tmp/odds.lock /usr/bin/python3 /opt/odds/fetch.py >> /var/log/odds.log 2>&1
Los detalles que muerden: cron corre con un entorno mínimo, así que exporta las variables en el propio crontab; usa rutas completas para el intérprete y el script; y envuelve la ejecución en flock para que una ejecución lenta nunca se solape con la siguiente.
Mira el log, no el proceso
Sin daemon, el archivo de log es la comprobación de salud. Imprime una línea por ejecución con el recuento de eventos, y un día lleno de líneas te dice que la programación funciona. Si el log deja de crecer, cron es el primer lugar a mirar: una ruta equivocada o una variable ausente falla en silencio a las 3 de la mañana.
Cuándo cron deja de servir
Cron sirve a cualquier cosa que pueda correr y salir. En el momento en que necesitas cuotas más rápido que una vez por minuto, o quieres caídas empujadas hacia ti, la forma cambia: el stream de caídas es una conexión mantenida abierta, que pertenece a un servicio, no a un crontab. El quickstart muestra ambas formas, y la página de precios lista las cuotas dentro de las que cada una corre, verificado el 2026-10-02.
Una búsqueda por ejecución, 96 ejecuciones al día, cero daemons. Cron es el planificador más pequeño que mantiene honesto un presupuesto de clave gratuita.