Get the FREE Ultimate OpenClaw Setup Guide →

opml-reader

npx machina-cli add skill IvanCampos/agents/opml-reader --openclaw
Files (1)
SKILL.md
1.8 KB

OPML Reader

Overview

Use scripts/opml_reader.py to (1) store OPML from a URL and (2) list the latest posts across all feeds in the OPML. Output timestamps are ISO-8601 in UTC.

Quick Start

  1. Create a venv and install dependency:
python3 -m venv ~/Code/sandbox/.venv-opml-reader
~/Code/sandbox/.venv-opml-reader/bin/pip install feedparser
  1. Store an OPML file:
~/Code/sandbox/.venv-opml-reader/bin/python scripts/opml_reader.py store \
  "https://example.com/feeds.opml" \
  "~/Code/Files/feeds.opml"
  1. Fetch latest posts:
~/Code/sandbox/.venv-opml-reader/bin/python scripts/opml_reader.py latest \
  "~/Code/Files/feeds.opml" \
  --limit 5

Workflow

  • If the user supplies an OPML URL, store it under ~/Code/Files using store.
  • If the OPML file already exists, reuse it unless the user explicitly asks to overwrite.
  • Run latest to aggregate posts and return the newest entries across feeds.
  • Report partial results if some feeds fail (network timeouts are expected on large lists).

Output Options

  • Default output: text lines formatted as index. title | feed | date | link.
  • Use --format json or --format tsv if the user needs machine-readable output.
  • Dedupe is on by default. Use --no-dedupe if the user wants raw results.
  • Adjust --workers and --timeout for large or slow feed lists.

Resources

scripts/

  • scripts/opml_reader.py: Store OPML files and list latest posts across RSS/Atom feeds.

Source

git clone https://github.com/IvanCampos/agents/blob/main/skills/opml-reader/SKILL.mdView on GitHub

Overview

OPML Reader stores OPML files from a URL or local path into ~/Code/Files and can fetch the newest posts across all feeds listed in the OPML. Output timestamps are ISO-8601 UTC, making integration easy. It aggregates across feeds and supports machine-friendly JSON/TSV output, dedupe, and concurrency controls.

How This Skill Works

Run scripts/opml_reader.py to store an OPML URL or file path under ~/Code/Files, then run latest to collect the newest entries from all feeds in that OPML. By default it deduplicates results and uses configurable workers and timeouts to handle large lists.

When to Use It

  • You receive an OPML URL and want it saved locally under ~/Code/Files before processing.
  • You need to aggregate the newest posts across all feeds contained in an OPML file.
  • You require machine-readable output (JSON or TSV) in addition to the default text format.
  • You want deduplicated results and control over concurrency (workers) and timeouts for large OPML lists.
  • You want partial results when some feeds fail due to network timeouts or outages.

Quick Start

  1. Step 1: Create a virtual environment and install dependencies: python3 -m venv ~/Code/sandbox/.venv-opml-reader; ~/Code/sandbox/.venv-opml-reader/bin/pip install feedparser
  2. Step 2: Store an OPML file: ~/Code/sandbox/.venv-opml-reader/bin/python scripts/opml_reader.py store "https://example.com/feeds.opml" "~/Code/Files/feeds.opml"
  3. Step 3: Fetch latest posts: ~/Code/sandbox/.venv-opml-reader/bin/python scripts/opml_reader.py latest "~/Code/Files/feeds.opml" --limit 5

Best Practices

  • Store OPML once from a URL or path and reuse the file unless you explicitly request an overwrite.
  • Use the latest command with --limit to cap how many posts you fetch per run.
  • Prefer --format json or --format tsv when integrating with other tools.
  • Rely on dedupe by default, but disable with --no-dedupe for raw feeds.
  • Tune --workers and --timeout for performance and reliability on large OPML lists.

Example Use Cases

  • Store an OPML file from a URL to ~/Code/Files/feeds.opml using the store command.
  • Fetch the top 5 newest posts across all feeds in feeds.opml with --limit 5.
  • Output results as JSON: python scripts/opml_reader.py latest ~/Code/Files/feeds.opml --format json --limit 20.
  • Process a large OPML with 50 feeds by increasing workers and timeout (e.g., --workers 4 --timeout 60).
  • Get partial results if some feeds timeout while others succeed.

Frequently Asked Questions

Add this skill to your agents
Sponsor this space

Reach thousands of developers