番茄小说榜单分析
通过番茄小说官方 API 获取排行榜数据,内置自定义字体解码,提供完整字段用于分析。
Quick Start
Genre 参数支持 ID 或中文名(模糊匹配):-g 1140 / -g "东方仙侠" / -g "都市" 均可。
支持 Python 和 Node.js 两种运行时,任选其一即可。
看榜
# 指定品类排行(Python 或 Node.js 均可)
python3 scripts/fetch_rank.py -c 1 -t 0 -g 1140 -l 10 # 男频·阅读榜·东方仙侠 Top10
node scripts/fetch_rank.js -c 2 -t 1 -g 248 -l 20 # 女频·新书榜·玄幻言情 Top20
# 全站总榜(跨品类聚合,按热度排序)
python3 scripts/fetch_rank.py -c 1 -t 0 -g 0 -l 30 # 男频阅读总榜 Top30
找书
# 按关键词搜(书名/作者/简介)
python3 scripts/fetch_rank.py -c 1 -t 0 -g 0 --filter "系统" -l 30
# 看新书(新书榜,发现上升期作品)
node scripts/fetch_rank.js -c 1 -t 1 -g 0 -l 20
# 看简介(含最新章节、更新时间和内容简介)
python3 scripts/fetch_rank.py -c 2 -t 0 -g 248 -l 10 -v
导出分析
# 导出 CSV,进 Excel / Python 分析
python3 scripts/fetch_rank.py -c 1 -t 0 -g 0 -l 50 -f csv -O 男频总榜.csv
# 导出 JSON,程序化处理
node scripts/fetch_rank.js -c 2 -t 1 -g 0 -l 30 -f json -O 女频新书.json
# 强制刷新(忽略缓存)
python3 scripts/fetch_rank.py -c 1 -t 0 -g 1140 -l 10 --no-cache
参数体系
| 参数 | 值 | 说明 | | -------------- | -------------- | ------------------------------------------ | | -c, --category | 1, 2 | 1=男频, 2=女频 | | -t, --type | 0, 1 | 0=阅读榜, 1=新书榜 | | -g, --genre | ID或名称 | 品类过滤。0=全部。支持模糊匹配如"都市" | | -l, --limit | N | 返回条数(默认20) | | -f, --format | table/json/csv | 输出格式(默认table) | | -O, --output | 文件路径 | 输出到文件 | | -v, --verbose | flag | 详细模式:显示最新章节、更新时间、简介预览 | | --filter | 关键词 | 按书名/作者/简介过滤结果 | | --no-cache | flag | 跳过本地缓存,强制实时请求 |
完整品类映射见 categories.md。
数据字段
| 字段 | 含义 | | --------------------- | ------------------------------------- | | bookId | 书籍唯一 ID | | bookName | 书名 | | author | 作者 | | abstract | 书籍简介 | | thumbUri | 封面图 URL | | wordNumber | 总字数 | | read_count | 在读人数/热度值 | | creationStatus | "0"=已完结, "1"=连载中 | | lastChapterTitle | 最新章节标题 | | lastChapterUpdateTime | 最后更新 UNIX 时间戳 | | currentPos | 当前排名 | | rankPosDiff | 排名变化(正数上升,负数下降,0不变) |
能力清单
基于 API 实际返回的字段,以下分析均可直接执行。
📊 看榜 — 基础查询
| 能力 | 怎么做 | 拿到什么 |
| ------------ | ------------------------ | ------------------------------------------ |
| 指定品类排行 | -g <品类> 指定单一品类 | 该品类阅读榜/新书榜 Top N |
| 全站总榜 | -g 0 跨品类聚合 | 19/18 品类去重后按热度总排序,含品类标签 |
| 新书发现 | -t 1 切换到新书榜 | 上升期作品,rankPosDiff 看爬升速度 |
| 排名变动 | 看 rankPosDiff 字段 | ▲N / ▼N / —,识别飙升/暴跌作品 |
| 关键词搜书 | --filter "系统" | 在书名/作者/简介中模糊匹配,适合找特定题材 |
📈 品控 — 内容评估
| 能力 | 怎么做 | 拿来干嘛 |
| -------- | --------------------------------------- | ------------------------------------------------------- |
| 看简介 | -v 详细模式输出 abstract | 快速了解故事设定、世界观、金手指类型 |
| 追更判断 | -v 输出 lastChapterTitle + 更新时间 | 看是否还在活跃更新、最后一次更新距今多久 |
| 字数评估 | wordNumber 字段 | 判断是幼苗(<50万字)、成长期(50-150万)、还是肥书(>150万) |
| 热度判断 | read_count 在读人数 | 横向对比同品类热度水位 |
| 完结判断 | creationStatus 字段 | "0"=已完结可宰,"1"=连载中需追 |
📊 分析 — 趋势洞察(导出 CSV/JSON 后分析)
| 场景 | 方法 | 产出 |
| -------------- | --------------------------------- | ---------------------------------------- |
| 品类热度对比 | 抓取多品类,对比平均 read_count | 哪个品类竞争最激烈 / 流量最大 |
| 热门题材趋势 | 从 abstract 提取高频关键词 | 系统流、重生、穿越、赘婿、快穿… 各占多少 |
| 作者势力分布 | 聚合作者上榜次数,识别跨品类作者 | 谁在霸榜,谁是新人黑马 |
| 连载 vs 完结比 | 统计 creationStatus 分布 | 该品类是追更为主还是宰书为主 |
| 字数分布 | 分档统计 wordNumber | 幼苗/成长期/肥书各多少,判断品类成熟度 |
| 更新活跃度 | 统计 lastChapterUpdateTime | 最近 24h/3d/7d 内更新的比例 |
| 新书爬升速度 | 新书榜 rankPosDiff 分析 | 哪些新书势头最猛 |
| 男女频对比 | 同品类跨性别对比 | 男频东方仙侠 vs 女频玄幻言情差异 |
| 跨榜对比 | 同一品类阅读榜 vs 新书榜 | 老书统治力 vs 新书冲击力 |
限制说明
做不到的事: 历史趋势追踪(API 只返回当前快照,无时间序列)、章节正文内容、读者评论/评分、作者主页详情、自定义搜索(只能 --filter 已抓取的结果)。
可扩展: 搭配 cronjob 定时抓取存库,可自行构建历史趋势数据。
技术说明
所有数据均通过番茄官方 /api/rank/category/list API 获取。API 返回的文本字段(书名、作者、简介)仍使用自定义字体编码,脚本内置 DIT_DATA 解码表自动还原为可读中文。全品类模式通过并发请求(最多 4 路,带随机延迟防反爬)各子品类 API 后去重聚合。内置指数退避重试(最多 3 次)应对瞬时网络故障,本地文件缓存(5 分钟 TTL,--no-cache 强制刷新)。脚本启动时自动校验 GENRE_MAP 与 categories.md 一致性,不一致打 WARNING。
双运行时支持
提供 Python 和 Node.js 两个完整实现,功能完全一致:
| 文件 | 运行时 | 依赖 |
| ------------------------------ | ----------- | ----------------------- |
| scripts/fetch_rank.py | Python 3.x | 标准库 |
| scripts/fetch_rank.js | Node.js 14+ | 标准库 |
| scripts/shared/dit_data.json | 共享 | 字体解码映射表(362条) |
字体解码映射表 (DIT_DATA) 从硬编码提取为 scripts/shared/dit_data.json,两个版本共享同一份数据,维护一份即可。
参考
- API 详情:api.md
- 品类映射:categories.md
Scan to join WeChat group