Get the FREE Ultimate OpenClaw Setup Guide →

news-aggregation

Scanned
npx machina-cli add skill besoeasy/open-skills/news-aggregation --openclaw
Files (1)
SKILL.md
3.7 KB

News Aggregation (Multi-Source, 3-Day Window)

Collect latest news from multiple sites and aggregators, merge similar stories into short topics, and list all main source links under each topic.

When to use

  • You want one concise briefing from many outlets.
  • You need deduplicated coverage (same story from multiple sites).
  • You want source transparency (all original links shown).
  • You want a default time window of the last 3 days unless specified otherwise.

Required tools / APIs

  • No API keys required for basic RSS workflow.
  • Python 3.10+

Install:

pip install feedparser python-dateutil

Sources (news sites + aggregators)

Use a mixed source list for better coverage.

News sites (RSS)

  • Reuters World: https://feeds.reuters.com/Reuters/worldNews
  • AP Top News: https://feeds.apnews.com/apnews/topnews
  • BBC World: http://feeds.bbci.co.uk/news/world/rss.xml
  • Al Jazeera: https://www.aljazeera.com/xml/rss/all.xml
  • The Guardian World: https://www.theguardian.com/world/rss
  • NPR News: https://feeds.npr.org/1001/rss.xml

Aggregators (RSS/API)

  • Google News (topic feed): https://news.google.com/rss/search?q=world
  • Bing News (RSS query): https://www.bing.com/news/search?q=world&format=RSS
  • Hacker News (tech): https://hnrss.org/frontpage
  • Reddit News (community signal): https://www.reddit.com/r/news/.rss

Skills

Node.js quick fetch + grouping starter

// npm install rss-parser
const Parser = require('rss-parser');
const parser = new Parser();

const SOURCES = {
  Reuters: 'https://feeds.reuters.com/Reuters/worldNews',
  AP: 'https://feeds.apnews.com/apnews/topnews',
  BBC: 'http://feeds.bbci.co.uk/news/world/rss.xml',
  'Google News': 'https://news.google.com/rss/search?q=world'
};

async function fetchRecent(days = 3) {
  const cutoff = Date.now() - days * 24 * 60 * 60 * 1000;
  const all = [];

  for (const [source, url] of Object.entries(SOURCES)) {
    const feed = await parser.parseURL(url);
    for (const item of feed.items || []) {
      const ts = new Date(item.pubDate || item.isoDate || 0).getTime();
      if (!ts || ts < cutoff) continue;
      all.push({ source, title: item.title || '', link: item.link || '', ts });
    }
  }

  return all.sort((a, b) => b.ts - a.ts);
}

// Next step: add title-similarity clustering (same idea as Python section above)

Agent prompt

Use the News Aggregation skill.

Requirements:
1) Pull news from multiple predefined sources (news sites + aggregators).
2) Default to only the last 3 days unless user asks another time range.
3) Group similar headlines into one short topic.
4) Under each topic, list all main source links (not just one source).
5) If 3+ sources cover the same event, output one topic with all those links.
6) Keep summaries short and factual; avoid adding unsupported claims.

Best practices

  • Keep source diversity (wire + publisher + aggregator) to reduce bias.
  • Rank grouped topics by number of independent sources.
  • Include publication timestamps when possible.
  • Keep the grouping threshold conservative to avoid merging unrelated stories.
  • Allow custom source lists and time windows when user requests.

Troubleshooting

  • Empty results: some feeds may be unavailable; retry and rotate sources.
  • Too many duplicates: increase similarity threshold (e.g., 0.35 -> 0.45).
  • Under-grouping: decrease threshold (e.g., 0.35 -> 0.28).
  • Rate limiting: fetch feeds sequentially with small delays.

See also

Source

git clone https://github.com/besoeasy/open-skills/blob/main/skills/news-aggregation/SKILL.mdView on GitHub

Overview

News Aggregation collects the latest headlines from multiple outlets, deduplicates similar stories, and groups them into concise topics. It lists all original source links under each topic and defaults to a 3-day window for freshness with transparent sourcing.

How This Skill Works

The skill fetches RSS feeds from a predefined set of sources using rss-parser, filters items to the most recent 3 days, and aggregates them by recency. It then groups similar headlines into topics and attaches all main source links per topic (next steps include title-similarity clustering).

When to Use It

  • You want one concise briefing from many outlets.
  • You need deduplicated coverage (same story from multiple sites).
  • You want source transparency (all original links shown).
  • You want a default time window of the last 3 days unless specified otherwise.
  • You’re building a dashboard that surfaces grouped topics rather than raw headlines.

Quick Start

  1. Step 1: npm install rss-parser
  2. Step 2: Create a script with a SOURCES map (e.g., Reuters, AP, BBC, Google News) and implement fetchRecent(days) to filter by the last 'days' days.
  3. Step 3: Run the script (node your-script.js) and apply a title-similarity clustering step to output topics with all source links.

Best Practices

  • Keep source diversity (wire + publisher + aggregator) to reduce bias.
  • Rank grouped topics by number of independent sources.
  • Include publication timestamps when possible.
  • Keep the grouping threshold conservative to avoid merging unrelated stories.
  • Allow custom source lists and time windows when user requests.

Example Use Cases

  • Global climate summit coverage: a topic page aggregates reports from Reuters, AP, BBC, Guardian, and NPR with links to all original sources.
  • Tech policy debate: a topic combines headlines from Google News, Bing News, Hacker News, and Reddit News with multiple source links.
  • Natural disaster brief: consolidates updates from Reuters, BBC, Al Jazeera, and regional outlets under one topic with all sources listed.
  • Markets recap: a single topic captures market movements with links from several outlets.
  • Major sports upset: several outlets converge on one topic, providing a single summary and links from each source.

Frequently Asked Questions

Add this skill to your agents
Sponsor this space

Reach thousands of developers