
Wechat Fastest Growing
- 240 installs
- 316 repo stars
- Updated August 4, 2026
- redfox-data/redfox-community
Use wechat-fastest-growing for development tasks
About
wechat-fastest-growing: A skill for development. This provides functionality for development workflows.
- wechat-fastest-growing
Wechat Fastest Growing by the numbers
- 240 all-time installs (skills.sh)
- +16 installs in the week ending Aug 4, 2026 (Skillselion tracking)
- Ranked #1,635 of 4,347 Backend & APIs skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/redfox-data/redfox-community --skill wechat-fastest-growingAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 240 |
|---|---|
| repo stars | ★ 316 |
| Last updated | August 4, 2026 |
| Repository | redfox-data/redfox-community ↗ |
What it does
Use wechat-fastest-growing for development tasks
Files
公众号黑马账号推荐
简介
公众号黑马账号推荐是一款面向内容运营与新媒体研究的阅读增长率排行查询工具,通过脚本拉取官方榜单数据,帮助用户快速发现近期阅读量增速快的公众号与代表作。
通过本 Skill,你可以:
- 📊 同作者爆文 vs 最低阅读文对比:针对同一个账号,对比其“爆文”和“最低阅读文”在选题、标题、切入点上的差异。直接告诉你可以复制的具体打法。
- 📈 高增长账号类型分析:分析近期高增长账号的赛道分布和共同策略,判断当下真实流量风向,并给出哪些能迁移到其他平台的建议。
适用于公众号运营找高增长对标、编辑选题复盘、研究者观察赛道热度等角色。
功能特性
🎯 核心功能
- 📊 增长率榜单:按日期查询公众号阅读增长率排行数据(脚本输出 Markdown 表格)
- 🔗 可点击标题:表格中标题已为原文链接,便于跳转核对
- 📌 指标说明:榜单含「综合评分指数」等字段;公式与加权定义见 references/core_workflow.md
- 📈 增长分析:基于同一份脚本输出完成三点输出(爆文表、作品类型表、300–500 字总结),字段与条数上限以核心流程为准
✨ 特色亮点
- ⏰ 日期语义:支持口语化「最新/昨天」与指定日;
rankDate支持"yesterday"、"today"、"YYYY-MM-DD"(映射与默认规则见核心流程) - 🔒 数据真实性:强制走
scripts/fetch_growth_rank.py;脚本 stdout 须原样展示,不得改写或重排表格 - 📅 查询窗口:仅支持最近 30 天内的
rankDate;查最新时若昨日无数据会自动向前追溯(逐天查询,找到即停,见核心流程)
一键安装
前置条件
- Python 3.8 及以上版本
requests库:pip install requests- 红狐Hub API Key,格式
ak_xxxxxxxx
安装方式
SkillHub
1. 前往 SkillHub 2. 搜索 wechat-fastest-growing 或 公众号黑马账号推荐 3. 按平台指引完成安装(支持对话安装或本地 Zip 导入)
ClawHub
1. 前往 ClawHub 2. 搜索 wechat-fastest-growing 或 公众号黑马账号推荐 3. 可使用 CLI:openclaw skills install wechat-fastest-growing 或 clawhub install wechat-fastest-growing,或下载 skill 包本地导入
方式二:命令行独立使用
无需安装技能包,配置好 API Key 后可直接运行脚本:
pip install requests
python scripts/fetch_growth_rank.py --rankDate yesterday安装完成后,访问 红狐 Hub网站 登录 注册并获取 API Key(新用户获赠免费积分),配置环境变量 REDFOX_API_KEY(见下方),重启终端即可在对话中发起查询。
环境变量配置
| 变量名 | 必填 | 说明 |
|---|---|---|
REDFOX_API_KEY | 是 | 红狐 Hub API 访问密钥,格式 ak_xxxxxxxx |
COZE_REDFOX_API_7633629455969337344 | 否 | 兼容旧变量名(脚本自动回退读取) |
macOS / Linux:
echo 'export REDFOX_API_KEY=<你的apikey>' >> ~/.zshrc
source ~/.zshrcWindows(PowerShell):
[Environment]::SetEnvironmentVariable("REDFOX_API_KEY", "<你的apikey>", "User")配置后需重启终端。验证:echo $REDFOX_API_KEY(macOS/Linux)或 echo %REDFOX_API_KEY%(Windows)。
三级回退机制:脚本读取 API Key 时,按 环境变量 → shell 配置文件(~/.bashrc / ~/.zshrc / ~/.bash_profile / ~/.profile)→ 提示用户配置 的顺序自动获取,无需显式传入。
鉴权
获取 API Key
1. 访问 红狐Hub 官网 了解服务详情 2. 前往 注册页面 注册账号 3. 新注册用户将获赠免费积分,可立即开始使用 API 服务 4. 注册登录后,在个人中心获取 API Key,格式为 ak_xxxxxxxx
配置 API Key
REDFOX_API_KEY从环境变量获取,格式ak_xxxxxxxx- 脚本支持三级回退读取:环境变量 → shell 配置文件自动探测 → 提示手动配置
- 推荐通过环境变量持久化配置(详见上方 环境变量配置)
使用指南
基础使用
1. 发起增长榜查询
在对话中说明日期需求(可省略,默认查昨日):
用户:公众号增长榜
>
助手:已按核心流程使用 rankDate="yesterday"拉取;以下为脚本输出的完整表格(原样)。…2. 查看榜单结果
助手运行 scripts/fetch_growth_rank.py,将 stdout 全文原样 展示(Markdown 表格不得省略、不得自行重算或替换为「摘要表」)。脚本失败或无数据时如实说明,禁止虚构排名或阅读数。
3. 增长趋势分析(按需)
当用户需要「特点、规律、为什么增长快」等解读时,在已展示的真实榜单基础上,按核心流程完成 3 块输出(爆文分析表 ≤5 条、作品类型分析表 ≤5 条、总结 300–500 字)。
高级使用
1. 指定日期与参数
根据用户说法确定 rankDate。日期超出最近 30 天时说明不支持,不得编造榜单。
用户:看下 3 月 15 号的增长榜
>
助手:使用 rankDate="2026-03-15" 调用脚本;以下为 stdout 原样表格。…2. 命令行直接拉榜
在项目目录执行(参数名与取值须一致):
python scripts/fetch_growth_rank.py --rankDate "<yesterday|today|YYYY-MM-DD>"3. 结构化增长解读
用户:最近哪些号增长快,有什么共性?
>
助手:先输出脚本榜单(原样),再按核心流程给出两张分析表与一段总结。…
4. 遵循核心流程硬性约束
执行榜单获取与增长分析前,须打开并遵循 references/core_workflow.md(用户意图 → rankDate → 脚本参数 → 三点分析)。不得跳过其中的硬性约束。
常用命令速查
| 用户说法 / 命令 | 功能 |
|---|---|
| 「最新 / 今日 / 公众号增长榜」 | rankDate 按核心流程映射(多为 yesterday) |
| 「昨天 / 指定某日期的增长榜」 | rankDate 为 YYYY-MM-DD 或规则允许的别名 |
| 「增长趋势 / 特点 / 规律」 | 脚本表格原样 + 核心流程规定的 3 段分析 |
python scripts/fetch_growth_rank.py --rankDate yesterday | 命令行拉取昨日增长榜 |
使用场景
场景一:找高增长对标
角色:公众号运营
需求:想看近期阅读量增速快的账号与代表作
使用方式:
1. 按日期跑脚本拉取增长榜 2. 原样展示表格,点击标题跳转原文核对 3. 可选追问增长特点与共性分析
预期收益:快速锁定对标账号与爆款选题方向
---
场景二:选题与复盘
角色:内容编辑
需求:结合榜单看爆款标题与账号策略
使用方式:
1. 拉取指定日或「最新」增长榜 2. 按核心流程输出爆文分析表与作品类型表 3. 阅读 300–500 字总结提炼规律
预期收益:为下一轮选题提供可验证的数据参考
---
场景三:指定日复盘
角色:分析师 / 管理者
需求:核对某一天的增长排行是否异常
使用方式:
1. 使用 rankDate="YYYY-MM-DD" 查询(注意 30 天窗口) 2. 对比综合评分指数与阅读、互动指标 3. 对异常条目跳转原文二次核实
预期收益:发现单日数据波动与潜在运营动作
---
场景四:赛道观察
角色:研究者
需求:粗看哪些账号在增速榜上集中出现
使用方式:
1. 连续多日拉榜,观察重复出现的账号 2. 先看原样榜单,需要时再要结构化分析 3. 结合作品类型表归纳赛道内容形态
预期收益:把握赛道热度迁移与内容形态变化
项目架构
目录结构
wechat-fastest-growing/
├── SKILL.md # 产品说明文档
├── references/
│ ├── core_workflow.md # 标准流程、公式、分析字段与硬性约束
│ └── api-spec.md # 红狐 Hub API 参数与响应说明
└── scripts/
└── fetch_growth_rank.py # 调用 API 获取榜单并输出 Markdown 表格技术栈
| 项目 | 说明 |
|---|---|
| 运行环境 | Python 3.8+ |
| 核心依赖 | requests(其余为标准库) |
| 数据来源 | 红狐 Hub API(getGzhCozeSkillDataRaise) |
| 部署方式 | SkillHub / ClawHub / 命令行脚本 |
核心模块
| 模块 | 职责 |
|---|---|
fetch_growth_rank.py | 解析 rankDate、调用 红狐 Hub API、输出 Markdown 榜单表格(标题为可点击链接) |
core_workflow.md | 用户意图映射、rankDate 规则、stdout 原样约束、三点分析模板与条数上限 |
api-spec.md | 接口地址、鉴权、请求参数与字段说明 |
常见问答
安装相关问题
Q1:未检测到 API Key 怎么办?
按 一键安装 注册 红狐Hub 并配置 REDFOX_API_KEY。新注册用户有免费积分。
Q2:如何验证配置已生效?
执行 echo $REDFOX_API_KEY(macOS/Linux)或 echo %REDFOX_API_KEY%(Windows),确认输出为 ak_ 开头。若未生效,重启终端。
Q3:支持哪些部署方式?
支持 SkillHub、ClawHub 平台安装,也可直接运行 scripts/fetch_growth_rank.py 独立调用。
---
使用相关问题
Q4:`rankDate` 支持哪些写法?
支持 "yesterday"、"today"、"YYYY-MM-DD"。口语「最新/增长榜」等多映射为 yesterday;数据为空时自动向前一天追溯,逐天查询直到找到有数据的日期,找到后立即停止(见核心流程)。
Q5:可以查询多久以前的数据?
仅支持最近 30 天内;超出范围脚本会报错,请勿让模型编造榜单。
Q6:增长分析包含哪些内容?
在用户需要解读时:爆文分析表(≤5 条)、作品类型分析表(≤5 条)、300–500 字总结;均须基于脚本真实输出,不得幻觉。
Q7:表格里的「综合评分指数」怎么算?
公式:8 + 2 × ((加权值/阅读数 - 0.2) / 0.8),范围 8–10;加权值 = 转发×10×0.35 + 在看×5×0.25 + 点赞×2×0.15 + 阅读×1×0.25。详见 core_workflow.md。
---
故障排除
Q8:脚本返回空数据或失败?
确认 REDFOX_API_KEY 有效、日期在 30 天窗口内。查看脚本 stderr 错误信息,勿用模型补齐排行。
---
安全与许可
Q9:API Key 如何保管?
REDFOX_API_KEY 仅通过环境变量读取,请勿写入代码仓库或公开分享。
Q10:数据使用边界?
榜单仅以脚本成功输出为准;引用外链与标题时遵守平台与版权规范,不对未经验证的数据做夸大承诺。
核心工作流程
完整流程必须先读取 references/core_workflow.md 并遵循其中的规则、脚本路径与输出约束;正文以下为提纲与召回用说明。
输出格式、用户意图映射、脚本参数、三点分析字段与注意事项详见 references/core_workflow.md。
执行任务时须严格遵循,包括但不限于:
- 必须调用
scripts/fetch_growth_rank.py,禁止模型自行生成榜单 - 脚本 stdout Markdown 表格须原样呈现
- 增长解读的三表一条数、字数上限以核心流程为准
注意事项
- 数据:榜单仅以脚本成功输出为准;不可用模型幻觉补齐排行、阅读量或链接
- 输出:标题列已为可点击链接,勿改成纯文本以免丢跳转
- 日期:仅支持最近 30 天内查询;「最新」场景下昨日无数据时回退前天
- 合规:遵守平台与版权规范;不对未经验证的数据做夸大或虚假效果承诺
WeChat Fastest Growing Accounts / wechat-fastest-growing
---
Introduction
Directly connected to the official reading growth rate rankings, browse the top public accounts by reading growth speed for any given date. Only the highest-read article per author is shown, with titles linked directly to the original post.
Core Value
- Ranking data comes from official APIs, displayed as-is without manual editing or reordering
- Accepts natural language date input — "latest", "yesterday", or "March 15" all work
- Optionally drill into viral article patterns and track-level strategy summaries based on real ranking data
Who It's For
- ✍️ WeChat Official Account operators — quickly discover the fastest-growing benchmark accounts and viral topics in your track
- 📋 Content editors — use rankings for topic review sessions and extract replicable playbooks
- 🔍 Researchers / analysts — observe track heat shifts and single-day data fluctuations
---
Features
Core Capabilities
- Growth rate rankings: Fetch reading growth rate rankings by date, output as raw Markdown table with clickable links to original articles
- Natural language date parsing: Supports "latest", "yesterday", "YYYY-MM-DD"; auto-falls back to the day before if yesterday's data is unavailable
- Growth trend analysis: Based on real ranking data, outputs a viral article analysis table (≤5 entries), a content-type analysis table (≤5 entries), and a 300–500 word summary
- Composite score index: Rankings include a weighted score field measuring the combined performance of reads, forwards, likes, and "Top Reads"
Highlights
- Script output is shown verbatim — the model is not allowed to rewrite or reorder ranking content, ensuring data integrity
- Any date within the past 30 days is queryable; out-of-range requests are clearly flagged rather than fabricated
---
API Key Acquisition & Security
- This skill requires the environment variable:
REDFOX_API_KEY. REDFOX_API_KEYis provided by RedFoxHub (https://redfox.hk).- Visit RedFoxHub to register and obtain your
REDFOX_API_KEY. - Configure the
REDFOX_API_KEYenvironment variable on your device before using this skill. - Before using a key, confirm its source, scope, expiry, and whether it supports reset or revocation.
- Never hard-code or expose the key in plaintext within code, prompts, logs, or output files.
---
Usage Guide
Describe your needs in natural language — no commands to memorize.
Quick Reference
| Intent | Example phrase | Result |
|---|---|---|
| Latest rankings | WeChat growth rankings / latest growth chart | Fetches yesterday's (or most recent available) rankings and displays the raw table |
| Specific date | Show me the growth rankings for March 15 | Fetches with rankDate=2026-03-15 and displays verbatim |
| Trend analysis | Which accounts grew fastest recently, and what do they have in common? | Outputs rankings first, then two analysis tables and a summary |
| Viral vs. low-read comparison | Compare the viral and low-read articles from one account on the list | Analyzes topic and title differences for the same account using ranking data |
Output Example
Query results are displayed as a raw Markdown table with columns for rank, account name (clickable), growth rate, composite score index, and more. When analysis is requested, three additional output blocks appear below the table.
---
Use Cases
| Scenario | Role | Example question | Benefit |
|---|---|---|---|
| Find benchmark accounts | Account operator | What accounts are on today's growth chart? | Quickly identify the fastest-growing accounts and viral topic directions |
| Topic review | Content editor | Show the latest rankings and analyze viral article patterns | Get viral article and content-type analysis tables to inform the next round of topics |
| Date-specific review | Analyst | Pull the growth rankings for April 1 | Check single-day data fluctuations and click titles to verify originals |
| Track observation | Researcher | Which accounts appear repeatedly across several days of rankings? | Identify high-frequency accounts and track shifts in track heat |
公众号黑马账号推荐 / wechat-fastest-growing
---
简介
直接对接官方阅读增长率榜单,按日期查看公众号阅读增速 TOP 排行,每个作者只展示最高阅读那篇,标题一键直达原文。
核心价值
- 榜单数据来自官方接口,真实原样展示,不经人工篡改或重排
- 支持口语化日期输入,「最新」「昨天」「3 月 15 日」均可识别
- 在榜单基础上可进一步获得爆文规律分析与赛道策略总结
适用对象
- ✍️ 公众号运营者 — 快速发现同赛道近期增速最快的对标账号与爆款选题
- 📋 内容编辑 — 结合榜单完成选题复盘,提取可复用的打法参考
- 🔍 研究者 / 分析师 — 观察赛道热度迁移与单日数据波动
---
功能特性
核心功能
- 增长率榜单查询:按日期拉取公众号阅读增长率排行,以 Markdown 表格原样输出,含可点击原文链接
- 口语化日期识别:支持「最新」「昨天」「YYYY-MM-DD」等写法,昨日无数据时自动回退前天
- 增长趋势分析:在真实榜单基础上输出爆文分析表(≤5 条)、作品类型分析表(≤5 条)及 300–500 字总结
- 综合评分指数:榜单含加权评分字段,衡量阅读、转发、在看、点赞的综合表现
特色亮点
- 脚本输出原样展示,禁止模型改写或重排榜单内容,数据可信度有保障
- 30 天内任意日期均可查询,超出范围明确告知,不编造榜单
---
密钥获取与安全说明
- 本技能需要使用环境变量:
REDFOX_API_KEY。 REDFOX_API_KEY由 红狐 hub (https://redfox.hk)提供。- 请前往 红狐 hub 注册账号,获取
REDFOX_API_KEY。 - 配置设备环境变量
REDFOX_API_KEY后使用本技能。 - 在提供密钥前,请先确认密钥来源、可用范围、有效期及是否支持重置/撤销。
- 禁止在代码、提示词、日志或输出文件中硬编码/明文暴露密钥。
---
使用指南
直接用自然语言描述日期需求即可,无需记忆命令。
常用说法速查
| 意图 | 示例话术 | 效果 |
|---|---|---|
| 查最新榜单 | 公众号增长榜 / 最新增长榜 | 拉取昨日(或最近可用日期)榜单,原样输出表格 |
| 查指定日期 | 看一下 3 月 15 号的增长榜 | 以 rankDate=2026-03-15 拉取并原样展示 |
| 获取趋势分析 | 最近哪些号增长快,有什么共性? | 先输出榜单,再给出两张分析表与一段总结 |
| 爆文 vs 低阅读对比 | 帮我对比一下榜单里某账号的爆文和低阅读文 | 基于榜单数据分析同账号选题与标题差异 |
输出示例
查询结果以 Markdown 表格原样呈现,含排名、账号名称(可点击)、增长率、综合评分指数等字段;需要分析时在表格下方另起三块输出。
---
使用场景
| 场景 | 角色 | 示例问法 | 收益 |
|---|---|---|---|
| 找高增长对标 | 公众号运营 | 今天的增长榜有哪些账号? | 快速锁定近期增速最快的对标账号与爆款选题方向 |
| 选题与复盘 | 内容编辑 | 给我看最新榜单并分析爆文特点 | 拿到爆文分析表与作品类型表,为下轮选题提供数据支撑 |
| 指定日复盘 | 分析师 | 查一下 4 月 1 日的增长排行 | 核对某日数据波动,点击标题跳转原文二次核实 |
| 赛道观察 | 研究者 | 连续几天的榜单里有哪些账号重复出现? | 归纳高频上榜账号,把握赛道热度迁移趋势 |
公众号黑马账号推荐 API 接口规范
接口信息
接口地址: https://redfox.hk/story/api/cozeSkill/getGzhCozeSkillDataRaise
请求方式: GET
请求头:
Content-Type: application/jsonX-API-KEY: 通过三级回退机制获取(环境变量 → shell 配置文件 → 提示用户配置)
认证方式
脚本按以下三级回退读取 API Key: 1. 环境变量 REDFOX_API_KEY(推荐) 2. 环境变量 COZE_REDFOX_API_7633629455969337344(兼容旧变量名) 3. Shell 配置文件 自动探测(~/.bashrc / ~/.zshrc / ~/.bash_profile / ~/.profile),提取其中 REDFOX_API_KEY 的值 4. 提示用户配置:未找到时输出配置指引并退出
请求使用原生 requests 库,不依赖任何 Coze 工作负载身份模块。
请求参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| rankDate | String | 是 | 榜单日期(YYYY-MM-DD格式,如"2026-04-15";支持相对日期"yesterday"/"today") |
| source | String | 是 | 数据源("公众号阅读增长榜-GitHub") |
时间参数说明:
- yesterday: 昨天(用于查询昨日榜单)
- today: 今天(用于查询今日榜单)
- YYYY-MM-DD: 具体日期(如 2026-04-15)
- 时间限制: 最早支持前30天的数据,超过30天会返回错误
示例1:获取昨日增长榜
GET https://redfox.hk/story/api/cozeSkill/getGzhCozeSkillDataRaise?rankDate=2026-04-15&source=公众号阅读增长榜-GitHub示例2:获取指定日期增长榜
GET https://redfox.hk/story/api/cozeSkill/getGzhCozeSkillDataRaise?rankDate=2026-04-01&source=公众号阅读增长榜-GitHub返回数据
成功响应
{
"code": 2000,
"message": "success",
"data": [
{
"rankPosition": 1,
"accountId": "账号ID",
"uid": 123456,
"userName": "公众号名称",
"userHeadUrl": "头像URL",
"growthRate": 125.50,
"rankDate": "2026-04-15",
"minWork": {
"photoId": "作品标识",
"title": "作品标题",
"coverUrl": "封面URL",
"clicksCount": "10000",
"shareCount": "500",
"likeCount": "300",
"watchCount": "200",
"commentCount": "100",
"publicTime": "发布时间",
"summary": "摘要",
"content": "原文内容",
"oriUrl": "原文链接"
},
"maxWork": {
"photoId": "作品标识",
"title": "作品标题",
"coverUrl": "封面URL",
"clicksCount": "50000",
"shareCount": "2000",
"likeCount": "1500",
"watchCount": "800",
"commentCount": "400",
"publicTime": "发布时间",
"summary": "摘要",
"content": "原文内容",
"oriUrl": "原文链接"
}
}
]
}响应字段说明
WxGrowthRankVo(主对象)
| 字段名 | 类型 | 说明 |
|---|---|---|
| rankPosition | Integer | 排名位置 |
| accountId | String | 公众号账号ID |
| uid | Integer | 用户ID |
| userName | String | 公众号名称 |
| userHeadUrl | String | 公众号头像URL |
| growthRate | BigDecimal | 增长率百分比 |
| rankDate | String | 榜单日期 |
| minWork | WorkDetail | 最低阅读作品数据 |
| maxWork | WorkDetail | 最高阅读作品数据 |
WorkDetail(作品详情内部类)
| 字段名 | 类型 | 说明 |
|---|---|---|
| photoId | String | 作品标识 |
| title | String | 标题 |
| coverUrl | String | 封面URL |
| clicksCount | String | 阅读数 |
| shareCount | String | 分享数 |
| likeCount | String | 点赞数 |
| watchCount | String | 在看数 |
| commentCount | String | 评论数 |
| publicTime | String | 发布时间 |
| summary | String | 摘要 |
| content | String | 原文内容 |
| oriUrl | String | 原文链接 |
错误响应
{
"code": 4000,
"message": "错误信息",
"data": null
}注意事项
1. 日期参数必须为YYYY-MM-DD格式,或使用相对日期"yesterday"/"today" 2. 仅支持查询最近30天内的数据 3. 数据按增长率降序排列,rankPosition从1开始 4. 每个账号包含最高阅读和最低阅读两个作品数据 5. growthRate字段为百分比数值,如125.50表示125.50%的增长率
公众号黑马账号推荐 — 核心执行流程
本文档为本 Skill 的标准执行流程与硬性约束;执行榜单获取与增长分析时必须按本文档完整遵循。
标准流程
1. 用户意图识别(智能体处理)
智能体识别用户请求的榜单时间:
- 最新增长榜:用户输入「今日增长榜」、「最新增长榜」、「公众号增长榜」
→ 调用脚本,传入 rankDate: "yesterday"(查询昨日榜单,数据为空时自动向前一天追溯,找到即停,最多追溯30天)
- 指定日期查询:用户提到具体时间,如「昨天增长榜」、「3月15日的增长榜」
→ 调用脚本,传入 rankDate: "YYYY-MM-DD" 格式日期
- 模糊请求:用户输入不明确
→ 默认查询昨日增长榜
2. 获取增长榜单数据(脚本执行)
调用 scripts/fetch_growth_rank.py 获取公众号增长率数据。
重要说明:
- 必须调用脚本获取数据,不能由智能体自行生成
- 必须将脚本 stdout 输出原样展示给用户,不得省略、修改或重新格式化
- 脚本直接输出 Markdown 表格,智能体只需原样展示即可
- 每个作者展示一行数据(最高阅读作品)
- 标题列已渲染为 Markdown 链接格式
[标题](链接) - 「综合评分指数」计算公式:8 + 2 × ((加权值/阅读数 - 0.2) / 0.8),范围 8–10 分
- 加权值 = 转发×10×0.35 + 在看×5×0.25 + 点赞×2×0.15 + 阅读×1×0.25
脚本调用参数:
rankDate:查询日期(支持"yesterday"、"today"、具体日期"YYYY-MM-DD")
调用示例:
python scripts/fetch_growth_rank.py --rankDate "yesterday"
python scripts/fetch_growth_rank.py --rankDate "2026-04-15"3. 增长趋势分析(智能体处理)
基于脚本输出的榜单数据,智能体必须完整输出以下 3 点分析:
1. 📊 爆文分析:以 Markdown 表格形式展示(最多 5 条)
- 表格字段:作者、选题、核心差异、爆文
- 爆文字段展示文章标题(Markdown 链接格式,点击可跳转原文)
2. 📝 高增长账号的作品类型分析:以 Markdown 表格形式展示(最多 5 条)
- 表格字段:作品类型、作者、核心策略
3. 📌 总结:基于以上分析,综合提炼公众号阅读增长的核心规律与关键发现(字数严格控制在 300–500 字之间)
注意事项
- 榜单数据必须以 Markdown 表格形式展示,脚本输出的表格需原样展示
- 标题列为 Markdown 链接格式,可直接点击跳转原文
- 日期参数仅支持最近 30 天内的数据查询
- 查询最新数据时,昨日无数据会自动向前追溯,逐天查询直到找到有数据的日期(最多30天),找到后立即停止
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""公众号阅读增长率排行榜获取脚本"""
import argparse
import os
import re
import sys
from datetime import datetime, timedelta
import requests
SKILL_ID = "7633629455969337344"
API_URL = "https://redfox.hk/story/api/cozeSkill/getGzhCozeSkillDataRaise"
def parse_date(date_str: str) -> str:
"""解析日期参数,支持yesterday/today/YYYY-MM-DD"""
date_str = date_str.strip().lower()
if date_str == "yesterday":
return (datetime.now() - timedelta(days=1)).strftime("%Y-%m-%d")
if date_str == "today":
return datetime.now().strftime("%Y-%m-%d")
try:
dt = datetime.strptime(date_str, "%Y-%m-%d")
today = datetime.now()
if dt < today - timedelta(days=30):
raise Exception(f"日期不能早于30天前")
if dt > today:
raise Exception("日期不能晚于今天")
return date_str
except ValueError:
raise Exception("日期格式错误,请使用 YYYY-MM-DD 格式")
def _extract_api_key_from_config(filepath: str) -> str | None:
"""从shell配置文件中提取 REDFOX_API_KEY 的值"""
try:
with open(filepath, "r", encoding="utf-8") as f:
for line in f:
line_stripped = line.strip()
if "REDFOX_API_KEY" not in line_stripped:
continue
# 匹配 export REDFOX_API_KEY=xxx、export REDFOX_API_KEY="xxx"、set REDFOX_API_KEY=xxx 等
m = re.search(r'REDFOX_API_KEY\s*[=:]\s*["\']?([^\s"\'#]+)["\']?', line_stripped)
if m:
return m.group(1)
except (OSError, UnicodeDecodeError):
pass
return None
def get_api_key() -> str:
"""获取 API Key,三级回退:环境变量 → shell配置文件 → 提示用户配置"""
# 第一级:从当前设备环境变量获取
api_key = os.getenv("REDFOX_API_KEY")
if api_key:
return api_key
# 兼容旧变量名
api_key = os.getenv(f"COZE_REDFOX_API_{SKILL_ID}")
if api_key:
return api_key
# 第二级:从shell配置文件中自动读取
home = os.path.expanduser("~")
config_files = [
os.path.join(home, ".bashrc"),
os.path.join(home, ".bash_profile"),
os.path.join(home, ".zshrc"),
os.path.join(home, ".profile"),
]
for config_file in config_files:
if not os.path.isfile(config_file):
continue
api_key = _extract_api_key_from_config(config_file)
if api_key:
return api_key
# 第三级:提示用户配置
raise ValueError(
"缺少 API Key,请按以下步骤配置:\n"
"1. 访问 https://redfox.hk/login 注册账号\n"
"2. 登录后在个人中心获取 API Key(格式:ak_xxxxxxxx)\n"
"3. 设置环境变量:export REDFOX_API_KEY=<你的apikey>\n"
" 或永久配置:echo 'export REDFOX_API_KEY=<你的apikey>' >> ~/.bashrc && source ~/.bashrc"
)
def fetch_data(rank_date: str, source: str) -> dict:
"""调用API获取榜单数据"""
api_key = get_api_key()
headers = {
"Content-Type": "application/json",
"X-API-KEY": api_key
}
try:
resp = requests.get(API_URL, params={"rankDate": rank_date, "source": source},
headers=headers, timeout=30)
resp.raise_for_status()
return resp.json()
except Exception as e:
raise Exception(f"API调用失败: {e}")
def safe_str(val) -> str:
return "-" if val is None or val == "" else str(val)
def parse_int(val) -> int:
if val is None or val == "":
return 0
try:
return int(val)
except (ValueError, TypeError):
return 0
def format_count(val) -> str:
"""格式化计数:10000~999999显示为Xw+"""
num = parse_int(val)
if num == 0 and (val is None or val == ""):
return "-"
if num >= 1000000:
return str(num)
if num >= 10000:
return f"{num // 10000}w+"
return str(num)
def make_link(title: str, url: str) -> str:
"""生成Markdown链接"""
t, u = safe_str(title), safe_str(url)
return f'[{t}]({u})' if t != "-" and u != "-" else t
def calc_score_v2(items: list) -> list:
"""计算综合评分指数(8-10分)- 横向对比版本
维度1:总互动量(转发+在看+点赞)→ 权重40%
维度2:加权互动值(转发*5 + 在看*3 + 点赞*2)→ 权重60%
使用min-max归一化映射到8-10分
"""
if not items:
return []
# 提取所有文章的互动数据
data_points = []
for item in items:
max_w = item.get("maxWork") or {}
share = parse_int(max_w.get("shareCount"))
watch = parse_int(max_w.get("watchCount"))
like = parse_int(max_w.get("likeCount"))
total_interactions = share + watch + like # 维度1
weighted_value = share * 5 + watch * 3 + like * 2 # 维度2
data_points.append({
"item": item,
"total_interactions": total_interactions,
"weighted_value": weighted_value
})
# 计算min-max
total_min = min(d["total_interactions"] for d in data_points)
total_max = max(d["total_interactions"] for d in data_points)
weighted_min = min(d["weighted_value"] for d in data_points)
weighted_max = max(d["weighted_value"] for d in data_points)
results = []
for dp in data_points:
# 维度1归一化(避免除零)
if total_max == total_min:
norm_total = 0.5
else:
norm_total = (dp["total_interactions"] - total_min) / (total_max - total_min)
# 维度2归一化
if weighted_max == weighted_min:
norm_weighted = 0.5
else:
norm_weighted = (dp["weighted_value"] - weighted_min) / (weighted_max - weighted_min)
# 综合得分 = 维度1*0.4 + 维度2*0.6
combined = norm_total * 0.4 + norm_weighted * 0.6
# 映射到8-10分
score = 8 + combined * 2
results.append((dp["item"], score))
return results
def render_table(data_list: list) -> str:
"""渲染Markdown表格"""
lines = [
"数据说明:公众号阅读增长率排行;每位作者一行,展示该作者最高阅读代表作(标题可跳转原文)。"
"综合评分指数 8–10 分,综合阅读、在看、点赞、转发等互动指标加权评定。\n",
"| 序号 | 作者 | 最高阅读数文章 | 在看数 | 点赞数 | 转发数 | 阅读数 | 发布时间 | 综合评分指数 |",
"| :---: | :---: | :--- | :---: | :---: | :---: | :---: | :---: | :---: |"
]
# 使用min-max归一化计算综合评分指数
scored_data = calc_score_v2(data_list)
# 按综合评分指数降序排序
scored_data.sort(key=lambda x: x[1], reverse=True)
for rank_num, (acc, score) in enumerate(scored_data, 1):
max_w = acc.get("maxWork") or {}
user = safe_str(acc.get("userName"))
lines.append(
f"| {rank_num} | {user} | {make_link(max_w.get('title'), max_w.get('oriUrl'))} | "
f"{format_count(max_w.get('watchCount'))} | {format_count(max_w.get('likeCount'))} | "
f"{format_count(max_w.get('shareCount'))} | {safe_str(max_w.get('clicksCount'))} | "
f"{safe_str(max_w.get('publicTime'))} | {score:.2f} |"
)
return "\n".join(lines)
def main():
parser = argparse.ArgumentParser(description="获取公众号阅读增长率排行榜")
parser.add_argument("--rankDate", required=True, help="榜单日期")
parser.add_argument("--source", default="公众号阅读增长榜-GitHub", help="数据源(内部参数,使用默认值即可)")
args = parser.parse_args()
try:
rank_date = parse_date(args.rankDate)
data = []
api_calls = 0
max_retry_days = 30
# 数据为空时向前追溯,直到找到数据或超过30天上限
current_date = rank_date
today = datetime.now().strftime("%Y-%m-%d")
earliest = (datetime.now() - timedelta(days=max_retry_days)).strftime("%Y-%m-%d")
for offset in range(max_retry_days + 1):
try_date = (datetime.strptime(rank_date, "%Y-%m-%d") - timedelta(days=offset)).strftime("%Y-%m-%d")
if try_date < earliest or try_date > today:
break
result = fetch_data(try_date, args.source)
api_calls += 1
if result.get("code") != 2000:
continue
batch = result.get("data", [])
if batch:
data = batch
rank_date = try_date
# 找到数据立即停止,不再继续调用接口
break
if not data:
print(f"\n榜单日期: {rank_date} | 近{max_retry_days}天暂无数据\n")
return
print(f"\n榜单日期: {rank_date} | 榜单数量: {len(data)} 个账号 | API调用次数: {api_calls}\n")
print(render_table(data))
print("\n数据获取完成")
except Exception as e:
print(f"错误: {e}", file=sys.stderr)
sys.exit(1)
if __name__ == "__main__":
main()