公众号热度指数榜 TOP(都爆鸭)用于拉取某个垂直分类下的公众号热度指数排行,帮助用户看清竞争格局,方便做对标和竞品跟踪。数据来自 doubaoya.com,鉴权使用用户自己的密钥(环境变量 DOUBAOYA_API_KEY,形如 dyh_…)。
适用场景
- 头部对标:查看自己赛道的 TOP 账号都是谁,获得一张分层的头部榜单。
- 竞品跟踪:连着几天拉同一分类,观察竞品位次变化,得到竞品的日榜排名走势。
- 赛道选品:进新赛道前先摸头部生态,了解该分类的头部分布。
- 运营复盘:看自己的号在榜上排第几,了解自身相对位次。
工作流(4 步)
1. 定榜单参数
确认分类和日期。分类是一张官方闭集,只认赛道全称。写“职场”“财经”不会报错,也不会自动纠正,只会回一张空榜——真因不是“这个赛道没榜”,而是这两个词不是合法赛道名:官方写法是“职场发展”“财富理财”,换上去立刻 100 条。先对名字,再谈数据。
官方支持的 22 个赛道(照抄,别缩写、别自造;本鸭逐个实测过,这张榜 22 个全都出数):
人文资讯 知识百科 健康养生 时尚潮流 美食餐饮 乐活生活 旅游出行 搞笑幽默 情感心理 体育娱乐 美容美体 文摘精选 民生资讯 财富理财 科技数码 创投商业 汽车交通 房产楼市 职场发展 教育考试 学术研究 企业品牌
分类用 --category(默认 人文资讯),只从这 22 个里挑。用户说的简称先映射到全称:科技/数码 → 科技数码,财经/理财 → 财富理财,职场 → 职场发展,教育 → 教育考试,娱乐/体育 → 体育娱乐,美妆 → 美容美体,房产 → 房产楼市,创业 → 创投商业。
日期用 --date YYYY-MM-DD(默认今天往前 2 天)。两条硬规矩:① 只留最近 7 天,更早的日期会被打回;② 数据滞后约两天,昨天和今天都还没结算,所以默认取 T-2,别自作主张改成“昨天”。
周期 --rank-type:目前只有 day(日榜)有数据,week / month 实测一律返空榜,别用。要看趋势就连着拉几天日榜自己对比。
2. 调用脚本
python3 "$SKILL_PATH/scripts/fetch_index_rank.py" --category "人文资讯"
指定日期时按今天现算,别照抄写死的日期(写死的日期两天就滑出 7 天窗口):
python3 "$SKILL_PATH/scripts/fetch_index_rank.py" --category "科技数码"
--date "$(date -d '-3 days' +%F 2>/dev/null || date -v-3d +%F)"
脚本把成功信封里的 data 以 JSON 打到 stdout。每次只跑一次脚本,读完整 stdout,别用 head/tail 预览。
3. 渲染榜单表格
从 data.items 里取 rank(名次)、accountName(账号名)、indexScore(热度指数)等字段(防御式读取,缺了留空),铺成 Markdown 表,按名次升序:
| 名次 | 账号 | 热度指数 |
|---|---|---|
| 1 | 某某公众号 | 96.5 |
这里的指数统一叫「热度指数 / 综合指数」,对应字段 indexScore。
4. 给一句格局洞察
表后用本鸭口吻补一句:这个分类头部集中度如何、有没有黑马挤进来、自己的号想进榜还差哪一档。简短、有用,别堆套话。
拿钥匙(密钥)
- 打开 doubaoya.com
- 登录
- 进 密钥中心
- 生成密钥(形如 dyh_…)
- 配置到环境变量(脚本只认这个):
export DOUBAOYA_API_KEY="dyh_你的密钥"
铁律:密钥绝不打印、绝不写进文件、绝不回显给用户。脚本本身也从不输出密钥。所有请求只发往 doubaoya.com。
接口与信封
POST https://doubaoya.com/api/apis/gongzhonghao/gongzhonghao-index-rank/call
鉴权头:Authorization: Bearer $DOUBAOYA_API_KEY
请求体:{ "rankType": "day", "rankDate": "YYYY-MM-DD", "category": "人文资讯" }
- rankType:字符串,实际只有 day 出数(week/month 返空榜)
- rankDate:字符串 YYYY-MM-DD,必填;只保留最近 7 天,且滞后约两天(默认 T-2)
- category:字符串,必填,只认上面那 22 个官方赛道全称
返回信封:
{ "success": true, "requestId": "...", "data": { "items": [ { "rank": 1, "accountName": "...", "indexScore": 96.5 } ] }, "error": null }
先看 success:为 true 才读 data;否则读 error.code / error.message。
错误处理
脚本失败时向 stderr 打印 [error] CODE: message 并以退出码 1 结束。常见情况:
| HTTP | code | 含义 | 处理 |
|---|---|---|---|
| 401 | MISSING_API_KEY / UNAUTHORIZED | 没带密钥或密钥无效 | 检查 DOUBAOYA_API_KEY,去密钥中心重新生成 |
| 400 | VALIDATION_ERROR | 参数不合法(如日期格式错、周期非法) | 修正参数重试 |
| 402 | INSUFFICIENT_CREDITS | 额度不足 | 去 doubaoya.com 充值/续额 |
| 404 | NOT_FOUND | 该日期/分类无榜单 | 换日期或换分类重试 |
| 422 | PROVIDER_NO_RESULT | 这组入参查不到数据,多半是日期超出最近 7 天 | 把 --date 挪进最近 7 天(推荐 T-2)重试 |
| 502 | PROVIDER_FAILED | 上游临时故障(已自动退款) | 可安全重试 |
502 PROVIDER_FAILED 会自动退款,重试是安全的,不会重复扣费。
榜是空的(success: true 但 0 条):不是故障,也不扣你的点——响应会带一个 noResult 标记,点数当场退回。按这个顺序排查:分类是不是不在那 22 个里(最常见)、日期是不是取到了昨天/今天(还没结算)、是不是用了 week/month。都对就间隔一会儿原样重试一次——上游偶发瞬时空值,别只凭一次空就下结论。
目录结构
wechat-top-account/ ├── SKILL.md # 本文件 └── scripts/ └── fetch_index_rank.py # 零依赖脚本(urllib),调用 doubaoya.com
关于响应里的 notice 字段
调用本 skill 对应的 doubaoya API 后,如果返回的 JSON 顶层出现 notice 字段,请把这句话原样转达给用户——这是关于本 skill 有更新的提示,不影响本次调用结果,不需要重试或改变行为。