Closed Sorceresssis closed 4 months ago
在使用封装方法 get_posts 调用百度贴吧帖子时,出现额外的 pid=0 和 floor=0 的 post。这一现象未在直接调用 aiotieba.Client 的请求结果中出现。
使用 aiotieba.Client 和封装方法 get_posts 获取相同帖子, 进行对比。
实例
tid: 8695394788 pn: 1 rn: 30
tieba_auth.py
BDUSS = "hNbVJvTlJPak9PVX5-Rzht................."
tieba_request.py
封装的 get_posts 函数
import aiotieba as tb from tieba_auth import BDUSS async def get_posts(tid: int, pn=1, rn=30): async with tb.Client(BDUSS) as client: return await client.get_posts(tid, pn, rn=rn, with_comments=True)
tieba.py
import asyncio import aiotieba import orjson from tieba_auth import BDUSS from tieba_request import get_posts tid = 8695394788 pn = 1 rn = 30 def get_pid_floor(post): return f""" ----------- pid: {post.pid} floor: {post.floor} content[0]: { orjson.dumps(post.contents[0]).decode('utf-8') }""" async def main(): # 直接调用 print("#直接调用#") async with aiotieba.Client() as client: posts1 = await client.get_posts(tid, pn, rn=rn, with_comments=False) for post in posts1.objs: print(get_pid_floor(post)) # 调用封装 print("#封装#") posts2 = await get_posts(tid, pn, rn) for post in posts2.objs: print(get_pid_floor(post)) if __name__ == "__main__": asyncio.run(main())
循环打印每条post。
结果对比
直接调用 aiotieba.Client 的请求结果(正确):
...省略... --------------------------- pid: 148955736398 floor: 5 content[0]: {"text":"兵长"} --------------------------- pid: 148955743416 floor: 6 content[0]: {"text":"莱纳"} ...省略...
调用封装 get_posts 的请求结果(错误):
在第 5 楼和第 6 楼之间出现一个 pid=0,floor=0 的 post,且有内容:
...省略... --------------------------- pid: 148955736398 floor: 5 content[0]: {"text":"兵长"} --------------------------- pid: 0 floor: 0 content[0]: {"text":"我们每个人打从出生开始就是自由的。"} --------------------------- pid: 148955743416 floor: 6 content[0]: {"text":"莱纳"} ...省略...
你希望程序作出何种行为
https://n0099.net/tbm/v1/client_tester.php?type=replies&tid=8695394788&pn=1&client_version=12.62.1.0
这应该是贴吧搞的AI角色烂活,我待会看看有没有什么专属特征能剔除的
668a47f1804642e6a2b8c3ee631eb14081ed7f3c 应该已经解决
感谢你们的快速修复和帮助!问题已经解决了!
简要描述这个bug
在使用封装方法 get_posts 调用百度贴吧帖子时,出现额外的 pid=0 和 floor=0 的 post。这一现象未在直接调用 aiotieba.Client 的请求结果中出现。
如何复现
使用 aiotieba.Client 和封装方法 get_posts 获取相同帖子, 进行对比。
实例
tieba_auth.py
tieba_request.py
封装的 get_posts 函数
tieba.py
循环打印每条post。
结果对比
直接调用 aiotieba.Client 的请求结果(正确):
调用封装 get_posts 的请求结果(错误):
在第 5 楼和第 6 楼之间出现一个 pid=0,floor=0 的 post,且有内容:
你希望程序作出何种行为