pnclFEED Chave gratuita

Notas de quickstart

Faça polling de vários esportes num único script Python

Uma sessão, um cursor por esporte, e um ritmo compartilhado. Uma pequena extensão do loop do quickstart que cobre vários boards sem surpresas.

O loop do quickstart consulta um esporte. Cobrir vários esportes é um loop sobre uma lista de IDs de esporte, com um cursor por esporte e um ritmo que respeita a cota compartilhada. É uma mudança pequena, e um erro de orçamento se esconde dentro dela.

Um cursor por esporte, uma sessão para todos

O cursor since acompanha uma posição nas mudanças de um board, então cada esporte guarda o seu. Um dicionário indexado por ID de esporte basta: leia o cursor do board que está prestes a consultar, envie-o, guarde o novo. A sessão HTTP, com a chave no cabeçalho, é compartilhada entre todos, exatamente como o quickstart de Python a constrói, verificado em 2026-10-12.

SPORTS = [1, 2, 4]           # soccer, tennis, hockey
cursors = {}

while True:
    for sport_id in SPORTS:
        params = {"sport_id": sport_id}
        since = cursors.get(sport_id)
        if since is not None:
            params["since"] = since
        r = s.get(URL, params=params, timeout=10)
        if r.status_code == 429:
            time.sleep(int(r.headers.get("Retry-After", "5")))
            continue
        r.raise_for_status()
        data = r.json()
        cursors[sport_id] = data["last"]
        for ev in data["events"]:
            print(sport_id, ev["home"], "v", ev["away"])
    time.sleep(60)

Uma passagem round-robin por minuto cobre cada board uma vez por minuto, e os cursores mantêm os deltas de cada esporte separados.

O erro de orçamento: multiplicar sem notar

A chave gratuita permite 100 chamadas por dia, conforme a página de preços, verificado em 2026-10-12. Um esporte a cada 15 minutos cabe o dia todo com 96 chamadas. Três esportes nesse ritmo precisam de 288, e o script morre no meio da tarde. O orçamento é por chave, não por esporte, então o intervalo tem que esticar com a contagem de esportes: três esportes na chave gratuita significa uma rodada a cada 45 minutos, não três boards a cada 15.

Num plano pago a mesma aritmética muda para por segundo: uma rodada de três boards a cada segundo são 3 requisições por segundo, bem dentro dos níveis REST, e o intervalo deixa de ser uma questão de orçamento e vira uma de frescor.

Quando um script deixa de bastar

Um loop basta enquanto os boards compartilham um ritmo. Quando um esporte precisa de um intervalo mais rápido que os demais, ou uma falha num não deve travar os outros, divida os esportes entre processos. Uma única linha por rodada, com a contagem de esportes e o número de eventos alterados, mantém o loop observável sem um painel: quando a linha para de aparecer, o script parou, e esse é o monitoramento que importa nesse tamanho. Até lá, o loop único com cursores por esporte é a coisa mais simples que cobre a sua lista.

Uma sessão, um cursor por esporte, um intervalo honesto. Polling multiesporte é um dicionário e um loop, mais a aritmética para manter o orçamento intacto.