Closed codinghahaha closed 2 months ago
current_page=3
https://github.com/n0099/tbclient.protobuf/blob/12.51.7.1/proto/Page.proto#L9
while page.has_more = 1
current_page++
@n0099 我测试了,翻到下一页是从下一页开始获取,上一页的最后5条获取不到的。
rn
是您要求贴吧每pn
给您多少帖子
然而其服务端显然有着给您返回任意多条帖子
的自由例如插入一些LLM https://github.com/Starry-OvO/aiotieba/issues/210#issuecomment-2225305837 广告 https://github.com/Starry-OvO/aiotieba/issues/216#issuecomment-2278878131
您应该以其实际返回了多少帖子而非您提供的rn
为准
最简单的例子:如果您请求的pn
根本不存在(亦或该pn
没有那么多帖子)那显然应该期望其返回0
(亦或该pn
下的所有帖子)条而非您要求的rn
条帖子
另外对于offset pagination之pn
更好的是cursor/keyset pagination 正如同年初的 https://github.com/Starry-OvO/aiotieba/issues/158#issuecomment-1913593298
有测试样本吗,比如哪个帖的后五条回复获取不到
@Starry-OvO 我调用的是get_threads接口,获取帖子时后最后五条获取不到,不是帖子的回复。我是在土木工程吧测试的。上面两张图感觉像是一瓶105ml的水,最多只能喝100ml
上面两张图感觉像是一瓶105ml的水,最多只能喝100ml
是贴吧只给您至多100ml
的水,想要喝105ml
就必须换下一瓶
然后倒掉剩余的95ml
https://github.com/Starry-OvO/aiotieba/issues/226#issuecomment-2317948812
while page.has_more = 1 current_page++
@n0099 一瓶水喝不完,最后5ml只能倒掉嘛。把req_proto.data.rn = 105,改成req_proto.data.rn = 100,一瓶水改成100ml的,最多喝100ml。这样改行不行,还是说会引出其他问题。
是贴吧只给您至多
100ml
的水
而非您能喝多少水的问题 所以为什么要用奇怪的现实类比徒增抽象隔离?
改成req_proto.data.rn = 100可以的
虽然不知道之前为什么要设rn=105不过应该是有道理的
——《屎山的诞生》
https://github.com/Starry-OvO/aiotieba/commit/6a70a5bd92c2f2f419d30af7205a2fe31285dafe#diff-1b7e1df8383da27d0517a40fabe0e965c2d7a435983688a5d6ee0ce6f023dd4bR16
因为这只有rn_need
才是真的rn
而由于 https://github.com/Starry-OvO/aiotieba/issues/83#issuecomment-1385431543 必须让 $$rn>rn\_need$$ 所以随便来个比rn
上限100
大的数,我自换到protobuf接口 https://github.com/n0099/open-tbm/commit/a83b672b6bc9cc56b2d1382529f2bb9575837cb2#diff-c631ae64eec29d54d4c85f3831440863196a63d90205f7f36c78129588152c6dR55 以来一直是rn=90
rn_need=30
但我也忘了22年
时为什么要这样设大3倍
从而避免了 https://github.com/Starry-OvO/aiotieba/issues/83#issuecomment-1384277923
rn>rn_need会漏爬数据
因为这只有
rn_need
才是真的rn
您设rn_need=100
rn=114514
贴吧也只会给您100条
主题帖
但如果 $$rn<=rn\_need$$ 对某些(fid, pn)
组合就可能100条
都没有(假设该pn
下有那么多主题帖)
page_size=105,最大能获取100条。剩余5条该怎么获取呢?