Notas de quickstart
Automatize o polling de odds no Windows com o Agendador
Use o Agendador de Tarefas para o quickstart de Python no Windows: uma requisição por execução, arquivo de cursor, wrapper para variáveis e log como checagem.
O Windows não tem cron, mas não precisa de um para este trabalho. O quickstart de Python faz polling na API de odds num loop; numa máquina Windows, o mesmo agendamento roda no Agendador de Tarefas, com a mesma regra da versão cron: uma execução faz uma requisição e termina, e um pequeno arquivo carrega o cursor entre as execuções. A uma execução a cada 15 minutos, você tem 96 requisições por dia, dentro do orçamento publicado da chave gratuita de 100 requisições por dia e 20 por minuto, como a página de preços informa, verificado em 2026-10-21.
Uma execução, uma requisição
Tire o loop do script. Cada execução lê o cursor, envia-o como since, imprime o que mudou, grava o novo cursor e termina:
import json, os, sys, requests
BASE = os.environ["ODDS_BASE_URL"]
KEY = os.environ["ODDS_API_KEY"]
CURSOR = r"C:\odds\cursor.txt"
since = None
if os.path.exists(CURSOR):
since = open(CURSOR).read().strip()
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"]))
print(f"{len(data['events'])} changed events")
Uma execução que falha sai com código de erro e não faz mais nada. A próxima execução agendada é a nova tentativa, e o cursor fica intacto, então nada é buscado duas vezes e nada é pulado.
O wrapper que carrega o ambiente
O Agendador de Tarefas inicia tarefas com um ambiente mínimo, e as duas variáveis que o script precisa não estão lá por padrão. A correção limpa é um arquivo batch que as define e então chama o Python:
@echo off
set ODDS_BASE_URL=https://your-base
set ODDS_API_KEY=your-key
"C:\Python312\python.exe" C:\odds\fetch.py >> C:\odds\odds.log 2>&1
Dois detalhes costumam morder. Coloque o caminho do interpretador entre aspas se ele tiver espaços e, ao criar a tarefa, preencha o campo Iniciar em com a pasta do script, porque o diretório de trabalho da tarefa não é o diretório do script. Caminhos relativos dentro do script resolvem contra o Iniciar em, e é por isso que o caminho do cursor acima é absoluto.
A tarefa em si
Um comando schtasks cria o agendamento:
schtasks /create /tn OddsPoll /sc minute /mo 15 /tr "C:\odds\run.bat" /rl highest /f
Isso roda o wrapper a cada 15 minutos. Abra a tarefa na janela do Agendador de Tarefas uma vez e ajuste a política de sobreposição para não iniciar uma nova instância: uma execução lenta nunca se embolará com a seguinte, o mesmo papel que o flock faz no Linux. A coluna Resultado da última execução é o primeiro lugar a olhar quando algo sai errado; 0x0 é sucesso e qualquer outro valor é uma execução falha, com o motivo no log.
Olhe o log, não a tarefa
Sem daemon, o log anexado é a checagem de saúde. Uma linha por execução com a contagem de eventos alterados basta: um dia de linhas prova o ritmo, e um log que para de crescer aponta para a tarefa, não para a API. Confira primeiro os caminhos entre aspas e as duas variáveis; ambos falham em silêncio num contexto agendado.
O formato supera o Agendador de Tarefas exatamente onde a versão em loop o supera: preços mais rápidos que uma vez por minuto, ou quedas empurradas para você, pertencem a uma conexão mantida aberta e a um serviço, não a um agendador. Para tudo o que a chave gratuita consegue cadenciar, uma tarefa, um wrapper e um arquivo de cursor são a instalação inteira.