거리 달리기 대회 통합 서비스: 여러 사이트의 대회 정보를 날짜, 장소, 거리, 가격, 공식 링크와 함께 한 곳에 모았습니다
Agregador de corridas de rua: reunimos provas de vários sites de inscrição em um só lugar, com data, local, distâncias, preço e link oficial.
스포츠·피트니스TypeScript · CSSGitHub @AndersonBF온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗<<<<<<< HEAD
Agregador de corridas de rua por região. Reúne provas cadastradas em diversos sites de inscrição (Ticket Sports, Sympla, Doity, etc.) em um só lugar, com nome, data, local, distâncias, preço e link oficial de inscrição.
# 1. Instalar dependências
npm install
# 2. Subir o banco (Postgres na porta 5433)
npm run db:up
# 3. Criar as tabelas
npm run db:push
# 4. Popular o banco:
npm run scrape # corridas REAIS do PR (recomendado) — ver seção Scraping
# ou
npm run db:seed # 9 corridas reais fixas (demo offline, sem internet)
# 5. Rodar em desenvolvimento
npm run dev
Acesse:
.env → ADMIN_PASSWORD).env)| Variável | Descrição |
|---|---|
DATABASE_URL | conexão Postgres |
ADMIN_PASSWORD | senha do painel admin |
ADMIN_SESSION_SECRET | segredo para assinar o cookie de sessão |
NEXT_PUBLIC_DEFAULT_STATE | UF padrão exibida na home (ex: SP) |
NEXT_PUBLIC_SITE_NAME | nome do site |
Tudo é gerenciável pelo painel /admin: criar, editar, publicar/arquivar e
excluir corridas. Cada corrida guarda o link de inscrição do site de origem.
A coleta é plugável: cada site vira um arquivo em src/scrapers/ implementando
a interface Scraper (ver src/scrapers/types.ts). Os scrapers ativos ficam
registrados em src/scrapers/index.ts.
Scraper principal: corridasbr (src/scrapers/corridasbr.ts)
Lê os calendários estaduais do corridasbr.com.br (Calendario.asp + 2 + 3,
cobrindo vários meses), abre a página de cada evento e extrai nome, data,
cidade, local de largada, distâncias, organizador e o link real de inscrição
(Ticket Sports, Sympla, Doity, etc.) — que o site guarda em siteevento.asp?c=.
Depois acessa a própria página de inscrição para pegar também:
og:image → JSON-LD → primeiro <img> de conteúdo
(validado por HEAD para não gravar imagem quebrada);R$ X,XX do HTML, com heurística que ignora taxas (<R$20)
e premiação (>R$900 ou teto > 5× o piso).Plataformas 100% JavaScript (ex: Ticket Sports) não expõem preço no HTML, então nesses casos o preço fica "Sob consulta". Funciona para qualquer UF.
npm run scrape # usa a UF de NEXT_PUBLIC_DEFAULT_STATE (PR)
npm run scrape -- SP # força a UF
CORRA_SCRAPE_LIMIT=5 npm run scrape -- PR # limita nº de eventos (testes)
O runner deduplica por (source, externalId) (onde externalId é o id do
evento no corridasbr), então rodar várias vezes atualiza em vez de
duplicar. A fonte exibida (source) é a plataforma real de inscrição.
Agende com cron (Linux) ou Agendador de Tarefas (Windows) para manter atualizado — ex: diariamente.
O
src/scrapers/sympla.tspermanece como exemplo de outra abordagem (API JSON), mas não está ativo no registro.
⚠️ Antes de ativar um scraper: confira os Termos de Uso e o
robots.txtde cada site. Prefira APIs oficiais quando existirem. Os exemplos são defensivos (retornam vazio em caso de erro) e os endpoints/seletores podem precisar de ajuste conforme os sites mudam.
5afd86c7261cc96f7d45edb53e56d29d161ae577