Bilibili-Gate - 分组查看动态 最近添加一种新的实现:「合并时间线」
代码
说明
最初实现是从全部动态中筛选出属于分组的动态, 但动态 API 全部动态只会保存最近一段时间 or 一定数量, 不太清楚机制, 所以这种方式获取的分组动态会不全.
而且基于筛选的方式, 可能为了一条很久之前的动态, 会造成大量无用请求.
合并时间线
类似归并排序(divide + merge) 中 merge 步骤. 对分组中的每个 UP 维护一个 bufferQueue, 每次从这些 queues 中取出一个最值, 组成一个新的 list.
具体来说, 依赖 B 站动态 API 返回的 id_str
有序, 或者 pub_ts
有序也行, 最值取 id_str
最大的即可.
弊端: 为了获取队头, 需要每个 queue 都至少包含一项, 也就对应着一次请求. 所以限制为 20 个. 越多, 启动越慢, 而且会造成瞬时并发, 有引发风控的风险.