用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/jacardl/viceroy-skills --skill radar-data-collection命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
基于 SOC 职业分类
正在显示 SKILL.md
| name | radar-data-collection |
| description | 雷达数据采集 Skill — 采集金价、国际政治、AI热讯,写入 PostgreSQL 向量数据库,验证新闻真实性,按日期归档。 |
| metadata | {"openclaw":{"emoji":"🛰️"}} |
每日 06:00 北京时间执行。采集金价、国际政治、AI热讯,写入 radar 数据库的 news_articles 和 gold_prices 表。
| 类型 | 来源 | 数量 |
|---|---|---|
| 国际金价 | Kitco(伦敦现货,USD/盎司) | 1 条 |
| 国内金价 | 权威国内平台(沪金现货,CNY/克) | 1 条 |
| 国际政治 | RSS 聚合(BBC/Guardian/FT/NYT/Al Jazeera)+ 9Router 补充搜索 | 10 条 |
| AI热讯 | aihot.virxact.com 精选 | 10 条 |
| 来源 | 状态 | RSS URL | 策略 |
|---|---|---|---|
| BBC News | ✅ 直连可用 | https://feeds.bbci.co.uk/news/world/rss.xml | 直接 curl 获取 |
| The Guardian | ✅ 直连可用 | https://www.theguardian.com/world/rss | 直接 curl 获取 |
| FT | ⚠️ 301跳转但内容完整 | https://www.ft.com/rss/home | curl -sL 跟进 301 即可获取完整 RSS |
| NYT | ✅ 直连可用 | https://rss.nytimes.com/services/xml/rss/nyt/World.xml | 直接 curl 获取 |
| Al Jazeera | ✅ 直连可用 | https://www.aljazeera.com/xml/rss/all.xml | 直接 curl 获取 |
| France24 | ✅ 直连可用 | https://www.france24.com/en/rss | 直接 curl 获取 |
| Reuters | ❌ RSS 通道被关 | https://news.google.com/rss/search?q=site:reuters.com&hl=en-US&gl=US&ceid=US:en | Google News RSS 过滤 site:reuters.com |
| AP News | ❌ RSS 通道被关 | https://news.google.com/rss/search?q=site:apnews.com+world&hl=en-US&gl=US&ceid=US:en | Google News RSS 过滤 site:apnews.com |
| CNN | ⚠️ CNN 官方 RSS 已关闭 | https://news.google.com/rss/search?q=site:cnn.com+world&hl=en-US&gl=US&ceid=US:en | Google News RSS 过滤 site:cnn.com |
date -d '+8 hour' '+%Y-%m-%d'
article_date = 北京时间今天日期
字段:intl_price_usd, intl_price_change, domestic_price_cny, domestic_price_change
采集顺序(强制):RSS 批量拉取 → 按发布日期筛选 → 不足 10 条时用 9Router 搜索补采
同时拉取以下所有 RSS feed(使用 curl -sL 并行获取):
# 示例:一次性批量获取 RSS
RSS_URLS=(
"https://feeds.bbci.co.uk/news/world/rss.xml"
"https://www.theguardian.com/world/rss"
"https://www.ft.com/rss/home"
"https://rss.nytimes.com/services/xml/rss/nyt/World.xml"
"https://www.aljazeera.com/xml/rss/all.xml"
"https://www.france24.com/en/rss"
"https://news.google.com/rss/search?q=site:reuters.com&hl=en-US&gl=US&ceid=US:en"
"https://news.google.com/rss/search?q=site:apnews.com+world&hl=en-US&gl=US&ceid=US:en"
"https://news.google.com/rss/search?q=site:cnn.com+world&hl=en-US&gl=US&ceid=US:en"
)
for url in "${RSS_URLS[@]}"; do
response=$(curl -sL --max-time 8 "$url")
# 解析 XML,提取 title, description, pubDate, link
# pubDate 用于时效性筛选,description 可作为事件摘要
# FT 要用 curl -sL(自动跟随 301)
done
Python 解析 RSS XML(每条 RSS 返回标准格式):
import xml.etree.ElementTree as ET
root = ET.fromstring(xml_data)
for item in root.findall('.//item'):
title = item.findtext('title', '')
desc = item.findtext('description', '') # 事件摘要
pub_date = item.findtext('pubDate', '') # RFC 2822 格式
link = item.findtext('link', '')
source = item.findtext('source', '') or extract_domain(link)
时效性筛选:取 pubDate 在当天/前 1 天范围内的 RSS 条目
搜索 query:international political news today
筛选来源:Reuters / AP / AFP / Al Jazeera / BBC / FT
验证:每条必须附来源 URL,缺失则丢弃
每条候选新闻入库前必须验证发布时间。时效性是硬约束,禁止将过时新闻写入当日数据。
验证方法(按优先级):
/2026/5/13)article_date - 2天,则丢弃该条/年/月/日 或 /年-月-日/ 格式的日期路径,直接提取并判断:
验证规则:
article_date 或 article_date - 1天(允许前一天的夜间新闻)/2026/5/13/ 直接暴露发布日期为 2026-05-13,远早于当天,必须丢弃/articles/xxxxx 无显式日期但页面 title 会标注时间(如 "3 hours ago"),用 web_fetch 提取落地实现:
# 伪代码流程
candidates = 9Router search
validated = []
for each candidate:
# 方法1:URL路径分析
date_from_url = extract_date_from_url(candidate.url)
if date_from_url and date_from_url < article_date - 1:
continue # 丢弃旧新闻
# 方法2:web_fetch 抓取验证
result = web_fetch(candidate.url, extractMode='markdown', maxChars=300)
if "hours ago" in result or "minutes ago" in result:
validated.append(candidate) # 大概率当天新闻
elif specific_date_in_page < article_date - 1:
continue # 明确过时
else:
# 无法判断的,用 baoyu 或 9Router 兜底验证
result2 = baoyu/9router_fetch(candidate.url)
# 仍无法判断 → 丢弃(宁缺毋滥)
validated.append(candidate) # 通过验证
达标要求:至少采集 ≥10 条通过时效性验证的新闻。不足时重新搜索补采。
采集策略(落地版,强制按顺序执行)
说明:RSS 主链路的优势——无反爬墙、完整标题+摘要+发布时间+URL、纯文本低开销。 Google News RSS 的局限:标题可能被截断,source 字段保留原始来源。 候选链接如果是频道页/聚合页,必须继续下钻到具体事件稿;不能直接入库。
内容增强要求(强制,服务下游推送)
字段写入规范:
title:写中文标题(便于推送直读)content:按固定模板存储:
中文标题:...
English Headline: ...
事件介绍:...
背景/影响:...
source, url, category='politics', lang='zh'UA="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 aihot-skill/0.2.0"
curl -s -H "User-Agent: $UA" \
"https://aihot.virxact.com/api/public/items?mode=selected&take=10"
解析返回的 JSON,取 title、publishedAt、summary、source、url
字段:category='ai', lang='zh'
# Ollama 地址(nomic-embed-text,768维)
OLLAMA_URL="http://localhost:11434/api/embeddings"
MODEL="nomic-embed-text"
# 对每条 title+content(前500字)调用 embedding
curl -s -X POST "$OLLAMA_URL" \
-H "Content-Type: application/json" \
-d "{\"model\":\"$MODEL\",\"prompt\":\"$TEXT\"}" \
| python3 -c "import sys,json; print(','.join(map(str,json.load(sys.stdin)['embedding'])))"
维度 768,写入 embedding 字段(格式:'[v1,v2,...]')。
# 金价写入
docker exec radar-db psql -U radar -d radar -c \
"INSERT INTO gold_prices (price_date, intl_price_usd, intl_price_change, domestic_price_cny, domestic_price_change)
VALUES ('${ARTICLE_DATE}', ${INTL_PRICE}, ${INTL_CHANGE}, ${DOMESTIC_PRICE}, ${DOMESTIC_CHANGE})
ON CONFLICT (price_date) DO UPDATE SET
intl_price_usd = EXCLUDED.intl_price_usd,
intl_price_change = EXCLUDED.intl_price_change,
domestic_price_cny = EXCLUDED.domestic_price_cny,
domestic_price_change = EXCLUDED.domestic_price_change;"
# 新闻写入(每条一条INSERT)
docker exec radar-db psql -U radar -d radar -c \
"INSERT INTO news_articles (article_date, category, title, content, source, url, lang, embedding)
VALUES ('${ARTICLE_DATE}', '${CATEGORY}', '${TITLE}', '${CONTENT}', '${SOURCE}', '${URL}', '${LANG}',
'[${EMBEDDING}]');"
采集完成后执行:
SELECT article_date, category, COUNT(*) FROM news_articles GROUP BY article_date, category;
SELECT * FROM gold_prices WHERE price_date = '${ARTICLE_DATE}';
确认条数符合预期(国际政治≥10条,aihot≥8条),缺条则补采。
并抽查国际政治结构完整性(必须含中英对照+事件介绍):
SELECT COUNT(*) FROM news_articles
WHERE article_date='${ARTICLE_DATE}' AND category='politics'
AND content LIKE '%English Headline:%'
AND content LIKE '%事件介绍:%';
若不达标,继续补采并覆盖更新。
Host: localhost:5444
Database: radar
User: radar
Password: radar
连接方式:docker exec radar-db psql -U radar -d radar -c "SQL"
memory/YYYY-MM-DD.md完成后输出简洁报告:
🛰️ 数据采集完成 [日期]
✅ 金价:国际 ${INTL_PRICE} (${CHANGE}) / 国内 ${DOMESTIC_PRICE}
✅ 国际政治:${N} 条
✅ AI热讯:${N} 条
⏱️ 耗时:${SEC}s