pnclFEED Clave gratuita

api de cuotas de pinnacle / curl / jq / primera solicitud

API de cuotas de Pinnacle con curl y jq

GET/kit/v1/markets?sport_id=1

{ events, last }200 OK

La primera solicitud a la API de cuotas de Pinnacle no necesita más que una terminal. Una llamada curl con la clave en una cabecera devuelve todo el tablero de fútbol en JSON, y jq lo convierte en una línea por partido. El script funciona tal cual en cuanto se definen las dos variables del principio.

Crear una clave gratuita

Lee el envoltorio antes de los precios

La respuesta es un objeto, no una lista: un array events y un cursor last. El primer filtro jq imprime ambos, que es la comprobación más rápida de que la clave funciona y el tablero está activo. Cada evento guarda sus mercados bajo periodos; num_0 es el partido completo, y su money_line contiene local, empate y visitante como cuotas decimales.

Envía last de vuelta como since y la siguiente llamada devuelve solo los eventos que cambiaron. La clave gratuita permite 20 llamadas por minuto y 100 al día, así que un bucle que corre cada 15 minutos cabe en ella todo el día; un 429 trae Retry-After, y la reacción correcta es esperar exactamente ese tiempo.

curl.sh
# One request, then jq. The key
# and base URL come from your
# account and the docs.
export ODDS_API_KEY="your key"
export ODDS_BASE_URL="https://..."

URL="$ODDS_BASE_URL/kit/v1/markets"
H="x-portal-apikey: $ODDS_API_KEY"

# Soccer board: cursor and count.
curl -s -H "$H" "$URL?sport_id=1" \
  | jq '{last, n: (.events | length)}'

# One line per event: full-match
# money line (period 0).
curl -s -H "$H" "$URL?sport_id=1" \
  | jq -r '.events[]
    | [.home, .away,
       .periods.num_0.money_line.home,
       .periods.num_0.money_line.draw,
       .periods.num_0.money_line.away]
    | @tsv'

# Next call: only what changed.
LAST=$(curl -s -H "$H" \
  "$URL?sport_id=1" | jq .last)
curl -s -H "$H" \
  "$URL?sport_id=1&since=$LAST" \
  | jq '.events | length'

GET/api/drops?mode=live&min_drop_pct=5

{ total, drops }200 OK

Caídas recientes, bajo demanda

El endpoint de caídas devuelve los movimientos que el feed detectó en los últimos minutos como JSON simple, así que un script de shell puede listar lo que cayó sin mantener un stream abierto. mode elige en vivo o prepartido, min_drop_pct el tamaño del movimiento y max_age_sec la ventana. Cada caída nombra el partido, el mercado y el lado, trae el precio antes y después, el porcentaje y el precio justo en nvp.

Es la misma detección que alimenta el stream SSE, leída bajo demanda en lugar de enviada. Para un proceso que deba reaccionar en el momento en que un precio cae, la página de Python mantiene el stream abierto.

drops.sh
# Drops of 5% or more in the last
# five minutes, live markets.
URL="$ODDS_BASE_URL/api/drops"
H="x-portal-apikey: $ODDS_API_KEY"

curl -s -H "$H" \
  "$URL?mode=live&min_drop_pct=5" \
  | jq -r '.drops[]
  | "\(.sport_name) \(.home) v \(.away)
\(.market) \(.side): \(.from) -> \(.to)
(\(.drop_pct)%) fair \(.nvp // "n/a")"'

GET/kit/v1/markets?sport_id=1

Retry-After: 2429

Qué significan los demás estados

curl imprime el estado con -w '%{http_code}'. Un 401 significa que falta la cabecera o la clave es incorrecta; un 403 significa que la clave es válida pero el plan no incluye lo que pediste; un 429 significa esperar el número de segundos de Retry-After. Nada más merece reintentarse más de un par de veces desde un shell.

Cuando las llamadas funcionan a mano, la misma cabecera y el mismo cursor pasan al lenguaje que use el proyecto; la página de Node.js es la versión en bucle de este script. El runbook de errores en pnclENGINE cubre cada estado a fondo.

Todos los planes, incluida la clave gratuita.

SIGUIENTEbash curl.sh

Dos variables, un script

La clave gratuita ejecuta todas las solicitudes de esta página. Cuando un bucle necesita más de 100 llamadas al día, la página de precios muestra el plan que sube el límite a 10 por segundo.