WallpaperMachine
당신이 사랑하는 배경화면, 맥에서 새롭게 만나보세요
저장소 정보는 아직 수집하지 않았습니다.
아직 감지된 업데이트가 없습니다. 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