Skip to content

v2.3.0

Choose a tag to compare

@Janson20 Janson20 released this 13 Jun 01:54
· 10 commits to main since this release

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/view API 调用,改用纯数学算法本地转换
  • 零网络开销,不再占用频率限制配额

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