Token导航 LogoToken导航TokenDH.com
研究检索操作浏览器clawhub未标认证来源可访问clear审计通过

china-news中国新闻

Agent Skill

china-news 用于处理浏览器自动化、网页检查和页面信息提取,适合在 OpenClaw 中需要让 Agent 打开页面、读取网页或验证前端流程时使用。可结合来源仓库、安装命令和原始 README 继续核验具体用法。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。

总安装

15,993

周安装

687

GitHub Stars

1

下载量

5,606
OpenClaw

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

GitHub

来源数

2

许可证

MIT-0

最后核验

2026-05-01

来源状态

来源可访问

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:china-news(中国新闻)
来源仓库:https://github.com/tobewin/china-news
安装命令:
openclaw skills install china-news
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 OpenClaw 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

ClawHubOpenClaw
openclaw skills install china-news

简介

china-news 聚合中国主流新闻网站信息,支持多站点内容抓取。

  • 适用于需要从新浪、搜狐、网易、腾讯等渠道获取资讯的场景。
  • 基于浏览器自动化技术实现网页数据提取与整理。china-news 属于研究检索类 Skill,可作为该场景下的辅助能力补充。
  • 使用前需确认是否允许访问外部网站及处理动态页面内容。
  • 涉及版权内容时应注意合规性要求,避免非法转载。

SKILL.md

name
china-news
description
中国新闻资讯聚合工具。Use when user wants to get latest news from Chinese sources. Supports multiple news sites (Sina, Sohu, NetEase, Tencent) via browser automation and RSS. Generates categorized news reports. 新闻资讯、热点新闻、每日新闻。
version
1.0.3
license
MIT-0
metadata
{"openclaw": {"emoji": "📰", "requires": {"bins": ["python3"], "env": []}}}
dependencies
pip install requests

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 '\
'.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 '\
'.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("\
" + "=" * 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"\
📁 报告已保存: {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+
  • 新闻网站结构可能变化,需要维护
  • 支持中英文输出

适合场景

01

OpenClaw 用户查找和安装 Skill 时

02

用户想查找某类 Agent Skill 时

03

需要根据任务场景推荐可安装能力包时

04

需要对比不同来源的安装命令和来源信息时

能力概览

能力 1

按任务关键词查找相关 Skills

能力 2

展示可复制的安装命令

能力 3

保留来源站点、仓库和原始说明,方便继续核验

能力 4

补充不同宿主或平台的使用分布数据

能力 5

展示第三方安全扫描或审计结果

安装后应在对应宿主中按原始 README 的触发条件使用;具体调用方式请以来源页面和 README 为准。

平台分布

OpenClaw

72.54%
按下载量换算4,067

安全审计

VirusTotal

未展示

ClawScan

通过

Static analysis

通过

权限和风险

操作浏览器

该 Skill 可能涉及浏览器控制能力,使用时可能读取或操作网页内容,需要在受控环境中确认权限边界。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。当前只有一个来源,正式发布前建议补源仓库或其他目录站核验。

来源信息

继续浏览同类 Skills