Lector de Feeds RSS / Atom
Usa esta habilidad cuando un script necesite leer un feed y quieras una forma normalizada tanto para RSS 2.0 como para Atom, sin dependencias de terceros. Realiza una sola pasada con ElementTree y extrae title, link, id, published y summary de ambos formatos, de modo que el código downstream (deduplicación, resumen, alerta) nunca tenga que bifurcarse según el tipo de feed.
Cuándo invocarla
- El usuario dice: "lee este feed RSS", "consulta un feed de blog", "obtén las últimas entradas de un feed Atom", "monitorea un sitio en busca de nuevas publicaciones".
- El código ya ha obtenido los bytes del feed y necesita entradas estructuradas.
Cuándo NO invocarla
- La fuente tiene una API JSON real: llama a esa API en lugar de raspar un feed.
- Necesitas manejar todas las peculiaridades de feedparser (cada dialecto malformado): instala
feedparser.
Ejemplo concreto
Entrada del usuario:
Lee https://example.com/feed.xml e imprime el título y enlace de cada publicación.
Salida:
# Copia assets/feed.py en tu proyecto, luego:
from urllib.request import urlopen
from feed import parse_feed
with urlopen("https://example.com/feed.xml", timeout=20) as r:
for item in parse_feed(r.read()):
print(item["title"], "->", item["link"])
Cada elemento es un diccionario con las mismas claves tanto si el feed es RSS como Atom, por lo que la deduplicación por id y la ordenación por published funcionan sin casos especiales.
Patrón a aplicar
- Analiza una vez con
xml.etree.ElementTree; itera sobreitem(RSS) y{atom}entry(Atom). - Normaliza a un conjunto de claves estable para que el resto del pipeline sea independiente del formato del feed.
- Recurre de
guid/atomidal enlace para que cada elemento tenga una identidad estable para deduplicación. - Mantén la red fuera del analizador: pasa bytes/texto para que se mantenga puro y testeable.
Referencia: assets/feed.py.
Fuente
Destilado de los proyectos de agregación de noticias del autor. v1.0.0. Ver también: [[gmail-imap-digest]], [[sqlite-state]], [[pipeline-orchestrator]].
→ Construye el bot completo y ejecutable con Trawlkit.