Visão Geral
Sobre a API
O NVGO Civitas AI é uma API REST que processa feeds RSS e utiliza inteligência artificial para análise e categorização automática de notícias.
- Categorização automática de notícias
- Análise de localização geográfica
- Análise de sentimento (positivo/negativo)
- Filtros inteligentes por localização e eventos
- Cache inteligente para otimização
Informações Técnicas
http://localhost:8000/api
Usuário Padrão
database/seeders/UserSeeder.phpdatabase/seeders/UserSeeder.phpCategorias Padrão
Quando nenhum parâmetro events é fornecido, o sistema utiliza as seguintes categorias padrão para classificação automática das notícias:
Sistema de Cache
Cache Inteligente
A API implementa um sistema de cache que evita reprocessamento de feeds já analisados.
Duração do Cache
1 dia (24 horas)
Os resultados são cacheados por 24 horas para otimizar performance e reduzir custos de API.
Chave do Cache
Combinação de:
- • URL do feed RSS
- • Filtro de localização (se fornecido)
- • Lista de eventos (se fornecida)
Exemplo de Resposta com Cache
"message": "RSS feed processed successfully (cached result)",
"request_id": 123,
"cached": true,
"original_request_date": "2024-01-01T10:30:00.000000Z",
"total_items_saved": 25,
"matching_items_count": 8,
"all_news": [...],
"matching_news": [...]
}
Autenticação
Importante
Todas as rotas (exceto criação de token) requerem autenticação via Bearer Token no header Authorization.
-H "Authorization: Bearer 1|abc123def456..." \
-H "Content-Type: application/json" \
-d '{"rss_url": "https://exemplo.com/feed.xml"}'
Endpoints da API
/api/tokens/create
No Auth
Cria um novo token de acesso para o usuário
Parâmetros
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
email |
string | Sim | Email do usuário |
password |
string | Sim | Senha do usuário |
device_name |
string | Sim | Nome do dispositivo/aplicação |
Exemplo de Requisição
-H "Content-Type: application/json"
-d '{
"email": "value",
"password": "value",
"device_name": "value"
}'
Resposta
"token": "value",
"user": {}
}
"message": "Credenciais inválidas"
}
/api/user
Auth Required
Retorna informações do usuário autenticado
Exemplo de Requisição
-H "Authorization: Bearer YOUR_TOKEN"
Resposta
"id": 123,
"name": "value",
"email": "value",
"created_at": {},
"updated_at": {}
}
/api/process-rss
Auth Required
Processa um feed RSS e analisa as notícias usando IA
Parâmetros
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
rss_url |
string | Sim | URL do feed RSS |
location |
string | Não | Filtro por localização |
events |
array | Não | Lista de eventos para filtrar |
limit |
integer | Não | Quantidade máxima de itens do feed a serem processados. Padrão: 20. |
offset |
integer | Não | Linha inicial do feed a ser processada (quantos itens pular). Padrão: 0. |
Exemplo de Requisição
-H "Authorization: Bearer YOUR_TOKEN"
-H "Content-Type: application/json"
-d '{
"rss_url": "value",
"location": "value",
"events": "[]"
"limit": 20,
"offset": 0
}'
Resposta
"message": "value",
"request_id": 123,
"cached": true,
"total_items_saved": 123,
"matching_items_count": 123,
"all_news": [],
"matching_news": []
}
"error": "Failed to fetch RSS feed"
}
Exemplo Detalhado de Resposta
Parâmetros limit e offset
limit (opcional, padrão 20): Define quantos itens do feed RSS serão processados.
offset (opcional, padrão 0): Define a partir de qual item do feed o processamento deve começar.
Use esses parâmetros para controlar o volume de dados processados e evitar timeouts em feeds grandes.
Processamento Novo:
"message": "RSS feed processed successfully",
"request_id": 123,
"cached": false,
"total_items_saved": 25,
"matching_items_count": 8,
"all_news": [
{
"id": 1,
"title": "Nova política de transporte público em São Paulo",
"content": "A prefeitura de São Paulo anunciou hoje...",
"url": "https://g1.globo.com/sp/sao-paulo/noticia/...",
"location": "São Paulo, SP",
"event": "Transporte e Transito",
"sentiment": true,
"matches_criteria": true,
"request_id": 123,
"created_at": "2024-01-01T10:30:00.000000Z",
"updated_at": "2024-01-01T10:30:00.000000Z"
}
],
"matching_news": [...]
}
Resultado em Cache:
"message": "RSS feed processed successfully (cached result)",
"request_id": 123,
"cached": true,
"original_request_date": "2024-01-01T10:30:00.000000Z",
"total_items_saved": 25,
"matching_items_count": 8,
"all_news": [...],
"matching_news": [...]
}
Campo Sentiment
O campo sentiment indica o sentimento da notícia:
- true = Sentimento Positivo
- false = Sentimento Negativo
/api/tokens
Auth Required
Lista todos os tokens do usuário autenticado
Exemplo de Requisição
-H "Authorization: Bearer YOUR_TOKEN"
Resposta
"tokens": []
}
/api/tokens/revoke
Auth Required
Revoga todos os tokens do usuário autenticado
Exemplo de Requisição
-H "Authorization: Bearer YOUR_TOKEN"
Resposta
"message": {}
}
Exemplos Práticos
Processamento Básico
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"rss_url": "https://g1.globo.com/rss/g1/"
}'
Com Filtros
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"rss_url": "https://g1.globo.com/rss/g1/",
"location": "São Paulo",
"events": ["Transporte e Transito", "Iluminação Pública"]
}'