{"id":"7332654d-a0c6-4c68-be32-e0b6b8f1bc49","shortId":"dWB6px","kind":"skill","title":"news-aggregation","tagline":"Aggregate and deduplicate recent news from multiple sources into concise topic summaries.","description":"# News Aggregation (Multi-Source, 3-Day Window)\n\nCollect latest news from multiple sites and aggregators, merge similar stories into short topics, and list all main source links under each topic.\n\n## When to use\n- You want one concise briefing from many outlets.\n- You need deduplicated coverage (same story from multiple sites).\n- You want source transparency (all original links shown).\n- You want a default time window of the last 3 days unless specified otherwise.\n\n## Required tools / APIs\n- No API keys required for basic RSS workflow.\n- Python 3.10+\n\nInstall:\n\n```bash\npip install feedparser python-dateutil\n```\n\n## Sources (news sites + aggregators)\n\nUse a mixed source list for better coverage.\n\n### News sites (RSS)\n- Reuters World: `https://feeds.reuters.com/Reuters/worldNews`\n- AP Top News: `https://feeds.apnews.com/apnews/topnews`\n- BBC World: `http://feeds.bbci.co.uk/news/world/rss.xml`\n- Al Jazeera: `https://www.aljazeera.com/xml/rss/all.xml`\n- The Guardian World: `https://www.theguardian.com/world/rss`\n- NPR News: `https://feeds.npr.org/1001/rss.xml`\n\n### Aggregators (RSS/API)\n- Google News (topic feed): `https://news.google.com/rss/search?q=world`\n- Bing News (RSS query): `https://www.bing.com/news/search?q=world&format=RSS`\n- Hacker News (tech): `https://hnrss.org/frontpage`\n- Reddit News (community signal): `https://www.reddit.com/r/news/.rss`\n\n## Skills\n\n### Node.js quick fetch + grouping starter\n\n```javascript\n// npm install rss-parser\nconst Parser = require('rss-parser');\nconst parser = new Parser();\n\nconst SOURCES = {\n  Reuters: 'https://feeds.reuters.com/Reuters/worldNews',\n  AP: 'https://feeds.apnews.com/apnews/topnews',\n  BBC: 'http://feeds.bbci.co.uk/news/world/rss.xml',\n  'Google News': 'https://news.google.com/rss/search?q=world'\n};\n\nasync function fetchRecent(days = 3) {\n  const cutoff = Date.now() - days * 24 * 60 * 60 * 1000;\n  const all = [];\n\n  for (const [source, url] of Object.entries(SOURCES)) {\n    const feed = await parser.parseURL(url);\n    for (const item of feed.items || []) {\n      const ts = new Date(item.pubDate || item.isoDate || 0).getTime();\n      if (!ts || ts < cutoff) continue;\n      all.push({ source, title: item.title || '', link: item.link || '', ts });\n    }\n  }\n\n  return all.sort((a, b) => b.ts - a.ts);\n}\n\n// Next step: add title-similarity clustering (same idea as Python section above)\n```\n\n## Agent prompt\n\n```text\nUse the News Aggregation skill.\n\nRequirements:\n1) Pull news from multiple predefined sources (news sites + aggregators).\n2) Default to only the last 3 days unless user asks another time range.\n3) Group similar headlines into one short topic.\n4) Under each topic, list all main source links (not just one source).\n5) If 3+ sources cover the same event, output one topic with all those links.\n6) Keep summaries short and factual; avoid adding unsupported claims.\n```\n\n## Best practices\n- Keep source diversity (wire + publisher + aggregator) to reduce bias.\n- Rank grouped topics by number of independent sources.\n- Include publication timestamps when possible.\n- Keep the grouping threshold conservative to avoid merging unrelated stories.\n- Allow custom source lists and time windows when user requests.\n\n## Troubleshooting\n- Empty results: some feeds may be unavailable; retry and rotate sources.\n- Too many duplicates: increase similarity threshold (e.g., 0.35 -> 0.45).\n- Under-grouping: decrease threshold (e.g., 0.35 -> 0.28).\n- Rate limiting: fetch feeds sequentially with small delays.\n\n## See also\n- [Web Search API (Free)](./web-search-api.md)\n- [Web Scraping (Chrome + DuckDuckGo)](./using-web-scraping.md)","tags":["news","aggregation","open","skills","besoeasy","agent-skills","ai-agents","claude-code","clawdbot","clawdbot-skill","llm-tools","mcp-server"],"capabilities":["skill","source-besoeasy","skill-news-aggregation","topic-agent-skills","topic-ai-agents","topic-claude-code","topic-clawdbot","topic-clawdbot-skill","topic-llm-tools","topic-mcp-server","topic-openai","topic-openclaw","topic-vibe-coding","topic-vibecoding"],"categories":["open-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/besoeasy/open-skills/news-aggregation","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add besoeasy/open-skills","source_repo":"https://github.com/besoeasy/open-skills","install_from":"skills.sh"}},"qualityScore":"0.505","qualityRationale":"deterministic score 0.51 from registry signals: · indexed on github topic:agent-skills · 111 github stars · SKILL.md body (3,620 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-02T12:55:04.147Z","embedding":null,"createdAt":"2026-04-18T22:10:48.839Z","updatedAt":"2026-05-02T12:55:04.147Z","lastSeenAt":"2026-05-02T12:55:04.147Z","tsv":"'/1001/rss.xml':156 '/apnews/topnews':135 '/apnews/topnews'',':217 '/frontpage':178 '/news/search?q=world&format=rss':172 '/news/world/rss.xml':140 '/news/world/rss.xml'',':221 '/r/news/.rss':185 '/reuters/worldnews':129 '/reuters/worldnews'',':213 '/rss/search?q=world':165 '/rss/search?q=world''':226 '/using-web-scraping.md':469 '/web-search-api.md':464 '/world/rss':151 '/xml/rss/all.xml':145 '0':265 '0.28':449 '0.35':440,448 '0.45':441 '1':307 '1000':239 '2':317 '24':236 '3':21,84,231,323,331,354 '3.10':101 '4':339 '5':352 '6':367 '60':237,238 'a.ts':284 'ad':374 'add':287 'agent':298 'aggreg':3,4,17,31,113,157,304,316,384 'al':141 'all.push':272 'all.sort':280 'allow':411 'also':459 'anoth':328 'ap':130,214 'api':91,93,462 'ask':327 'async':227 'avoid':373,407 'await':251 'b':282 'b.ts':283 'bash':103 'basic':97 'bbc':136,218 'best':377 'better':120 'bias':387 'bing':166 'brief':54 'chrome':467 'claim':376 'cluster':291 'collect':24 'communiti':181 'concis':13,53 'conserv':405 'const':198,204,208,232,240,243,249,255,259 'continu':271 'cover':356 'coverag':61,121 'custom':412 'cutoff':233,270 'date':262 'date.now':234 'dateutil':109 'day':22,85,230,235,324 'decreas':445 'dedupl':6,60 'default':78,318 'delay':457 'divers':381 'duckduckgo':468 'duplic':435 'e.g':439,447 'empti':422 'event':359 'factual':372 'feed':162,250,425,453 'feed.items':258 'feedpars':106 'feeds.apnews.com':134,216 'feeds.apnews.com/apnews/topnews':133 'feeds.apnews.com/apnews/topnews'',':215 'feeds.bbci.co.uk':139,220 'feeds.bbci.co.uk/news/world/rss.xml':138 'feeds.bbci.co.uk/news/world/rss.xml'',':219 'feeds.npr.org':155 'feeds.npr.org/1001/rss.xml':154 'feeds.reuters.com':128,212 'feeds.reuters.com/reuters/worldnews':127 'feeds.reuters.com/reuters/worldnews'',':211 'fetch':189,452 'fetchrec':229 'free':463 'function':228 'gettim':266 'googl':159,222 'group':190,332,389,403,444 'guardian':147 'hacker':173 'headlin':334 'hnrss.org':177 'hnrss.org/frontpage':176 'idea':293 'includ':396 'increas':436 'independ':394 'instal':102,105,194 'item':256 'item.isodate':264 'item.link':277 'item.pubdate':263 'item.title':275 'javascript':192 'jazeera':142 'keep':368,379,401 'key':94 'last':83,322 'latest':25 'limit':451 'link':43,73,276,347,366 'list':39,118,343,414 'main':41,345 'mani':56,434 'may':426 'merg':32,408 'mix':116 'multi':19 'multi-sourc':18 'multipl':10,28,65,311 'need':59 'new':206,261 'news':2,8,16,26,111,122,132,153,160,167,174,180,223,303,309,314 'news-aggreg':1 'news.google.com':164,225 'news.google.com/rss/search?q=world':163 'news.google.com/rss/search?q=world''':224 'next':285 'node.js':187 'npm':193 'npr':152 'number':392 'object.entries':247 'one':52,336,350,361 'origin':72 'otherwis':88 'outlet':57 'output':360 'parser':197,199,203,205,207 'parser.parseurl':252 'pip':104 'possibl':400 'practic':378 'predefin':312 'prompt':299 'public':397 'publish':383 'pull':308 'python':100,108,295 'python-dateutil':107 'queri':169 'quick':188 'rang':330 'rank':388 'rate':450 'recent':7 'reddit':179 'reduc':386 'request':420 'requir':89,95,200,306 'result':423 'retri':429 'return':279 'reuter':125,210 'rotat':431 'rss':98,124,168,196,202 'rss-parser':195,201 'rss/api':158 'scrape':466 'search':461 'section':296 'see':458 'sequenti':454 'short':36,337,370 'shown':74 'signal':182 'similar':33,290,333,437 'site':29,66,112,123,315 'skill':186,305 'skill-news-aggregation' 'small':456 'sourc':11,20,42,69,110,117,209,244,248,273,313,346,351,355,380,395,413,432 'source-besoeasy' 'specifi':87 'starter':191 'step':286 'stori':34,63,410 'summari':15,369 'tech':175 'text':300 'threshold':404,438,446 'time':79,329,416 'timestamp':398 'titl':274,289 'title-similar':288 'tool':90 'top':131 'topic':14,37,46,161,338,342,362,390 'topic-agent-skills' 'topic-ai-agents' 'topic-claude-code' 'topic-clawdbot' 'topic-clawdbot-skill' 'topic-llm-tools' 'topic-mcp-server' 'topic-openai' 'topic-openclaw' 'topic-vibe-coding' 'topic-vibecoding' 'transpar':70 'troubleshoot':421 'ts':260,268,269,278 'unavail':428 'under-group':442 'unless':86,325 'unrel':409 'unsupport':375 'url':245,253 'use':49,114,301 'user':326,419 'want':51,68,76 'web':460,465 'window':23,80,417 'wire':382 'workflow':99 'world':126,137,148 'www.aljazeera.com':144 'www.aljazeera.com/xml/rss/all.xml':143 'www.bing.com':171 'www.bing.com/news/search?q=world&format=rss':170 'www.reddit.com':184 'www.reddit.com/r/news/.rss':183 'www.theguardian.com':150 'www.theguardian.com/world/rss':149","prices":[{"id":"2f358b45-f3d4-4785-88b8-d934bcea2281","listingId":"7332654d-a0c6-4c68-be32-e0b6b8f1bc49","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"besoeasy","category":"open-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T22:10:48.839Z"}],"sources":[{"listingId":"7332654d-a0c6-4c68-be32-e0b6b8f1bc49","source":"github","sourceId":"besoeasy/open-skills/news-aggregation","sourceUrl":"https://github.com/besoeasy/open-skills/tree/main/skills/news-aggregation","isPrimary":false,"firstSeenAt":"2026-04-18T22:10:48.839Z","lastSeenAt":"2026-05-02T12:55:04.147Z"}],"details":{"listingId":"7332654d-a0c6-4c68-be32-e0b6b8f1bc49","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"besoeasy","slug":"news-aggregation","github":{"repo":"besoeasy/open-skills","stars":111,"topics":["agent-skills","ai","ai-agents","claude-code","clawdbot","clawdbot-skill","llm-tools","mcp-server","openai","openclaw","vibe-coding","vibecoding"],"license":null,"html_url":"https://github.com/besoeasy/open-skills","pushed_at":"2026-03-31T13:05:30Z","description":"Battle-tested skill library for AI agents. Save 98% of API costs with ready-to-use code for crypto, PDFs, search, web scraping & more. No trial-and-error, no expensive APIs.","skill_md_sha":"97163333766031881f0830c975954089d5fab1fd","skill_md_path":"skills/news-aggregation/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/besoeasy/open-skills/tree/main/skills/news-aggregation"},"layout":"multi","source":"github","category":"open-skills","frontmatter":{"name":"news-aggregation","description":"Aggregate and deduplicate recent news from multiple sources into concise topic summaries."},"skills_sh_url":"https://skills.sh/besoeasy/open-skills/news-aggregation"},"updatedAt":"2026-05-02T12:55:04.147Z"}}