#!/usr/bin/env bash # BestsOddsApi — exemplo cURL (token -> esportes -> eventos ao vivo -> odds -> uso -> ticket WS) # # Uso: # export BESTSODDSAPI_BASE_URL="http://localhost:8010" # export BESTSODDSAPI_CLIENT_ID="" # export BESTSODDSAPI_CLIENT_SECRET="" # bash docs/examples/curl.sh # # Requer: curl, jq. Nunca grave segredos neste arquivo. set -euo pipefail : "${BESTSODDSAPI_BASE_URL:=http://localhost:8010}" : "${BESTSODDSAPI_CLIENT_ID:?defina BESTSODDSAPI_CLIENT_ID}" : "${BESTSODDSAPI_CLIENT_SECRET:?defina BESTSODDSAPI_CLIENT_SECRET}" SCOPES="${BESTSODDSAPI_SCOPES:-events:read odds:read results:read usage:read ws:connect}" API="$BESTSODDSAPI_BASE_URL/api/v1" echo "==> 1. Access token (client_credentials)" TOKEN="$(curl -sS --fail-with-body -X POST "$BESTSODDSAPI_BASE_URL/oauth/token" \ -H 'Accept: application/json' \ --data-urlencode grant_type=client_credentials \ --data-urlencode client_id="$BESTSODDSAPI_CLIENT_ID" \ --data-urlencode client_secret="$BESTSODDSAPI_CLIENT_SECRET" \ --data-urlencode scope="$SCOPES" | jq -r .access_token)" AUTH=(-H "Authorization: Bearer $TOKEN" -H 'Accept: application/json') echo "==> 2. Esportes" curl -sS "${AUTH[@]}" "$API/sports" | jq '.data' echo "==> 3. Eventos ao vivo (futebol, 10 por página) + cabeçalhos de limite" HEADERS="$(mktemp)"; trap 'rm -f "$HEADERS"' EXIT LIVE="$(curl -sS -D "$HEADERS" "${AUTH[@]}" "$API/events/live?sport=soccer&per_page=10")" grep -i '^x-ratelimit\|^x-request-id' "$HEADERS" || true echo "$LIVE" | jq '{stale: .meta.stale, source_updated_at: .meta.source_updated_at, next_cursor: .meta.pagination.next_cursor, events: [.data[] | {id, status, home: .home_team.name, away: .away_team.name}]}' EVENT_ID="$(echo "$LIVE" | jq -r '.data[0].id // empty')" if [[ -n "$EVENT_ID" ]]; then echo "==> 4. Odds do evento $EVENT_ID (mercado 1x2)" curl -sS "${AUTH[@]}" "$API/events/$EVENT_ID/odds?market=1x2" \ | jq '{sequence: .meta.sequence, stale: .meta.stale, odds: [.data[] | {bookmaker: .bookmaker.slug, market, selection_key, line, price, suspended}]}' else echo "==> 4. Nenhum evento ao vivo agora; pulando odds." fi echo "==> 5. Próxima página (paginação por cursor)" NEXT="$(echo "$LIVE" | jq -r '.meta.pagination.next_cursor // empty')" if [[ -n "$NEXT" ]]; then curl -sS -G "${AUTH[@]}" "$API/events/live" --data-urlencode "cursor=$NEXT" --data-urlencode per_page=10 | jq '.data | length' else echo "(sem próxima página)" fi echo "==> 6. Resultados de ontem (retenção de 5 dias)" YESTERDAY="$(date -u -d 'yesterday' +%F 2>/dev/null || date -u -v-1d +%F)" curl -sS "${AUTH[@]}" "$API/results?date=$YESTERDAY&per_page=5" | jq '.data | length' echo "==> 7. Uso e limites" curl -sS "${AUTH[@]}" "$API/usage" | jq '.data.windows' echo "==> 8. Ticket WebSocket (PROVISÓRIO — gateway em implementação)" curl -sS -X POST "${AUTH[@]}" "$API/ws/authorize" | jq '{expires_at: .data.expires_at, connection: .data.connection}' # Não registre o ticket em logs: ele é de uso único e dá acesso à conexão. echo "==> Erro de exemplo (parâmetro desconhecido -> 400 bad_request)" curl -sS "${AUTH[@]}" "$API/events/live?foo=bar" | jq '.error'