中国新闻资讯聚合工具。当用户希望获取来自中文信源的最新新闻时使用。支持通过浏览器自动化技术接入多个新闻网站(新浪、搜狐、网易、腾讯)……
China News
功能概述
China News是一项面向实际任务的技能,主要用于中国新闻资讯聚合工具,通过浏览器自动化和RSS订阅获取各大新闻网站内容,生成分类新闻报告;Features;
核心要点
- 📰 多源聚合 : 新浪、搜狐、网易、腾讯等主流媒体;
- 📂 智能分类 : 时事、财经、科技、体育、娱乐;
- 🔄 双模式 : 浏览器自动化 + RSS订阅;
使用与执行
🎨 精美排版 : 专业新闻报告格式;⚡ 实时更新 : 获取最新新闻;🌍 多语言 : 中英文输出;Trigger Cond。它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。
结果检查与注意事项
从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。
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工具
相关专题
Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。
0
2026.10.28
Vite搭配Vue.js专题汇集创建Vue 3项目、配置开发环境、路径别名、Vue插件、代理、多环境构建与调试的已审核文章,帮助读者完成从初始化到日常开发的配置。
0
2026.10.28
Vite项目目录专题汇集入口文件、src源码、public静态资源、路径别名、项目根目录和构建输出目录相关的已审核文章,帮助读者理解各文件夹的用途与引用方式。
0
2026.10.28
本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。
0
2026.10.22
本专题介绍Gradle Wrapper的基本作用,涵盖文件组成、生成方法、版本配置和任务调用,帮助你理解项目如何使用指定的Gradle版本,减少不同开发环境带来的构建差异。
0
2026.10.22
本专题整理Golangci-lint常用Linters的用途与配置方法,覆盖错误处理、无效代码、安全、复杂度、命名和依赖检查,帮助项目合理选规则。
0
2026.10.22
本专题介绍Gradle Java项目构建方法,涵盖Java插件配置、依赖声明、源码编译、测试执行和打包检查,帮助你理解各阶段的任务关系,逐步完成项目构建。
0
2026.10.22
本专题汇总PHP常见时间戳漏洞,包括2038年溢出、时区漂移、时间戳伪造、重放攻击、时间盲注与日志审计失效等,并给出升级64位环境、使用 DateTimeImmutable、统一UTC、严格超时校验、预处理绑定、hash_equals 比对等修复方案,帮助开发者快速排查和加固时间相关代码。
0
2026.10.22
本专题聚焦Golangci-lint YAML配置文件,讲清运行参数、规则启停、目录排除、问题过滤及严重级别设置,便于团队统一检查标准。
0
2026.10.22
热门下载
相关下载
精品课程
共6课时 | 12.1万人学习
共79课时 | 161.6万人学习
共6课时 | 54.7万人学习