Repository navigation
v2.3.0
v2.3.0 — 修复"请求过于频繁"错误 & 全面切换 B站 APP 端 API
概述
彻底解决了大量用户反馈的「视频列表获取失败:请求过于频繁」问题。通过将视频相关接口从受限严格的 Web 端切换到频率限制宽松的 APP 端,并全面优化频率控制策略,视频列表获取成功率从 0 提升至接近 100%。
核心修复
1. 视频列表 API 切换为 B站 APP 端
- Web 端旧接口
api.bilibili.com/x/space/arc/search已废弃,该接口对爬虫类请求极其敏感,首次请求即触发-799频率限制 - 新接口
app.bilibili.com/x/v2/space/archive/cursor,模拟 BiliDroid Android 客户端请求(含 appkey+sign 签名和全套 APP 请求头),限制宽松 - 页间增加了自适应延迟,避免连续请求触发限制
- 被频率限制时可保存已获取的部分数据,不再全部丢弃
2. 频率控制策略升级
| 机制 | 旧 | 新 |
|---|---|---|
| 退避算法 | 线性 (1+0.5n) → 最多 5x | 指数 (2^n) → 最多 10x |
| 默认最小间隔 | 2s | 3s |
| 频率限制检测 | 仅 HTTP 429 | HTTP 429 + JSON 响应体错误码 (-509/-412/-799/10403) |
| 错误恢复 | 全部丢弃 | 部分结果保存 + 过期缓存回退 |
3. BVID↔AID 本地互转
- 移除
/x/web-interface/viewAPI 调用,改用纯数学算法本地转换 - 零网络开销,不再占用频率限制配额
4. 点赞视频切换为 APP 端
- 旧接口
api.bilibili.com/archive/like依赖 csrf token → 新接口app.bilibili.com/x/v2/view/like使用 APP 签名认证
基础设施
- 新增
_app_sign()— BiliDroid appkey+sign 签名算法 - 新增
_make_app_headers()— 随机 BiliDroid UA + APP 专用请求头 - 新增
_APP_COMMON_PARAMS— APP 请求通用标识参数 - 更新
.dockerignore/.gitignore规则
受影响的配置项
rate_limit.min_request_interval默认值从2.0提高到3.0- 旧
video_cache.json缓存格式已变化,建议首次运行前删除该文件
对比测试
修复前: 视频列表获取 18.2s → 全部失败 (-799)
修复后: 视频列表获取 0.5s → 19个视频全部成功
Full Changelog: v2.2.0...v2.3.0