O que Atom faz?
Use esta skill quando um script precisar ler um feed e você quiser uma estrutura normalizada para RSS 2.0 e Atom, sem dependência de terceiros. Ela faz uma única passagem com ElementTree e extrai title, link, id, published e summary de qualquer formato, de modo que o código downstream (dedup, resumo, alerta) nunca precise se ramificar por tipo de feed.
Quando invocar
- O usuário diz: "leia este feed RSS", "consulte um feed de blog", "obtenha as últimas entradas de um feed Atom", "monitore um site para novos posts".
- O código já obteve os bytes do feed e precisa de entradas estruturadas.
Quando NÃO invocar
- A fonte possui uma API JSON real – chame essa API em vez de raspar um feed.
- Você precisa de tratamento completo de peculiaridades do feedparser (todos os dialetos malformados) – instale o
feedparser.
Exemplo concreto
Entrada do usuário:
Leia https://example.com/feed.xml e imprima o título e o link de cada post.
Saída:
# Copie assets/feed.py para seu projeto e então:
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 item é um dicionário com as mesmas chaves, independentemente de o feed ser RSS ou Atom; portanto, dedup por id e ordenação por published funcionam sem casos especiais.
Padrão a aplicar
- Analise uma vez com
xml.etree.ElementTree; itere sobreitem(RSS) e{atom}entry(Atom). - Normalize para um conjunto estável de chaves, de modo que o restante do pipeline seja independente do formato do feed.
- Fallback de
guid/atomidpara o link, para que cada item tenha uma identidade estável para dedup. - Mantenha a rede fora do analisador: passe bytes/texto para que permaneça puro e testável.
Referência: assets/feed.py.
Fonte
Destilado dos projetos de agregação de notícias do autor. v1.0.0. Veja também: [[gmail-imap-digest]], [[sqlite-state]], [[pipeline-orchestrator]].
→ Construa o robô executável completo com Trawlkit.