TTokenySpace
返回 Skills 列表

央视新闻抓取(免费版)

免费版央视新闻联播抓取工具,支持按指定日期获取新闻标题与摘要并分类生成基础简报,方便个人快速了解新闻要点。

#中文
0

安装到 Tokeny(自动)

下载 ZIP
安装"cctv-news-tool-free"技能
技能信息:
- 名称: 央视新闻抓取(免费版)
- 标识: cctv-news-tool-free
- 描述: 免费版央视新闻联播抓取工具,支持按指定日期获取新闻标题与摘要并分类生成基础简报,方便个人快速了解新闻要点。
- 版本: 1.0.0
下载地址:
https://www.tokeny.space/api/skills/cctv-news-tool-free/download
继续

复制上方内容到 Tokeny 客户端并在会话中发送即可自动安装;也可直接 下载 ZIP并拖动到技能窗口安装。

SKILL.md

央视新闻抓取助手(免费版)

指定日期、抓取标题、生成简报。三步完成央视新闻联播内容获取。

无需复杂配置,通过简单的命令即可获取指定日期的新闻联播内容。免费版聚焦单日查询场景,快速生成结构化新闻简报.

概述

免费版央视新闻抓取工具为个人用户提供基础的新闻联播内容获取能力。通过 news_crawler.js 脚本调用,将新闻联播内容转化为结构化JSON数据,便于后续处理和分析.

核心定位

维度免费版能力
单日查询支持
批量日期查询不支持(需专业版)
AI智能摘要不支持(需专业版)
多渠道推送不支持(需专业版)
历史趋势分析不支持(需专业版)
国内/国际分类支持(基础)
JSON输出支持
全文内容不支持(仅标题与摘要)

核心能力

1. 按日期抓取新闻联播

输入格式

参数名类型必填说明
inputstring央视新闻抓取(免费版)处理的输入数据或指令
optionsobject附加配置选项,如模式选择、格式偏好等
callback_urlstring异步处理完成后的回调通知URL
import subprocess
import json
from datetime import datetime, timedelta
# ...
class CCTVNewsFetcher:
    """央视新闻抓取器(免费版)"""
# ...
    def __init__(self, script_path="(请参考skill目录中的脚本文件)"):
        self.script_path = script_path
        self.runtime = self._detect_runtime()
# ...
    def _detect_runtime(self):
        """检测可用的JS运行时"""
        for runtime in ["bun", "node"]:
            result = subprocess.run(["which", runtime], capture_output=True)
            if result.returncode == 0:
                return runtime
        return "node"  # 默认使用node
    def parse_date(self, date_input):
        """解析日期输入"""
        if date_input in ["today", "今天"]:
            return datetime.now().strftime("%Y%m%d")
        elif date_input in ["yesterday", "昨天"]:
            return (datetime.now() - timedelta(days=1)).strftime("%Y%m%d")
        elif date_input in ["tomorrow", "明天"]:
now() + timedelta(days=1)).strftime("%Y%m%d")
        else:
            # 标准化日期格式
            date_str = date_input.replace("-", "").replace("/", "").replace(".", "")
            if len(date_str) == 8:
                return date_str
            raise ValueError(f"无效日期格式:{date_input}")
# ...
    def fetch(self, date_input):
        """抓取指定日期的新闻"""
        date_str = self.parse_date(date_input)
        print(f"正在抓取 {date_str} 的新闻联播内容...")
# ...
        try:
            cmd = [self.runtime, self.script_path, date_str]
                cmd, capture_output=True, text=True, timeout=60, encoding="utf-8"
            )
# ...
                return {"success": False, "error": result.stderr}
# ...
            # 解析JSON输出
            news_data = json.loads(result.stdout)
            return {"success": True, "data": news_data, "date": date_str}
# ...
        except subprocess.TimeoutExpired:
            return {"success": False, "error": "抓取超时,请稍后重试"}
        except json.JSONDecodeError:
            return {"success": False, "error": "解析失败,输出格式异常"}
        except Exception as e:
            return {"success": False, "error": str(e)}
# ...
# 示例
fetcher = CCTVNewsFetcher()
result = fetcher.fetch("20250210")
if result.get("success"):
    print(f"成功获取 {result['date']} 的新闻")
else:
    print(f"失败:{result.get('error')}")

处理: 解析按日期抓取新闻联播的输入参数,完成核心逻辑,返回结构化响应. 输出: 返回按日期抓取新闻联播的响应数据,包含状态码、结果和日志.

  • 执行此能力时使用input_params参数,支持创建/查询/导出操作

2. 国内/国际新闻分类

class NewsCategorizer:
    """新闻分类器(免费版)"""
# ...
    DOMESTIC_KEYWORDS = [
        "主席", "总理", "国务院", "全国", "国内", "我国",
        "中央", "党委", "政府", "人大", "政协", "两会",
        "省委", "市委", "县委", "改革", "发展"
    ]
# ...
    INTERNATIONAL_KEYWORDS = [
        "美国", "俄罗斯", "日本", "韩国", "朝鲜", "英国", "法国", "德国",
        "联合国", "国际", "外交", "访问", "会谈", "峰会",
        "欧盟", "北约", "亚太", "中东", "非洲", "拉美"
    ]
# ...
    def categorize(self, news_list):
        """分类新闻列表"""
        categorized = {"domestic": [], "international": [], "other": []}
# ...
        for news in news_list:
            title = news.get("title", "")
            content = news.get("content", "") or news.get("summary", "")
# ...
            if self._is_domestic(title, content):
                categorized["domestic"].append(news)
            elif self._is_international(title, content):
                categorized["international"].append(news)
            else:
                categorized["other"].append(news)
# ...
        return categorized
# ...
    def _is_domestic(self, title, content):
        text = title + content
        return any(kw in text for kw in self.DOMESTIC_KEYWORDS)
# ...
    def _is_international(self, title, content):
        text = title + content
INTERNATIONAL_KEYWORDS)
# ...
# 使用示例
categorizer = NewsCategorizer()
news_list = [
    {"title": "国家主席会见外宾", "content": "..."},
    {"title": "美国总统访华", "content": "..."},
    {"title": "全国两会胜利召开", "content": "..."},
]
categorized = categorizer.categorize(news_list)
print(f"国内:{len(categorized['domestic'])} 条")
print(f"国际:{len(categorized['international'])} 条")
print(f"其他:{len(categorized['other'])} 条")

处理: 解析国内/国际新闻分类的输入参数,完成核心逻辑,返回结构化响应. 输出: 返回国内/国际新闻分类的响应数据,包含状态码、结果和日志.

  • 执行此能力时使用input_params参数,支持创建/查询/导出操作

3. 基础简报生成

class NewsBriefGenerator:
    """新闻简报生成器(免费版)"""
# ...
    def generate(self, date_str, categorized_news):
        """生成新闻简报"""
        lines = []
        lines.append("=" * 50)
        lines.append(f"  新闻联播简报 | {self._format_date(date_str)}")
        lines.append("=" * 50)
        lines.append("")
# ...
        # 国内新闻
        domestic = categorized_news.get("domestic", [])
        if domestic:
            lines.append("【国内新闻】")
            lines.append("-" * 40)
            for i, news in enumerate(domestic[:10], 1):
                lines.append(f"{i}. {title}")
            lines.append("")
# ...
        # 国际新闻
        international = categorized_news.get("international", [])
        if international:
            lines.append("【国际新闻】")
            lines.append("-" * 40)
            for i, news in enumerate(international[:10], 1):
append(f"{i}. {title}")
            lines.append("")
# ...
        # 其他
        other = categorized_news.get("other", [])
        if other:
            lines.append("【其他要闻】")
            lines.append("-" * 40)
            for i, news in enumerate(other[:5], 1):
append(f"{i}. {title}")
            lines.append("")
# ...
        lines.append("=" * 50)
        lines.append(f"  共 {sum(len(v) for v in categorized_news.values())} 条新闻")
        lines.append("=" * 50)
# ...
        return "\n".join(lines)
# ...
    def _format_date(self, date_str):
        """格式化日期显示"""
        if len(date_str) == 8:
            return f"{date_str[:4]}年{date_str[4:6]}月{date_str[6:8]}日"
        return date_str
# ...
# 使用示例
generator = NewsBriefGenerator()
brief = generator.generate("20250210", categorized)
print(brief)

处理: 解析基础简报生成的输入参数,完成核心逻辑,返回结构化响应. 输出: 返回基础简报生成的响应数据,包含状态码、结果和日志. 能力覆盖范围:本skill的核心能力覆盖以下场景关键词:央视新闻联播抓取、支持按日期获取新、闻标题与摘要、生成基础简报、央视新闻抓取助手、免费版是面向个人、用户的轻量新闻联、播内容抓取工具、抓取标题、生成简报、三步流程、快速获取新闻联播、Use、when、需要生成营销文案、写作内容、标题优化、内容创作时使用、不适用于纯技术文、档撰写、适用于独立开发者、企业团队和自动化、工作流场景等。这些关键词对应description中声明的使用场景,均已在上述能力点中提供对应的操作支持.

  • 执行此能力时使用input_params参数,支持创建/查询/导出操作

使用场景

场景一:每日新闻回顾

场景描述:每天晚上查看当天新闻联播要点.

fetcher = CCTVNewsFetcher()
categorizer = NewsCategorizer()
generator = NewsBriefGenerator()
# ...
# 抓取今天的新闻
result = fetcher.fetch("today")
if result.get("success"):
    news_list = result["data"].get("news", [])
    # 分类
categorize(news_list)
    # 生成简报
    brief = generator.generate(result["date"], categorized)
    print(brief)
else:
    print(f"获取失败:{result.get('error')}")

场景二:历史事件查询

场景描述:查询某历史日期的新闻联播内容.

# 查询特定日期
result = fetcher.fetch("2025-01-01")
if result.get("success"):
    print(f"2025年元旦新闻联播共 {len(news_list)} 条")
    for i, news in enumerate(news_list, 1):
        print(f"{i}. {news.get('title')}")

场景三:内容创作参考

场景描述:自媒体创作者获取新闻素材用于内容创作.

# 获取最近一周的新闻标题作为创作参考
import datetime
# ...
for days_ago in range(7):
    date = (datetime.datetime.now() - datetime.timedelta(days=days_ago)).strftime("%Y%m%d")
    result = fetcher.fetch(date)
    if result.get("success"):
        print(f"\n=== {date} ===")
        for news in news_list[:5]:
            print(f"  - {news.get('title')}")

快速开始

  1. 阅读## 核心能力章节了解skill功能
  2. 按## 依赖说明配置环境
  3. 执行所需能力对应的命令
  4. 参考## 错误处理章节处理异常
  5. 查看## FAQ解答常见疑问

30秒上手

# 使用bun运行(推荐,速度更快)
bun (请参考skill目录中的脚本文件) 20250210
# ...
# 或使用node运行
node (请参考skill目录中的脚本文件) 20250210
# ...
# 使用相对日期
node (请参考skill目录中的脚本文件) yesterday
node (请参考skill目录中的脚本文件) today
```bash
# 在此执行相关操作
echo "操作完成"
```bash
# 依赖说明
npm install node-html-parser
# 或
bun add node-html-parser
# ...
# 2. 验证运行时
which bun || which node
# ...
# 3. 执行抓取
node (请参考skill目录中的脚本文件) 20250210 > news_20250210.json
# ...
# 4. 解析输出
cat news_20250210.json | python3 -m json.tool | head -50
```bash
# 在此执行相关操作
echo "操作完成"
```python
import os
# ...
class CCTVConfig:
    """央视新闻抓取配置(免费版)"""
    SCRIPT_PATH = os.getenv("CCTV_SCRIPT_PATH", "(请参考skill目录中的脚本文件)")
    RUNTIME = os.getenv("CCTV_RUNTIME", "node")  # node 或 bun
    OUTPUT_FORMAT = os.getenv("CCTV_OUTPUT", "json")  # json 或 text
    TIMEOUT = int(os.getenv("CCTV_TIMEOUT", "60"))
    MAX_NEWS = int(os.getenv("CCTV_MAX_NEWS", "30"))
# ...
    @classmethod
    def show(cls):
        print("=== 央视新闻抓取配置 ===")
        print(f"脚本路径:{cls.SCRIPT_PATH}")
        print(f"运行时:{cls.RUNTIME}")
        print(f"输出格式:{cls.OUTPUT_FORMAT}")
        print(f"超时时间:{cls.TIMEOUT}s")
        print(f"最大新闻数:{cls.MAX_NEWS}")
# ...
CCTVConfig.show()
```bash
# 在此执行相关操作
echo "操作完成"
```json
{
  "date": "20250210",
  "news": [
    {
      "title": "国家主席会见外国领导人",
      "content": "新闻联播内容摘要...",
      "category": "domestic",
      "order": 1
    },
    {
      "title": "国际组织发布重要报告",
      "category": "international",
      "order": 2
    }
  ],
  "total": 15,
  "fetch_time": "2025-02-10T20:00:00"
}

优秀实践

错误处理

def safe_fetch_with_retry(date_input, max_retries=2):
    """带重试的安全抓取"""
    fetcher = CCTVNewsFetcher()
    for attempt in range(max_retries):
        if result.get("success"):
            return result
        print(f"第{attempt+1}次失败:{result.get('error')}")
        if attempt < max_retries - 1:
            import time
            time.sleep(3)
    return {"success": False, "error": "重试次数已用完"}
```bash
# 在此执行相关操作
echo "操作完成"
```python
def get_recent_dates(days=7):
    """获取最近N天的日期列表"""
    from datetime import datetime, timedelta
    today = datetime.now()
    return [(today - timedelta(days=i)).strftime("%Y%m%d") for i in range(days)]
# ...
# 批量查询(注意频率,建议间隔2-3秒)
dates = get_recent_dates(7)
for date in dates:
    print(f"查询 {date}...")
    # result = fetcher.fetch(date)
    # time.sleep(2)
```bash
# 在此执行相关操作
echo "操作完成"
```python
import os
import json
# ...
def fetch_with_cache(date_input, cache_dir="./cache"):
    """带缓存的抓取"""
    os.makedirs(cache_dir, exist_ok=True)
    fetcher = CCTVNewsFetcher()
    date_str = fetcher.parse_date(date_input)
    cache_file = os.path.join(cache_dir, f"news_{date_str}.json")
# ...
    # 检查缓存
    if os.path.exists(cache_file):
        with open(cache_file, "r", encoding="utf-8") as f:
            return json.load(f)
# ...
    # 抓取并缓存
    if result.get("success"):
        with open(cache_file, "w", encoding="utf-8") as f:
            json.dump(result, f, ensure_ascii=False, indent=2)
# ...
    return result

错误场景3

检查error_code并按照处理方式进行排查.

依赖说明

运行环境

  • Agent平台: 支持SKILL.md的任意AI Agent(Claude Code / Cursor / Codex / Gemini CLI等)
  • 操作系统: Windows / macOS / Linux
  • Node.js: 16+ 或 Bun: 1.0+(推荐,速度更快)

第三方依赖

依赖项类型是否必需获取方式
Node.js 16+运行时二选一官网下载安装
Bun 1.0+运行时二选一curl -fsSL https://bun.sh/install | bash
node-html-parsernpm包必需npm install node-html-parserbun add node-html-parser
Python 3.8+运行时可选辅助脚本使用
LLM APIAPI必需由Agent平台内置LLM提供

API Key 配置

  • 免费版无需任何API Key
  • 新闻抓取基于公开网页内容,不涉及付费API调用
  • LLM模型路由由Agent平台内置提供

可用性分类

  • 分类: MD+EXEC(Markdown指令+命令行执行)
  • 说明: 通过自然语言指令驱动Agent执行新闻抓取与简报生成任务

快速开始

  1. 确认运行环境满足依赖说明中的要求
  2. 在AI Agent对话中调用本技能,提供必要的输入参数
  3. 检查输出结果,根据需要进行后续处理

详细的输入输出格式请参考下方章节说明。

已知限制

本免费体验版限制以下高级功能(需升级至专业版解锁):

  • 批量日期查询(如最近30天、指定日期范围)
  • AI智能摘要(基于LLM的深度摘要生成)
  • 多渠道推送(飞书/钉钉/企业微信/邮件)
  • 历史趋势分析(关键词频次、主题演变)
  • 全文内容获取(完整新闻正文)
  • 视频片段信息(新闻联播视频片段元数据)
  • 个性化订阅(关键词过滤、主题订阅)
  • 优先技术支持

解锁全部高级能力请使用专业版:cctv-news-tool-pro

示例

基本用法

输出:返回执行结果,包含操作状态和输出数据

用户: 执行核心功能
Skill: 正在执行核心功能...
Skill: 执行完成,结果如下: 操作成功

评论

加载中…