按读者、渠道和地区写出读起来像母语者写的中文,把语体、脚本、用词一起定好。
浏览器
China News
中国新闻资讯聚合工具。Use when user wants to get latest news from Chinese sources. Supports multiple news sites (Sina, Sohu, NetEase, Tencent) via browser automation an...
它能做什么
中国新闻资讯聚合工具,通过浏览器自动化和RSS订阅获取各大新闻网站内容,生成分类新闻报告。
技能文档
China News
中国新闻资讯聚合工具,通过浏览器自动化和RSS订阅获取各大新闻网站内容,生成分类新闻报告。
Features
- 📰 多源聚合: 新浪、搜狐、网易、腾讯等主流媒体
- 📂 智能分类: 时事、财经、科技、体育、娱乐
- 🔄 双模式: 浏览器自动化 + RSS订阅
- 🎨 精美排版: 专业新闻报告格式
- ⚡ 实时更新: 获取最新新闻
- 🌍 多语言: 中英文输出
Trigger Conditions
- "给我今天的新闻" / "Today's news"
- "有什么热点新闻" / "What's trending"
- "看看科技新闻" / "Tech news"
- "财经新闻" / "Financial news"
- "china-news"
News Sources (新闻来源)
浏览器自动化模式
| 来源 | 网址 | 内容 |
|---|---|---|
| 新浪新闻 | news.sina.com.cn | 综合新闻 |
| 搜狐新闻 | news.sohu.com | 深度报道 |
| 网易新闻 | news.163.com | 热点新闻 |
| 腾讯新闻 | news.qq.com | 快讯 |
RSS订阅模式
| 来源 | RSS地址 | 内容 |
|---|---|---|
| 新浪新闻 | rss.sina.com.cn | 综合 |
| 搜狐新闻 | rss.sohu.com | 综合 |
| 凤凰新闻 | rss.ifeng.com | 时政 |
Prerequisites
OpenClaw版本要求
- OpenClaw v2026.3.22+ (浏览器自动化)
浏览器配置
- 配置好browser工具
- 无需登录(新闻网站通常无需登录)
Step 1: 获取新闻(自动降级策略)
模式选择逻辑
检测浏览器是否可用
↓
可用 → 浏览器模式(更丰富)
↓
不可用 → 自动降级到RSS模式(默认)
代码实现
def check_browser_available():
"""检测浏览器是否可用"""
try:
# 尝试调用浏览器
# 如果OpenClaw配置了browser工具且浏览器可用
return True
except:
return False
def get_news_sources():
"""根据环境自动选择获取方式"""
if check_browser_available():
# 浏览器模式:获取更丰富的新闻
print("🌐 使用浏览器模式")
return {
'mode': 'browser',
'sources': [
{'name': '新浪新闻', 'url': 'https://news.sina.com.cn'},
{'name': '搜狐新闻', 'url': 'https://news.sohu.com'},
{'name': '网易新闻', 'url': 'https://news.163.com'},
]
}
else:
# RSS模式(默认):轻量快速,无需浏览器
print("📡 浏览器不可用,使用RSS模式")
return {
'mode': 'rss',
'sources': [
{'name': '36氪', 'url': 'https://36kr.com/feed'},
{'name': '搜狐新闻', 'url': 'https://news.sohu.com/rss/'},
]
}
降级说明
| 环境 | 模式 | 新闻来源 | 数据丰富度 |
|---|---|---|---|
| 有浏览器 | 浏览器模式 | 新浪/搜狐/网易 | ⭐⭐⭐⭐⭐ |
| 无浏览器 | RSS模式(默认) | 36氪/搜狐 | ⭐⭐⭐ |
RSS模式完全可用,无需浏览器即可获取新闻
浏览器模式(更丰富)
// 打开新闻网站
await browser.open({
url: "https://news.sina.com.cn"
})
// 等待加载
await browser.wait({ timeout: 5000 })
// 提取新闻标题和链接
const news = await browser.evaluate(() => {
const items = []
// 提取各类新闻区块
document.querySelectorAll('a').forEach(el => {
const text = el.innerText?.trim()
if (text && text.length > 10 && text.length < 100) {
// 过滤掉导航、广告等
if (!text.includes('登录') && !text.includes('注册') &&
!el.href.includes('javascript:') && el.href.startsWith('http')) {
items.push({
title: text,
url: el.href,
source: '新浪'
})
}
}
})
return items.slice(0, 20)
})
RSS模式(轻量快速)
import requests
import xml.etree.ElementTree as ET
def fetch_rss(url, source_name):
"""获取RSS订阅内容"""
try:
response = requests.get(url, timeout=10, headers={
'User-Agent': 'Mozilla/5.0'
})
root = ET.fromstring(response.content)
items = []
for item in root.findall('.//item'):
title = item.find('title')
link = item.find('link')
if title is not None and title.text:
items.append({
'title': title.text.strip(),
'url': link.text if link is not None else '',
'source': source_name
})
return items[:15]
except:
return []
Step 2: 新闻分类
def categorize_news(news_list):
"""智能分类新闻"""
categories = {
'时事': ['政治', '国际', '外交', '政策', '政府', '两会', '选举'],
'财经': ['股市', '基金', '经济', '金融', '投资', '银行', '房产'],
'科技': ['AI', '人工智能', '芯片', '手机', '互联网', '新能源'],
'体育': ['足球', '篮球', '奥运', '世界杯', 'NBA', '中超'],
'娱乐': ['明星', '电影', '音乐', '综艺', '八卦', '热播'],
'社会': ['事故', '案件', '民生', '教育', '医疗', '疫情']
}
categorized = {cat: [] for cat in categories}
categorized['其他'] = []
for news in news_list:
matched = False
for category, keywords in categories.items():
if any(kw in news['title'] for kw in keywords):
categorized[category].append(news)
matched = True
break
if not matched:
categorized['其他'].append(news)
# 移除空分类
return {k: v for k, v in categorized.items() if v}
Step 3: 生成报告
def generate_news_report(categorized_news, date_str):
"""生成精美新闻报告"""
output = []
output.append(f"┌{'─'*50}┐")
output.append(f"│ 📰 每日新闻速递")
output.append(f"│ {date_str}")
output.append(f"└{'─'*50}┘")
output.append("")
# 热点速递(取每个分类的第一条)
output.append("🔥 热点速递")
output.append("─" * 40)
for category, news_list in categorized_news.items():
if news_list and category != '其他':
top_news = news_list[0]
output.append(f"【{category}】{top_news['title']}")
output.append("")
# 分类详情
for category, news_list in categorized_news.items():
if news_list:
output.append(f"📌 {category}新闻")
output.append("─" * 40)
for i, news in enumerate(news_list[:5], 1):
output.append(f"{i}. {news['title']}")
if news.get('source'):
output.append(f" 来源:{news['source']}")
output.append("")
return '\n'.join(output)
Step 4: 完整流程
python3 << 'PYEOF'
import os
import requests
import xml.etree.ElementTree as ET
from datetime import datetime
class ChinaNews:
def __init__(self):
self.rss_sources = {
'新浪国内': 'https://rss.sina.com.cn/news/china/roll.xml',
'新浪国际': 'https://rss.sina.com.cn/news/world/roll.xml',
'新浪财经': 'https://rss.sina.com.cn/finance/roll.xml',
'新浪科技': 'https://rss.sina.com.cn/tech/roll.xml',
'搜狐新闻': 'https://news.sohu.com/rss/'
}
self.keywords = {
'时事': ['政治', '国际', '外交', '政策', '政府', '两会', '外交'],
'财经': ['股市', '基金', '经济', '金融', '投资', '银行', '房产', 'A股'],
'科技': ['AI', '人工智能', '芯片', '手机', '互联网', '新能源', '科技'],
'体育': ['足球', '篮球', '奥运', '世界杯', 'NBA', '中超', '体育'],
'娱乐': ['明星', '电影', '音乐', '综艺', '八卦', '热播', '娱乐'],
'社会': ['事故', '案件', '民生', '教育', '医疗', '社会']
}
def fetch_rss(self, url):
"""获取RSS内容"""
try:
response = requests.get(url, timeout=10, headers={
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)'
})
root = ET.fromstring(response.content)
items = []
for item in root.findall('.//item'):
title = item.find('title')
link = item.find('link')
desc = item.find('description')
if title is not None and title.text:
items.append({
'title': title.text.strip(),
'url': link.text if link is not None else '',
'desc': desc.text[:100] if desc is not None and desc.text else ''
})
return items[:15]
except Exception as e:
print(f"⚠️ RSS获取失败: {e}")
return []
def categorize(self, news_list):
"""智能分类新闻"""
categorized = {cat: [] for cat in self.keywords}
categorized['其他'] = []
for news in news_list:
matched = False
for category, kws in self.keywords.items():
if any(kw in news['title'] for kw in kws):
categorized[category].append(news)
matched = True
break
if not matched:
categorized['其他'].append(news)
return {k: v for k, v in categorized.items() if v}
def generate_report(self, categorized_news, date_str):
"""生成新闻报告"""
output = []
output.append(f"┌{'─'*50}┐")
output.append(f"│ 📰 每日新闻速递")
output.append(f"│ {date_str}")
output.append(f"└{'─'*50}┘")
output.append("")
# 热点速递
output.append("🔥 热点速递")
output.append("─" * 40)
for category, news_list in categorized_news.items():
if news_list and category != '其他':
top = news_list[0]
output.append(f"【{category}】{top['title'][:40]}...")
output.append("")
# 分类详情
for category, news_list in categorized_news.items():
if news_list:
output.append(f"📌 {category}新闻")
output.append("─" * 40)
for i, news in enumerate(news_list[:5], 1):
title = news['title'][:50]
output.append(f"{i}. {title}")
output.append("")
return '\n'.join(output)
# 执行
news_service = ChinaNews()
print("📰 正在获取新闻...")
# 获取多个来源的新闻
all_news = []
for name, url in news_service.rss_sources.items():
print(f" 获取 {name}...")
items = news_service.fetch_rss(url)
for item in items:
item['source'] = name
all_news.extend(items)
print(f" 共获取 {len(all_news)} 条新闻")
# 分类
categorized = news_service.categorize(all_news)
# 生成报告
date_str = datetime.now().strftime('%Y年%m月%d日 %H:%M')
report = news_service.generate_report(categorized, date_str)
# 输出
print("\n" + "=" * 50)
print(report)
# 保存到文件
output_dir = os.environ.get('OPENCLAW_WORKSPACE', os.getcwd())
output_path = os.path.join(output_dir, f'news_{datetime.now().strftime("%Y%m%d")}.md')
with open(output_path, 'w', encoding='utf-8') as f:
f.write(report)
print(f"\n📁 报告已保存: {output_path}")
PYEOF
Security Notes
- ✅ No API keys required
- ✅ No data uploaded to external servers
- ✅ Local processing only
- ⚠️ Requires internet access to fetch news
Notes
- RSS模式无需浏览器,curl即可
- 浏览器模式需要OpenClaw v2026.3.22+
- 新闻网站结构可能变化,需要维护
- 支持中英文输出
相关技能
AI news intelligence and daily briefing powered by CellCog. News digests, competitive intelligence, market updates, trend monitoring, industry reports, current events research. Multi-source synthesis for accurate, comprehensive briefs.
Professional translation between Mandarin, English, and Spanish with cultural context, tone matching, and domain-specific formatting (business, legal, casual).
基于 Bing 国内版 / DuckDuckGo 的联网搜索工具,中文环境优化,可按需抓取目标网页正文,返回结构化结果。仅在用户明确请求联网搜索时调用。
提供快速 / 普通 / 精翻三种模式,支持自定义词库与风格设置,把原文改写成地道译文。
实时拉取 20 个国家的头版头条,支持按时间戳检索历史快照,适用于突发新闻与跨媒体对比分析。
ToBeWin 的更多技能
浏览全部技能用一份 JSON 描述就能生成标准可编辑的 PPTX,自带 11 种版式与 5 套配色。
Professional Excel spreadsheet generator. Use when user needs to create data tables, reports, charts, financial models, or any structured data in Excel forma...
Data analysis tool for Excel, CSV, Word, PDF, TXT, Markdown files. Use when user needs to analyze, summarize, or compare data from multiple files. Supports f...