Pular para o conteúdo principal

Relatórios (.report.json) e data/index.jsonl

Além do snapshot de notícias, cada execução grava dois arquivos de metadados.

news-*.report.json — diagnóstico da execução​

Gêmeo do snapshot (mesmo nome, extensão .report.json). Estrutura:

{
"run_id": "20261005T000112Z-a1b2c3",
"started_at": "2026-10-05T00:01:12Z",
"finished_at": "2026-10-05T00:07:43Z",
"duration_seconds": 391.2,
"jsonl": "news-2026-10-05T000112Z.jsonl",
"schema_version": 1,
"totals": {
"feeds": 81, "ok": 74, "empty": 3, "failed": 4,
"items": 2631, "skipped_seen": 0
},
"routes": {"direct": 69, "proxy": 3, "mirror": 2, "failed": 7},
"proxies": {"configured": 10, "disabled": 1},
"feeds": [
{
"feed_name": "Metrópoles - Política",
"feed_slug": "metropoles-politica",
"feed_url": "https://www.metropoles.com/politica/feed",
"feed_kind": "rss",
"status": "ok",
"items": 40,
"route": "direct",
"via": "direct",
"http_status": 200,
"strategy": "rss",
"elapsed": 1.42,
"attempts": 1,
"error": "",
"tried": ["direct:direct"]
}
]
}

Campos por feed (FeedReport):

CampoSignificado
statusok (tem itens), empty (baixou, mas nada passou) ou error (nenhuma rota funcionou).
route / viaRota vencedora e o proxy/espelho usado (credenciais mascaradas).
strategyParser que produziu os itens (rss, html:jsonld+cards, markdown, rss-fallback, …).
attempts / triedQuantas tentativas e as últimas rotas tentadas (com o erro resumido) — ótimo para depurar um feed problemático.
errorMotivo da falha ou bozo_reason do feedparser.

:::tip Depurando um feed Procure o feed no .report.json mais recente e olhe tried. Exemplos de diagnóstico: HTTP 403 em todas as rotas = bloqueio forte (considere proxies); conteúdo inválido/bloqueado = página de bloqueio ou feed sem itens; status: empty com strategy: html:vazio = os seletores não acharam manchetes. :::

data/index.jsonl — histórico de execuções​

Uma linha por execução, append-only — serve para listar o acervo sem abrir os snapshots:

{"run_id":"20261005T000112Z-a1b2c3","collected_at":"2026-10-05T00:01:12Z",
"file":"2026/news-2026-10-05T000112Z.jsonl","report":"2026/news-2026-10-05T000112Z.report.json",
"items":2631,"feeds_ok":74,"feeds_empty":3,"feeds_failed":4,
"duration_seconds":391.2,"routes":{"direct":69,"proxy":3,"mirror":2,"failed":7}}

No .gitattributes, data/index.jsonl usa merge=union: se duas execuções commitarem ao mesmo tempo, o git junta as linhas das duas pontas em vez de gerar conflito.

# listar o histórico
jq -r '[.collected_at, .items, .file] | @tsv' data/index.jsonl