lumina37 / aiotieba

贴吧接口合集✨可用于工具箱/吧务管理/数据采集
https://aiotieba.cc
The Unlicense
399 stars 69 forks source link

[Bug] 封装的请求结果中出现额外的 pid=0,floor=0 的 post #210

Closed Sorceresssis closed 4 months ago

Sorceresssis commented 4 months ago

简要描述这个bug

在使用封装方法 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":"莱纳"}
...省略...

你希望程序作出何种行为

  1. 修复错误,消除额外的 pid=0,floor=0 的 post。
  2. 了解这个多出的 post 来源。
n0099 commented 4 months ago

https://n0099.net/tbm/v1/client_tester.php?type=replies&tid=8695394788&pn=1&client_version=12.62.1.0

lumina37 commented 4 months ago

这应该是贴吧搞的AI角色烂活,我待会看看有没有什么专属特征能剔除的

lumina37 commented 4 months ago

668a47f1804642e6a2b8c3ee631eb14081ed7f3c 应该已经解决

Sorceresssis commented 4 months ago

感谢你们的快速修复和帮助!问题已经解决了!