Skip to content

Jesseovo/last30days-skill-cn

Repository files navigation

last30days-cn — 中国平台深度研究引擎

简体中文 · English

📰 last30days-cn — 中国平台深度研究引擎

🚀 30 天的研究,30 秒的结果。8 大平台。零过时信息。

last30days-cn 是一个 AI Agent 技能(Skill),能够自动搜索中国互联网 8 大主流平台最近 30 天的内容,综合分析后生成有据可查的研究报告。

🔗 本项目基于 mvanhorn/last30days-skill 进行深度本土化改造,完全面向中国用户和中文互联网平台。

🕷️ v2.0 集成 MediaCrawler 爬虫引擎思路,大幅减少 API Key 依赖。v2.1 修复百度/小红书反爬问题,XHR 拦截替代 DOM 解析,Bing 兜底搜索,已移除无效的 ScrapeCreators 小红书集成。

当前版本:v3.1.0

👤 作者 / Author: Jesse (@Jesseovo)


✨ v3.1.0 优化内容

  • 修复中文平台日期统一按北京时间(CST)归档,避免非北京时间机器上的窗口边界偏移。
  • 新增 CJK bigram 回退分词,jieba 变为可选增强,skill 可零硬依赖运行。
  • 统一 HTTP 重试退避、Retry-After 解析和 debug URL 脱敏。
  • 新增 payload 生成/漂移检查、版本单源、缓存接线和 GitHub Actions CI。

✨ v3.0.0 升级内容

  • 追平原版 v3 的 Agent Skills 包结构:skills/last30days 现在是可独立安装的运行载荷。
  • 中文 CLI 统一使用单入口 last30days.py,根目录和 Skill 载荷保持同名结构。
  • 新增 --emit html--emit html-path,可生成离线可打开的 report.html
  • HTML 报告融入 op7418/guizang-ppt-skill 的 Swiss/IKB 视觉语言,适合浏览、归档、打印。
  • 小红书和知乎搜索增加空结果兜底说明,失败时会标注已尝试路径与可能原因。
  • 抖音、头条在原生接口被风控时新增公开搜索引擎兜底,不再静默返回 0 条(见 issue #8)。
  • 修复 macOS/Linux 下 skills/last30days/SKILL.md 损坏 symlink 导致的 npx 安装失败(见 issue #10)。
  • 对照上游 mvanhorn/last30days-skill 同步若干平台无关能力:--as-of 历史回溯、跨平台聚合热点、LAST30DAYS_DEFAULT_SEARCH/EXCLUDE_SOURCES 配置开关、诚实 --diagnose(实时探测)、HTML 报告 XSS 加固。
  • 根目录 scripts/ 继续保留,方便本地开发和旧路径调用;Agent Skills 安装使用 skills/last30days/scripts 下的自包含载荷。

✅ 质量验证

本次发布前已完成以下质检:

  • 远端发布 tag 统一为 v3.0.0,没有额外 v3 派生 tag。
  • 根目录与 Skill 载荷均统一使用 last30days.py 单入口,没有额外入口文件。
  • 全量测试通过:py -m pytest,共 176 passed
  • 根目录入口和 Skill 载荷入口均已验证:py scripts/last30days.py --diagnosepy skills/last30days/scripts/last30days.py --diagnose 均可正常输出平台可用性诊断。

⚠️ 免责声明 / Disclaimer

请务必仔细阅读以下内容。使用本项目即表示您同意以下所有条款。

法律合规声明

  1. 本项目仅供学习和研究目的。所有爬虫功能仅用于技术学习与研究交流,严禁用于商业用途
  2. 使用者必须严格遵守中华人民共和国相关法律法规,包括但不限于:
    • 《中华人民共和国网络安全法》
    • 《中华人民共和国数据安全法》
    • 《中华人民共和国个人信息保护法》
    • 《中华人民共和国反不正当竞争法》
  3. 使用者必须遵守各平台的**服务条款(ToS)**和 robots.txt 规定。
  4. 禁止将本项目用于以下行为:
    • 大规模、高频率地抓取平台数据
    • 收集、存储或传播他人个人隐私信息
    • 破坏或干扰平台正常运营
    • 任何形式的非法数据倒卖或商业牟利
    • 对外提供自动化数据采集服务
  5. 本项目开发者不承担因使用本项目而产生的任何法律责任。用户应自行承担使用本项目的全部法律风险。
  6. 如有侵权,请联系作者,将在第一时间处理。

技术免责

  • 爬虫功能依赖 Playwright 浏览器自动化,模拟正常用户浏览行为,不涉及逆向加密算法或破解安全机制。
  • 各平台接口随时可能变更,本项目不保证所有功能始终可用。
  • 建议将请求频率控制在合理范围内(如每次搜索间隔 ≥ 5 秒),避免被平台封禁。

💡 爬虫违法违规的案例频发,请务必合法合规使用。 参考:中国爬虫相关法律案例汇总


✨ v2.0 新特性

🆕 v2.0 vs v1.0 对比

特性 v1.0 v2.0
免费可用平台数 4 个 7 个(安装 Playwright 后)
需要 API Key 的平台 微博、小红书、抖音、微信 仅微信(其余可用爬虫替代)
数据获取方式 仅 API + 公开接口 API + 爬虫引擎 + 公开接口
安装难度 需配置多个 API Key pip install playwright 即可
marketplace.json 缺少 owner 字段(Bug) ✅ 已修复

核心升级

  1. 集成 MediaCrawler 爬虫引擎 — 基于 Playwright 浏览器自动化,无需逆向加密算法,大幅降低使用门槛
  2. 7/8 平台零配置可用 — 除微信外,所有平台均可无需 API Key 使用
  3. 智能降级策略 — API 优先 → 爬虫模式 → 公开接口,三级自动降级
  4. 修复 Issue #1 — 修复 marketplace.json 缺少 owner 字段导致 Claude Code 安装失败的 bug
  5. 登录态缓存 — 爬虫模式支持 Cookie 持久化,减少重复登录

📋 平台支持

平台 模块 数据获取方式 需要配置
🔴 微博 weibo.py API / 🕷️爬虫 / 公开接口 ✅ 爬虫模式无需配置
📕 小红书 xiaohongshu.py API / 🕷️爬虫 / 公开接口 ✅ 爬虫模式无需配置
📺 B站 bilibili.py 公开 API / 🕷️爬虫备用 ✅ 无需配置
💬 知乎 zhihu.py 公开搜索 / 🕷️爬虫备用 ✅ 无需配置
🎵 抖音 douyin.py API / 🕷️爬虫 / 公开接口 / 搜索兜底 ✅ 爬虫模式无需配置
💚 微信 wechat.py API / 搜狗搜索 WECHAT_API_KEY(可选)
🔵 百度 baidu.py 公开搜索 / API ✅ 基础搜索无需配置
📰 头条 toutiao.py 公开接口 / 搜索兜底 ✅ 无需配置

🕷️ = 需要安装 Playwright(pip install playwright && playwright install chromium


🤖 Agent 平台安装

Agent Skills(推荐)

npx skills add Jesseovo/last30days-skill-cn -g

Cursor(推荐)

将项目克隆到 Cursor 技能目录:

git clone https://github.com/Jesseovo/last30days-skill-cn.git

然后在 Cursor 中将 SKILL.md 添加为项目技能。

Claude Code

# 方式一:通过 Agent Skills 安装(推荐)
npx skills add Jesseovo/last30days-skill-cn -g

# 方式二:手动安装
git clone https://github.com/Jesseovo/last30days-skill-cn.git ~/.claude/skills/last30days-cn

OpenClaw / ClawHub

git clone https://github.com/Jesseovo/last30days-skill-cn.git ~/.agents/skills/last30days-cn

Gemini CLI

git clone https://github.com/Jesseovo/last30days-skill-cn.git
# 在 Gemini CLI 中作为扩展加载

通用 Agent

任何支持 Bash / Read / Write 工具的 AI Agent 都可以使用本技能。


⚙️ 配置指南

📍 第一步:可选增强

python -m pip install jieba

jieba 不是硬依赖;未安装时会自动使用 CJK bigram 回退分词,仍可运行。

📍 第二步:安装爬虫引擎(可选,推荐,可获取 7/8 平台数据)

python -m pip install playwright
python -m playwright install chromium

安装 Playwright 后,微博、小红书、抖音、B站(备用)、知乎(备用)均可无需 API Key 使用。

📍 第三步:创建配置文件(可选)

如果您希望使用 API 模式获取更稳定的数据,或需要使用微信公众号搜索:

mkdir -p ~/.config/last30days-cn
touch ~/.config/last30days-cn/.env
chmod 600 ~/.config/last30days-cn/.env

Windows(PowerShell)等价: 创建目录与空配置文件可用 New-Item -ItemType Directory -Force -Path "$env:USERPROFILE\.config\last30days-cn"New-Item -ItemType File -Path "$env:USERPROFILE\.config\last30days-cn\.env" -Force。限制 .env 仅当前用户可读写可近似使用 icacls "$env:USERPROFILE\.config\last30days-cn\.env" /inheritance:r /grant:r "$($env:USERNAME):(R,W)"(与 Unix chmod 600 意图相近,权限模型不同)。

编辑 ~/.config/last30days-cn/.env,按需填入 API Key:

# ============================================
# last30days-cn v2.0 配置文件
# ============================================
# 📌 说明:所有 API Key 均为可选
# 安装 Playwright 后,大部分平台已可通过爬虫模式使用
# API Key 提供更稳定的数据获取方式
# ============================================

# 🔴 微博开放平台(可选,已有爬虫模式替代)
# 获取方式: https://open.weibo.com → 创建应用 → 获取 Access Token
WEIBO_ACCESS_TOKEN=

# 📕 小红书(可选,已有爬虫模式替代)
# 获取方式: https://scrapecreators.com → 注册 → 获取 API Key
SCRAPECREATORS_API_KEY=

# 💬 知乎 Cookie(可选,增强搜索质量)
# 获取方式: 浏览器登录知乎 → F12 → Network → 复制 Cookie 值
ZHIHU_COOKIE=

# 🎵 抖音(可选,已有爬虫模式替代)
# 获取方式: https://tikhub.io → 注册 → 获取 API Key
TIKHUB_API_KEY=

# 💚 微信公众号搜索(目前无爬虫替代,需 API Key 才能使用)
# 获取方式: 使用第三方微信搜索 API 服务商
WECHAT_API_KEY=

# 🔵 百度搜索 API(可选,公开搜索已可用)
# 获取方式: https://cloud.baidu.com → 搜索服务 → 创建应用
BAIDU_API_KEY=
BAIDU_SECRET_KEY=

📍 第四步:验证配置

python scripts/last30days.py --diagnose

将输出各平台的可用状态和爬虫引擎状态:

{
  "weibo": true,
  "xiaohongshu": false,
  "bilibili": true,
  "zhihu": true,
  "douyin": true,
  "wechat": false,
  "baidu_api": false,
  "toutiao": true,
  "crawler_engine": {
    "playwright_available": true,
    "cached_logins": [],
    "note": "安装 Playwright 后,微博/小红书/抖音/B站/知乎可无需 API Key 使用爬虫模式"
  },
  "note_douyin_toutiao": "抖音/头条原生接口需签名参数,常被风控;接口失败时改用公开搜索引擎兜底,仅能拿到公开链接,无真实互动数据与精确日期。"
}

🚀 使用方式

基本用法

python scripts/last30days.py "AI编程助手" --emit compact
python scripts/last30days.py "AI编程助手" --emit html-path

命令行参数

参数 说明 示例
--emit 输出模式 compact / json / md / context / path / html / html-path
--quick 快速搜索 更少数据源,更快速度
--deep 深度搜索 更多数据源,更全面
--days N 回溯天数 --days 7(最近一周)
--as-of 历史回溯终点日期 --as-of 2026-05-01(以该日为终点回溯 N 天)
--search 指定搜索源 --search weibo,bilibili,zhihu
--diagnose 诊断配置 显示各平台可用状态
--timeout SECS 全局超时秒数 覆盖默认全局超时
--save-dir DIR 自动保存原始输出目录 将原始输出写入指定目录
--debug 调试模式 输出详细日志

🔧 环境变量:未指定 --search 时,回退到 LAST30DAYS_DEFAULT_SEARCH(逗号分隔的默认源集);EXCLUDE_SOURCES 可从启用集合中排除指定源。

使用示例

# 🔍 搜索 AI 相关话题
python scripts/last30days.py "最新AI工具" --emit compact

# ⚡ 快速搜索,仅 B站和知乎
python scripts/last30days.py "Python教程" --quick --search bilibili,zhihu

# 📊 深度搜索并保存结果
python scripts/last30days.py "新能源汽车" --deep --save-dir ~/Documents/research

# 📋 输出 JSON 格式(适合程序处理)
python scripts/last30days.py "ChatGPT替代品" --emit json

# 🗓️ 仅搜索最近 7 天
python scripts/last30days.py "热门话题" --days 7

# 🧾 生成可离线打开的 HTML 报告
python scripts/last30days.py "具身智能" --deep --emit html-path

🔧 数据获取策略(三级降级)

v2.0 采用三级自动降级策略,确保最大可用性:

优先级 1: API 模式(如配置了 API Key)
    ↓ 失败或未配置
优先级 2: 爬虫模式(MediaCrawler,需要 Playwright)
    ↓ 失败或未安装
优先级 3: 公开接口(HTTP 直接请求,无需任何配置)
    ↓ 仍无结果(抖音/头条/小红书/知乎)
兜底: 公开搜索引擎(Bing site: 搜索,获取公开链接)

各平台数据获取方式对比

平台 API 模式 爬虫模式 公开接口 搜索兜底
微博 WEIBO_ACCESS_TOKEN ✅ Playwright ✅ m.weibo.cn -
小红书 MCP HTTP API(可选) ✅ Playwright (XHR拦截) ⚠️ 命中率低 ✅ Bing
B站 - ✅ Playwright(备用) ✅ 公开 API -
知乎 ZHIHU_COOKIE(增强) ✅ Playwright(备用) ✅ 公开搜索 ✅ Bing
抖音 TIKHUB_API_KEY ✅ Playwright ⚠️ 需签名 ✅ Bing
微信 WECHAT_API_KEY - ✅ 搜狗搜索 -
百度 BAIDU_API_KEY - ⚠️ 公开搜索可能被拦截 ✅ Bing
头条 - - ⚠️ 需签名 ✅ Bing

⚠️ 抖音/头条原生 web 接口现在强制要求签名参数(a_bogus / _signature),常被风控。接口失败时改用公开搜索引擎兜底,只能拿到公开链接,无真实互动数据与精确日期


🏗️ 项目架构

last30days-skill-cn/
├── 📄 SKILL.md              # Agent 技能定义文件
├── 📄 README.md             # 项目说明(中文,本文件)
├── 📄 README.en.md          # 项目说明(English)
├── 📄 LICENSE               # MIT 许可证
├── 📄 requirements.txt      # Python 依赖
├── 📁 assets/               # README 配图
├── 📁 scripts/
│   ├── 🐍 last30days.py     # 中文主入口 CLI
│   └── 📁 lib/
│       ├── crawler_bridge.py  # 🆕 MediaCrawler 爬虫桥接模块
│       ├── weibo.py          # 微博搜索模块
│       ├── xiaohongshu.py    # 小红书搜索模块
│       ├── bilibili.py       # B站搜索模块
│       ├── zhihu.py          # 知乎搜索模块
│       ├── douyin.py         # 抖音搜索模块
│       ├── wechat.py         # 微信公众号模块
│       ├── baidu.py          # 百度搜索模块
│       ├── toutiao.py        # 今日头条模块
│       ├── schema.py         # 数据结构定义
│       ├── score.py          # 评分系统
│       ├── normalize.py      # 数据标准化
│       ├── dedupe.py         # 去重
│       ├── render.py         # 输出渲染
│       ├── relevance.py      # 相关性计算
│       ├── query.py          # 查询预处理
│       ├── query_type.py     # 查询类型检测
│       ├── entity_extract.py # 实体抽取
│       ├── env.py            # 环境配置管理
│       ├── cache.py          # 缓存管理
│       ├── dates.py          # 日期工具
│       ├── http.py           # HTTP 客户端
│       ├── ui.py             # 终端 UI
│       └── setup_wizard.py   # 配置向导
├── 📁 skills/
│   └── 📁 last30days/        # Agent Skills 自包含运行载荷
│       ├── 📄 SKILL.md       # 安装后供 Agent 读取的技能说明
│       └── 📁 scripts/
│           ├── 🐍 last30days.py
│           └── 📁 lib/       # 与根目录脚本同步的运行依赖
├── 📁 fixtures/              # 示例数据
├── 📁 tests/                 # 测试用例
└── 📁 hooks/                 # Agent 钩子

📊 评分系统

每条搜索结果的综合评分(0-100)基于:

维度 权重 说明
🎯 相关性 45% 与查询主题的文本匹配度
🕐 时效性 25% 内容发布时间的新鲜程度
🔥 互动度 30% 各平台互动指标(见下表)

各平台互动指标

平台 互动指标
微博 转发 + 评论 + 点赞
小红书 点赞 + 收藏 + 评论 + 分享
B站 播放 + 弹幕 + 评论 + 投币 + 收藏
知乎 赞同 + 评论 + 收藏
抖音 点赞 + 评论 + 分享 + 播放
头条 评论 + 阅读 + 点赞

🙏 致谢


📜 许可证

本项目基于 MIT License 发布。

About

last30days-cn 是一个 AI Agent 技能(Skill),能够自动搜索中国互联网 8 大主流平台最近 30 天的内容,综合分析后生成有据可查的研究报告。

Topics

Resources

License

Stars

1.1k stars

Watchers

7 watching

Forks

Packages

 
 
 

Contributors