RSS / Atom 摘要閱讀器
當腳本需要讀取摘要,且希望在 RSS 2.0 與 Atom 之間擁有統一的正規化格式、且不依賴第三方套件時,使用此技能。它透過單一次的 ElementTree 解析,從任一格式中提取 title、link、id、published 與 summary,讓後續的程式碼(去重、摘要、警報)無需因摘要類型而分支處理。
何時使用
- 使用者說:「讀取這個 RSS 摘要」、「輪詢部落格摘要」、「取得 Atom 摘要的最新條目」、「監控網站的新貼文」。
- 程式碼已取得摘要位元組資料,需要結構化的條目。
何時不使用
- 來源提供真正的 JSON API——應優先呼叫 API 而非解析摘要。
- 需要完整的 feedparser 異常處理(處理各種格式錯誤的方言)——請安裝
feedparser。
具體範例
使用者輸入:
Read https://example.com/feed.xml and print each post title and link.
輸出:
# 將 assets/feed.py 複製到你的專案中,然後:
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"])
無論摘要為 RSS 或 Atom,每個條目都是具有相同鍵值的字典,因此根據 id 去重與根據 published 排序無需特殊處理。
應用的模式
- 使用
xml.etree.ElementTree解析一次;疊代 RSS 的item與 Atom 的{atom}entry。 - 正規化為穩定的鍵值集合,使管線其餘部分與摘要格式無關。
- 從
guid/Atom 中的id回退至連結,確保每個項目有穩定的識別碼以利去重。 - 將網路處理與解析器分離:傳入位元組或文字,使其保持純粹且可測試。
參考:assets/feed.py。
來源
萃取自作者的新聞聚合專案。v1.0.0。 另請參閱:[[gmail-imap-digest]]、[[sqlite-state]]、[[pipeline-orchestrator]]。
→ 使用 Trawlkit 構建完整可執行的機器人。