Atom フィードリーダー は何をしますか?
このスキルは、スクリプトがフィードを読み取る必要がある場合に、サードパーティの依存関係なしに、RSS 2.0 と Atom の両方で同一の正規化された形状を提供します。ElementTree を 1 回パスし、どちらの形式からも title、link、id、published、summary を取得するため、後続のコード(重複排除、ダイジェスト、アラート)がフィードタイプごとに分岐する必要がなくなります。
呼び出すタイミング
- ユーザーが「この RSS フィードを読んで」「ブログフィードをポーリングして」「Atom フィードから最新エントリを取得して」「サイトの新着投稿を監視して」と依頼したとき。
- コードがすでにフィードのバイト列を取得しており、構造化されたエントリが必要なとき。
呼び出さないタイミング
- ソースが実際の JSON API を提供している場合 – フィードをスクレイピングする代わりにそちらを呼び出してください。
- 完全な feedparser のクセ対応(あらゆる不正な方言)が必要な場合 –
feedparserをインストールしてください。
具体的な例
ユーザー入力:
https://example.com/feed.xml を読み込んで、各投稿のタイトルとリンクを出力して。
出力:
# 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で一度解析し、item(RSS)と{atom}entry(Atom)を反復処理します。- 安定したキーセットに正規化し、以降のパイプラインがフィード形式に依存しないようにします。
guid/Atomidからリンクにフォールバックし、すべてのアイテムに重複排除のための安定した ID を確保します。- ネットワーク処理をパーサーから分離します。バイト列またはテキストを渡すことで、純粋でテスト可能な状態を保ちます。
参考: assets/feed.py。
ソース
著者のニュース集約プロジェクトから抽出。v1.0.0。 関連: [[gmail-imap-digest]]、[[sqlite-state]]、[[pipeline-orchestrator]]。
→ Trawlkit で完全な実行可能ボットを構築してください。