API Flask para consultar a liturgia diária católica a partir da Canção Nova e retornar os dados em JSON, com leituras convertidas para Markdown.
GET /liturgy: retorna data litúrgica, cor, título da celebração e leituras do dia.- Header opcional
period: data no formatodd/mm/yyyy; se omitido, usa a data atual do servidor. GET /privacy: página HTML com termos de privacidade do aplicativo.GET /: resposta simples de saúde/identificação da API.
- Python 3.12 recomendado, definido em
.python-versionpara deploy. - Dependências em
requirements.txt. - Acesso de rede para
https://liturgia.cancaonova.com, usado como fonte externa.
python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -r requirements.txtexport FLASK_ENV=development
flask --app app run --debugAlternativa:
python app.pyLiturgia da data atual:
curl http://127.0.0.1:5000/liturgyLiturgia de uma data específica:
curl -H "period: 23/05/2024" http://127.0.0.1:5000/liturgyResposta resumida:
{
"date_string": {
"day": "23",
"month": "Mai",
"year": "2024"
},
"date": "23/05/2024",
"color": "Verde",
"entry_title": "7a Semana do Tempo Comum",
"readings": {
"first_reading": "...",
"psalm": "...",
"second_reading": "...",
"gospel": "..."
}
}| Variável | Padrão | Uso |
|---|---|---|
BASE_URL |
https://liturgia.cancaonova.com |
Fonte externa usada pelo scraper. |
FLASK_ENV |
não definido | Em development, logs vão para stdout com nível DEBUG; fora disso, usa app.log. |
REQUEST_TIMEOUT |
10 |
Timeout, em segundos, para chamadas HTTP externas. |
CATHOLIC_API_KEY |
não definido | Quando definido, exige header X-API-Key para endpoints da API. |
RATE_LIMIT_ENABLED |
true |
Liga/desliga rate limit em memória. |
RATE_LIMIT_REQUESTS |
120 |
Máximo de requisições por IP no intervalo. |
RATE_LIMIT_WINDOW_SECONDS |
60 |
Janela do rate limit, em segundos. |
MAX_CONTENT_LENGTH |
1024 |
Tamanho máximo aceito para payload da requisição. |
SECURITY_HSTS_ENABLED |
false |
Adiciona HSTS quando a app estiver atrás de HTTPS. |
O projeto já está preparado para Render com:
render.yaml: Blueprint do serviço web..python-version: versão Python usada no build.gunicorn: servidor WSGI de produção emrequirements.txt.
- Faça commit e push das alterações para o GitHub/GitLab/Bitbucket.
- No Render Dashboard, clique em New > Blueprint.
- Conecte o repositório
catholic_api_python. - Confirme o Blueprint detectado em
render.yaml. - Crie o serviço e aguarde o build/deploy terminar.
- Teste a URL pública gerada pelo Render:
curl https://SEU-SERVICO.onrender.com/
curl https://SEU-SERVICO.onrender.com/liturgy
curl -H "period: 23/05/2024" https://SEU-SERVICO.onrender.com/liturgyO Blueprint usa:
Build Command: pip install -r requirements.txt
Start Command: gunicorn app:app --bind 0.0.0.0:$PORT --workers 2 --threads 4 --timeout 30
Health Check Path: /
Se preferir criar sem Blueprint:
- No Render Dashboard, clique em New > Web Service.
- Conecte o repositório.
- Configure:
- Runtime:
Python - Build Command:
pip install -r requirements.txt - Start Command:
gunicorn app:app --bind 0.0.0.0:$PORT --workers 2 --threads 4 --timeout 30 - Health Check Path:
/
- Runtime:
- Adicione as variáveis necessárias em Environment.
Variáveis recomendadas no Render:
| Variável | Valor |
|---|---|
FLASK_ENV |
production |
BASE_URL |
https://liturgia.cancaonova.com |
REQUEST_TIMEOUT |
10 |
RATE_LIMIT_ENABLED |
true |
RATE_LIMIT_REQUESTS |
120 |
RATE_LIMIT_WINDOW_SECONDS |
60 |
MAX_CONTENT_LENGTH |
1024 |
SECURITY_HSTS_ENABLED |
true |
CATHOLIC_API_KEY é opcional. Se for configurada no Render, os clientes precisam enviar:
curl -H "X-API-Key: SUA_CHAVE" https://SEU-SERVICO.onrender.com/liturgyObservações:
- O plano gratuito pode hibernar após inatividade, causando lentidão na primeira requisição.
- O endpoint
/é usado como healthcheck porque não depende da Canção Nova. - A API precisa conseguir acessar
https://liturgia.cancaonova.comem produção.
app.py: aplicação Flask, rotas, logging e registro do middleware.extractor/extractor_service.py: busca a URL da liturgia e extrai os dados do HTML.extractor/config.py: URL base, cookies e headers usados na chamada AJAX.extractor/utils.py: funções utilitárias de data, limpeza de HTML e Markdown.middleware/ExceptionLoggingMiddleware.py: captura exceções não tratadas e retorna JSON 500.adapter/logging_adapter.py: adicionaremote_addraos logs.passenger_wsgi.py: entrypoint WSGI para hospedagem com Passenger.
Mais detalhes em docs/ARCHITECTURE.md.
A verificação mínima de sintaxe usada no projeto é:
PYTHONPYCACHEPREFIX=/private/tmp/catholic-api-pycache python3 -m compileall app.py adapter extractor middleware passenger_wsgi.pyTestes unitários básicos:
python -m unittestChecagem equivalente ao Pylance/Pyright:
npx --yes pyrightAo alterar scraping, prefira testes com HTML fixture ou mocks de requests para evitar depender da disponibilidade da Canção Nova.
Este repositório inclui arquivos específicos para agentes:
AGENTS.md: fonte canônica de instruções para agentes de código.llms.txt: índice curto para ferramentas e agentes que procuram um mapa LLM-friendly.CLAUDE.md: entrada do Claude Code, importandoAGENTS.md.GEMINI.mde.gemini/settings.json: contexto para Gemini CLI..github/copilot-instructions.mde.github/instructions/*.instructions.md: GitHub Copilot..cursor/rules/*.mdc: Cursor..devin/rules/*.mde.windsurf/rules/*.md: Devin/Windsurf Cascade.REVIEW.md: diretrizes específicas para agentes de revisão de PR..agents/skills/*/SKILL.md: skills repo-scoped compartilhadas por Codex e GitHub Copilot agent..claude/skills/*/SKILL.md: skills de projeto para Claude Code..gemini/skills/*/SKILL.md: skills de workspace para Gemini CLI.
Veja docs/AI_AGENTS.md.