Boletim diário automatizado da diplomacia indiana
Coleta os comunicados oficiais do governo da Índia, escreve uma síntese editorial do dia com IA e envia por e-mail antes do expediente.
Todos os dias úteis às 6h (horário de Nova Délhi), o sistema coleta os comunicados publicados pelo Gabinete do Primeiro-Ministro (PIB) e pelo Ministério das Relações Exteriores (MEA) da Índia, gera resumos individuais com Gemini, classifica por tema, escreve uma síntese narrativa do dia com Claude Opus 4.7 em português diplomático, monta um e-mail HTML com a identidade visual da Embaixada do Brasil em Nova Délhi e envia para a lista de destinatários.
Nenhuma intervenção manual no ciclo. O resultado chega na caixa de entrada antes do expediente.
- PM Releases (PIB) — HTTP direto para o mês corrente; Selenium com
pageLoadStrategy=eagercomo fallback automático para virada de mês ou falha de rede - MEA Press Releases
- MEA Speeches & Statements
- MEA Media Briefings
- Resumos individuais com Google Gemini 2.5 Flash (50–60 palavras, em inglês)
- Síntese editorial do dia com Claude Opus 4.7 — parágrafo único, português PT-BR, registro de revista internacional (The Economist, Financial Times)
- Contexto de continuidade — as 3 sínteses anteriores entram no prompt em ordem cronológica, permitindo que ciclos diplomáticos (visitas de estado, cúpulas) tenham fio narrativo entre boletins
- Classificação temática automatizada — agricultura, defesa, energia, comércio, BRICS, América Latina, Brasil, ciência e tecnologia, cooperação sul-sul, entre outros
- E-mail HTML com identidade visual da Embaixada
- Síntese narrativa no topo, abaixo as notícias agrupadas por seção
- Nomes próprios em negrito, tags temáticas coloridas
- Destaque visual para documentos que mencionam o Brasil
- Suporte a destinatários principais (
EMAIL_TO) e em cópia (EMAIL_CC)
- Cada edição salva em
logs/arquivo/notas_YYYYMMDD.html - Síntese salva em
notas_YYYYMMDD.synthesis.txtpara servir de contexto aos próximos boletins - Endpoint
GET /arquivolista edições anteriores
| Dia | Comportamento |
|---|---|
| Segunda-feira | Notas do fim de semana (sábado e domingo) |
| Terça a sábado | Notas do dia anterior |
| Domingo | Sem execução |
git clone https://github.com/tacianoz/notas-do-dia.git
cd notas-do-dia
./rodar.sh --simularO rodar.sh cria o venv, instala as dependências e copia o .env na primeira
execução — preencha as credenciais e rode de novo. Para fazer os passos à mão:
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
cp config/env.example .envEdite o .env com suas credenciais:
| Variável | Descrição |
|---|---|
SUMMARIZER_PROVIDER |
gemini |
GOOGLE_API_KEY |
Chave da API do Gemini (resumos e classificação) |
ANTHROPIC_API_KEY |
Chave da API do Claude (síntese do dia) |
EMAIL_USER / EMAIL_PASSWORD |
Gmail e senha de aplicativo |
EMAIL_FROM / EMAIL_TO |
Remetente e destinatários principais (separados por vírgula) |
EMAIL_CC |
Destinatários em cópia (opcional) |
./rodar.sh # gera e envia por e-mail
./rodar.sh --simular # gera sem enviar, salva em logs/arquivo/Gera o boletim do dia útil mais recente. Antes de começar, o script confere o
acesso às fontes e avisa se elas estiverem bloqueadas — ver Fontes bloqueadas
abaixo. Para rodar sem o wrapper: python generate_daily_notes.py.
O site do MEA responde 403 para IPs de datacenter — o que inclui VPNs comerciais e runners de CI. Na prática o app precisa rodar de uma conexão residencial; tentativas via GitHub Actions falham em todas as seções do MEA, enquanto o PIB passa normalmente.
Quando alguma fonte não responde, a execução aborta sem enviar e-mail, em vez de publicar uma edição à qual falta a fonte principal. O log diz quais fontes caíram e por quê:
Abortando: 3 de 4 fontes não responderam - MEA - Press Releases (HTTP 403 ...)
Nenhum e-mail foi enviado.
Uma seção que carrega e volta com zero publicações não é falha: é um dia sem notícia, e o boletim sai normalmente.
python main.py| Endpoint | Descrição |
|---|---|
GET /health |
Status do serviço |
POST /generate |
Gerar boletim do dia |
POST /generate/custom |
Data específica (body: {"date": "YYYY-MM-DD"}) |
GET /arquivo |
Listar edições arquivadas |
0 6 * * 1-6 cd /caminho/notas-do-dia && ./rodar.sh >> logs/cron.log 2>&1Execução agendada em nuvem (GitHub Actions e afins) não funciona por causa do bloqueio do MEA descrito acima.
notas-do-dia/
├── app/
│ ├── infrastructure/scrapers/ # PM (PIB) e MEA
│ ├── services/ # Sumarização, classificação, HTML
│ ├── core/ # Utilitários (datas, factory)
│ ├── config.py # Configuração via .env
│ ├── emailer.py # Envio SMTP + CC
│ └── logger.py # Loguru com rotação semanal
├── generate_daily_notes.py # Orquestração e entrada do cron
├── app_web.py # API HTTP opcional
├── main.py # Entrypoint Flask
└── deploy/Dockerfile
| Camada | Tecnologia |
|---|---|
| Linguagem | Python 3.11+ |
| Scraping | Selenium, BeautifulSoup, Requests |
| IA — Resumo | Google Gemini 2.5 Flash |
| IA — Síntese | Anthropic Claude Opus 4.7 |
| API web | Flask |
| SMTP (Gmail) + MIME | |
| Logging | Loguru (rotação semanal) |
| Deploy | Docker |