尚未收集仓库信息。
尚未检测到更新。GitHub 发布版本后会显示在这里。
Rastreador diário de passagens
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗Todo dia, por volta das 7h de Madri, um robô no GitHub busca os preços de passagens Barcelona (BCN) → São Paulo (GRU, VCP ou CGH) para cada dia de ida entre 1/nov e 23/dez/2026, e da volta para cada dia entre 1/jan e 15/fev/2027. Ele guarda tudo num histórico e publica um dashboard que abre no celular ou no computador.
Regras aplicadas a todas as opções:
Tudo isso, além das datas, das companhias em destaque (LATAM direto e Royal Air Maroc via
Casablanca), da data-limite de chegada (29/12/2026) e dos pesos do score, pode ser mudado no
arquivo config.yaml.
Você vai precisar de uma conta gratuita no GitHub. São uns 15 minutos.
flight-and-ticket.Opção mais simples, pelo aplicativo GitHub Desktop (https://desktop.github.com):
C:\Users\Usuario\voos-bcn-sp.flight-and-ticket.Ou pelo terminal, se preferir (troque SEU-USUARIO pelo seu usuário do GitHub):
git -C C:/Users/Usuario/voos-bcn-sp remote add origin https://github.com/SEU-USUARIO/flight-and-ticket.git
git -C C:/Users/Usuario/voos-bcn-sp push -u origin main
https://SEU-USUARIO.github.io/flight-and-ticket/.
Salve esse link nos favoritos do celular.A partir daí, roda sozinho todo dia.
Só se um dia for preciso trocar de fonte (veja "Limitações").
SERPAPI_KEY, valor = a chave criada em https://serpapi.com. Clique em Add secret.config.yaml, troque etapa_a: e/ou etapa_b: para serpapi.O site novo (home com busca, tela "buscando…" e resultados) é um app Next.js na raiz do repositório (app/, lib/).
data/public/*.json no GitHub; cada coleta atualiza o site sem republicar.Configuração (uma vez só, na Vercel):
flight-and-ticket (Root Directory padrão, ./).GITHUB_TOKEN: token fine-grained do GitHub, só deste repositório, com Contents: Read-only e
Actions: Read and write. Crie em GitHub → Settings → Developer settings → Fine-grained tokens.INVITE_CODE: o código de convite do beta, escolhido por você.main é o site oficial.Rodar localmente: npm install e npm run dev.
Para pesquisar qualquer outra rota sem mexer no acompanhamento diário:
BCN, GRU) ou cidade (LON, PAR, MIL, NYC, SAO, RIO), que cobre todos os aeroportos da cidade;2026-11-10 ou 2026-11-01 a 2026-11-15;https://SEU-USUARIO.github.io/flight-and-ticket/buscas/, cada busca com seu próprio
dashboard. Rodar a mesma busca de novo atualiza a página e acumula histórico.Os dados ficam em data/buscas/<rota_datas>/. A coleta diária continua igual e só usa o config.yaml.
Etapa A (99 buscas por dia): para cada data de ida e de volta, busca passagens só de ida no Google
Flights, com até 1 escala. O código de cidade SAO cobre GRU, VCP e CGH numa busca só. Cada opção é
guardada com companhia(s), números de voo, rota, duração de cada voo, tempo de conexão, duração total,
preço, fonte, hora da consulta e link para o Google Flights. Depois os filtros (escalas e 16h por voo)
marcam cada opção como válida ou descartada, sempre com o motivo.
Etapa B (20 buscas por dia): com os resultados da Etapa A, monta as combinações ida+volta de melhor score (sempre com vagas para LATAM direto e Royal Air Maroc) e consulta o preço real da passagem de ida e volta, que muitas vezes é bem mais barata que dois trechos separados. No teste de 20/out/2026, LATAM 10/nov + 25/jan custava 1.670 € em dois trechos e 1.244 € como ida e volta. O dashboard mostra as duas cifras.
"Calendário de preços" (matriz de datas): avaliado e descartado. Desde ago/2026 o Google protege essa consulta, que só funciona dentro da própria página, e ela também não respeitaria a regra das 16h. A matriz ida × volta do dashboard é montada com os dados da Etapa A, que já cobrem todas as datas.
Pausas e falhas: 4 a 8 segundos entre buscas. Uma busca que falha é repetida até 3 vezes, com espera crescente (15 s, 45 s…). Se ainda assim falhar, o erro é registrado e a coleta segue para a próxima data. Para quando houver 8 falhas seguidas (provável bloqueio). Se a fonte principal falhar, tenta a reserva (navegador).
Histórico: cada execução cria uma pasta nova em data/runs/AAAA-MM-DD_HHMM/ e nada é
sobrescrito:
oneway.csv: todas as opções da Etapa A, inclusive as descartadas e o motivo;roundtrip.csv: as combinações da Etapa B;errors.csv: cada tentativa que deu erro;meta.json: resumo (buscas, falhas, fontes, horário).O dashboard (docs/index.html) é regenerado a partir dessas pastas. As tendências usam a última coleta
de cada dia. Cada dia ocupa uns 200 KB, então a temporada inteira cabe com folga no GitHub.
Precisa do Python 3.10 ou mais novo (https://www.python.org).
cd C:/Users/Usuario/voos-bcn-sp
python -m venv .venv
.venv/Scripts/python -m pip install -r requirements.txt
.venv/Scripts/python -m playwright install chromium
.venv/Scripts/python -m tracker.collect --poc
.venv/Scripts/python -m tracker.collect
.venv/Scripts/python -m tracker.build_dashboard
collect (com --poc) é a prova de conceito: 3 idas + 3 voltas, com todos os dados
impressos na tela. Ele grava em data/poc/, que não entra no histórico.collect é a coleta completa, de uns 15 a 20 minutos.docs/index.html no navegador..venv/Scripts/python -m unittest discover -s tests -t .Fonte (config.yaml) | O que é | Custo | Limitações |
|---|---|---|---|
google_ff (principal, Etapa A) | Biblioteca fast-flights 3.1.0: lê a página do Google Flights por HTTP | Grátis | Não é API oficial. Pode quebrar se o Google mudar o site. O Google pode bloquear o endereço de onde vêm as buscas, sobretudo de servidores como os do GitHub. Traz só as ~8 a 10 opções que o Google mostra primeiro. |
google_browser (Etapa B e reserva da A) | Abre o Google Flights num Chrome invisível (Playwright) | Grátis | Mesmos riscos do anterior, e mais lento (~6 s por página). É o único jeito gratuito de obter o preço real de ida e volta. |
serpapi | SerpApi Google Flights API: serviço pago que faz a coleta e entrega dados estruturados | Pago por busca (há plano grátis pequeno) | Estável e sem bloqueios, mas 99 + 40 buscas por dia exigem plano pago. Código pronto, não testado sem chave. |
ignav | API da Ignav | — | Só o espaço reservado. Precisa da documentação e de uma chave para implementar. |
Outras observações:
tracker/gflights.py), e é ali que o conserto
acontece se o Google mudar o formato.typing_extensions, que já está no requirements.txt.tracker/gflights.py.pausa_min_s e pausa_max_s;etapa_a: google_browser;config.yaml tudo que é configurável
tracker/collect.py coleta (etapas A e B, pausas, novas tentativas, gravação)
tracker/providers/ fontes de dados (interface comum em base.py)
tracker/gflights.py leitura das páginas do Google Flights
tracker/filters.py regras de escalas e de 16h por voo
tracker/scoring.py score do Top 10
tracker/build_dashboard.py gera docs/index.html
tracker/dashboard_template.html layout do dashboard
data/runs/ histórico (uma pasta por coleta)
docs/index.html dashboard publicado no GitHub Pages
.github/workflows/coleta-diaria.yml agendamento diário