Code Monkey home page Code Monkey logo

aiotieba's People

Contributors

aimersa avatar dependabot[bot] avatar hawaii-ol avatar hikariyo avatar lin-yifan1 avatar starry-ovo avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

aiotieba's Issues

您操作的太频繁了

简要描述这个bug

点赞时出现您操作的太频繁了

如何复现

用示例里的签到水贴点赞脚本

你希望程序作出何种行为

我用asyncio的信号量控制并发数为2,但是点赞的吧一多就开始提示,等了几个小时还是提示,手机版可以正常点赞,这个是已知的限制吗,有的话可以找个地方提示一下

截图(可选)

[feature request] 获取贴吧头像

我需要什么功能

通过类似 get_forum_detail 的方法获取贴吧头像

我想将这个功能应用于何种场景

通过类似 get_forum_detail 的方法获取贴吧头像

希望添加修改昵称接口

希望添加修改昵称接口
已经抓包到相关接口了,以下是抓包软件截屏
Screenshot_2023-01-26-02-42-50-269_com guoshi httpcanary premium
IMG_20230126_024353
Screenshot_2023-01-26-02-44-24-684_com guoshi httpcanary premium

由于是刚建的小号,没法改名,还要等七天😂明天换买的小号试试这个接口的参数

主题帖和回复贴接口请求参数中的`q_type=2`到底是什么?

  1. 阁下于 May 26, 2022 v2.6.1 c5c208f#diff-4d330e17cd513d344a73ce66cfe7682bf66be5294b077a46f38fd4c9d61fa2dcL822 时删除了q_type=2

  2. 而我注意到最近16天内以 https://tieba.baidu.com/p/6616695318 为代表的如下主题帖请求某些页数的主题帖回复贴列表时返回了0条回复贴,这在以前通常代表请求的页数还不存在或主题帖已被删除
    https://tieba.baidu.com/p/3611123694
    https://tieba.baidu.com/p/4944438028
    https://tieba.baidu.com/p/5207410447
    https://tieba.baidu.com/p/5214988494
    https://tieba.baidu.com/p/5261166918
    https://tieba.baidu.com/p/6616695318
    https://tieba.baidu.com/p/6993372330
    https://tieba.baidu.com/p/7096366852
    https://tieba.baidu.com/p/7230997267
    https://tieba.baidu.com/p/7816662822
    https://tieba.baidu.com/p/7832611927
    https://tieba.baidu.com/p/7943900568
    https://tieba.baidu.com/p/7950129599
    https://tieba.baidu.com/p/8215005930
    https://tieba.baidu.com/p/8227942444
    https://tieba.baidu.com/p/8235105996
    https://tieba.baidu.com/p/8342345319
    https://tieba.baidu.com/p/8355529720
    https://tieba.baidu.com/p/8394353126
    https://tieba.baidu.com/p/8402224919
    https://tieba.baidu.com/p/8408045722
    https://tieba.baidu.com/p/8409361546
    https://tieba.baidu.com/p/8412021878
    https://tieba.baidu.com/p/8416955449
    https://tieba.baidu.com/p/8416972007
    https://tieba.baidu.com/p/8417800020
    https://tieba.baidu.com/p/8417882008
    https://tieba.baidu.com/p/8418007671
    https://tieba.baidu.com/p/8418615605
    但我通过访问贴吧网页端手动检测这些主题帖都存在对应的主题帖回复贴列表页数,并且这些主题帖大多都有着大量回复(以水楼为代表)

  3. https://github.com/n0099/TiebaMonitor/blob/e7d7240aebeee74d04f7b5d4748af69dff3ed5b0/client_tester.php#L41 修改为

    -            'pn' => $_GET['pn']
    +            'pn' => $_GET['pn'],
    +            'rn' => 30,
    +            'q_type' => 2

    以模仿 https://github.com/n0099/TiebaMonitor/blob/91e617a4940f222b0d9d4299c93146b84e2301d7/c%23/crawler/src/Tieba/Crawl/Crawler/ReplyCrawler.cs#L31 后可复现

    $ php-cgi client_tester_2.php client_version=12.26.1.0 type=replies tid=6616695318 pn=1 | sed -n '3,$p' | jq '.post_list | length'
    0

    而删除q_type=2参数后就是预期的30条回复贴
    值得注意的是参数名qtype也有着同样的效果(贴吧接口validate层会做命名转换?也可能的确有着两个alias别名)

  4. 还注意到在我的tbm生产环境数据库中的v吧表中有

    SELECT T.tid, T.replyCount, R.replyCount, SR.replyCount, R.replyCount + SR.replyCount,
           CAST(T.replyCount AS SIGNED) - (R.replyCount + SR.replyCount) AS diff
    FROM tbmc_f97650_thread AS T
        JOIN (SELECT COUNT(*) AS replyCount, tid FROM tbmc_f97650_reply GROUP BY tid) AS R
        JOIN (SELECT COUNT(*) AS replyCount, tid FROM tbmc_f97650_subReply GROUP BY tid) AS SR
    ON T.tid = R.tid AND T.tid = SR.tid AND T.replyCount != (R.replyCount + SR.replyCount)
    ORDER BY diff DESC;

    image
    https://tieba.baidu.com/p/7258962480 这样显著的贴吧报告的(在吧首页主题帖列表接口中返回的)主题帖回复贴+楼中楼数量远大于实际爬下来并存储于表中的回复贴+楼中楼数量,尽管一般而言两者相差几条是正常的,因为我记得以前删除回复贴/楼中楼后在吧首页主题帖列表中的主题帖回复贴+楼中楼数量并不会减少(因此当时是仅自增计数器)

  5. 所以我猜测q_type=2是某种会减少主题帖回复贴列表接口返回的回复贴数量的参数取值,考虑到其主要减少的是在水楼这样大量内容重复的回复贴上,这可能也跟主客态有关

  6. 另外吧首页主题帖列表接口中也有这个参数取值,其是否也会减少主题帖1L回复贴内容重复/相似的出现?

指定 sort 下的 get_threads 分页数据有误

简要描述这个bug

指定 sort 参数下的查询第一页和第一页以后的 ret.page.total_page 不同。

如何复现

import asyncio
import aiotieba

async def main():
    async with aiotieba.Client() as c:
        threads = await c.get_threads('百合', pn=1, sort=aiotieba.enums.ThreadSortType.HOT)
        print(threads.page)
        threads = await c.get_threads('百合', pn=2, sort=aiotieba.enums.ThreadSortType.HOT)
        print(threads.page)
        threads = await c.get_threads('百合', pn=792, sort=aiotieba.enums.ThreadSortType.HOT)
        print(threads.page)

asyncio.run(main())

截图(可选)

$ python minimaleg.py 
{'current_page': 1, 'total_page': 792, 'has_more': True, 'has_prev': False}
{'current_page': 2, 'total_page': 115, 'has_more': True, 'has_prev': True}
{'current_page': 792, 'total_page': 115, 'has_more': False, 'has_prev': True}
$ pip show aiotieba
Name: aiotieba
Version: 3.5.0

某知名kotlin jetpack compose ui第三方去广告贴吧客户端`TiebaLite`疑似被百度橄榄

https://web.archive.org/web/20240217185947/https://github.com/HuanCheng65/TiebaLite
https://web.archive.org/web/20240217193136/https://github.com/HuanCheng65/TiebaLite/commit/2e9ba2b09d59967f36faf9fad84ab318c4786aef
https://web.archive.org/web/20240217192938/https://github.com/HuanCheng65/TiebaLite/commit/b2108d59eecd8878f31e92a2ad412304125050bf

## 👋再见

亲爱的朋友们:

我之所以写下这些文字,是因为我已经做出了一个艰难的决定——永久停止对贴吧 Lite 的维护。这个决定并非一蹴而就,而是经过深思熟虑、反复权衡之后的结果。

首先,最主要的原因是个人精力的限制。随着学业压力的增加,我发现自己越来越难以分配足够的时间和精力来维持项目所需的持续投入。项目的维护不仅仅是时间的问题,更是一个精力的挑战,需要我不断地更新、解决问题,这成为了我越来越难以克服的障碍。此外,尽管这绝非决定性的原因,但项目存在的合规性问题也为我带来了额外的顾虑,这些顾虑随时间积累,最终对我的决定产生了一定影响。

-在过去的四年中,我与贴吧 Lite 一同成长。因此,作出这一决定,我的内心充满了不舍。在此,我想向所有关注、使用和支持贴吧 Lite 的朋友们表达我的深深感谢。正是你们的反馈、建议和鼓励,让我在过去的岁月里不断前进,持续成长。
+在过去的四年中,我与贴吧 Lite 一同成长。因此,作出这一决定,我的内心充满了不舍。在此,我想向所有关注、使用和支持贴吧 Lite 的朋友们表达我的深深感谢。正是你们的反馈、建议和鼓励,让我在过去的岁月里不断前进,持续成长。同时,我也要特别感谢那些在过去几年中向开源仓库中贡献过代码的其他开发者们,是你们的努力,让贴吧 Lite 不断变得更好。

-宇宙很大,生活更大。我们的路径仍有可能在未来的某个时刻再次交汇。❤️
+宇宙很大,生活更大。相信今后我们的路径仍有可能在未来的某个时刻再次交汇。❤️

幻城

2024年2月18日

https://web.archive.org/web/20240217195158/https://t.me/tblite_discuss 暂且还在但我看不到里面
https://github.com/n0099/archive-TiebaLite git clone伪fork以避免被某人正义DMCAtakedown https://github.com/search?q=repo%3Agithub%2Fdmca+baidu&type=code 时一锅端所有202个fork https://web.archive.org/web/20240217195211/https://github.com/HuanCheng65/TiebaLite/network/members https://web.archive.org/web/20240217195301/https://github.com/HuanCheng65/TiebaLite/network 正如同 @BANKA2017 https://twitter.com/manka_takami/status/1746472845977460923https://web.archive.org/web/20240217200441/https://github.com/bankaallbackup

当前事件

截至2024年02月,每天都会成为昨天,记载的内容可能在三分钟内死亡

异步爬取posts时出现Connector is closed

您好!我在修改官方例程后,试图通过csv中储存的threads tid爬取每一个帖子下的评论,代码如下:

async def post_crawler(threads_csv_file: str, page_to: int, out_file: str, max_threads: int = -1, timeout: float = 2):
    start_time = time.perf_counter()
    tid_view_info = read_csv_columns(threads_csv_file, ["ID", "view_num"]).to_dict()
    LOG().info("Crawler start")

    post_list: List[list] = []

    async with tb.Client("default") as client:
        task_queue = asyncio.Queue(maxsize = 8)
        is_running = True
        IDs = [int(id) for id in tid_view_info["ID"].values()][0: max_threads]
        views = [int(id) for id in tid_view_info["view_num"].values()][0: max_threads]
        pbar = tqdm.tqdm(total = len(IDs))

        async def producer():
            """
            生产者协程
            """

            for tn in range(len(IDs)):
                # 生产者使用Queue.put不断地将主帖id以及posts数量填入任务队列task_queue
                await task_queue.put([IDs[tn], views[tn]])
            nonlocal is_running
            is_running = False

        async def worker(i: int):
            """
            消费者协程

            Args:
                i: 协程编号
            """

            while 1:
                try:
                    # 消费者协程不断地使用Queue.get从task_queue中拉取由生产者协程提供的tid作为任务
                    # 超时未获取到新tid,asyncio.wait_for(...)将抛出asyncio.TimeoutError
                    data = await asyncio.wait_for(task_queue.get(), timeout = timeout)
                    tid, review = data[0], data[1]
                    # LOG().debug(f"Worker#{i} handling tid:{tid}")
                    nonlocal pbar
                    pbar.update()
                except asyncio.TimeoutError:
                    if is_running is False:
                        LOG().debug(f"Worker#{i} quit")
                        return
                else:
                    nonlocal post_list
                    for pn in range(min(int(review / 30), page_to)):
                        # 同时请求高赞楼中楼?
                        # with_comments = True, comment_rn = 4
                        comments = await client.get_posts(tid, pn = pn, rn = 30)
                        for single_post in comments:
                            post_list += [tid, single_post]
    
    workers = [worker(i) for i in range(8)]
    # 使用asyncio.gather并发执行
    await asyncio.gather(*workers, producer())
    pbar.close()
    
    post_data = pd.DataFrame(list2dict([dict_tiezi(po[1], po[0]) for po in post_list]))
    post_data = post_data.drop_duplicates(subset = ["ID"])
    post_data.to_csv(out_file)

    LOG().info(f"Time cost: {time.perf_counter() - start_time:.4f} secs. data shape {str(post_data.shape)}.")

输出,出现以下问题:

<2024-01-02 18:17:04.561> [WARN] [get_posts] Connector is closed.. tid=8813440619
<2024-01-02 18:17:04.583> [WARN] [get_posts] Connector is closed.. tid=8813440136
<2024-01-02 18:17:04.583> [WARN] [get_posts] Connector is closed.. tid=8813417945
...

排查后发现通过命令行可以正常调用

>>> async def test():
...     async with tb.Client("default") as client:
...             print(await client.get_posts(8810199173, pn = 1, rn = 30))
>>> asyncio.run(test())

[{'tid': 8810199173, 'user': '众神的镇魂歌', 'text': '国际服重新发了15张课程卷,可以领了', 'vimage': '', 'floor': 1}, {'tid': 8810199173, 'user': '贴吧用户_5b84XUE/tb.1.2fad524f.dKxaV8rGdIBiOUePY4JmYA', 'text': '国际服这种小bug一般不发点补偿吗', 'vimage': '', 'floor': 2}]

希望给予解惑,谢谢

填入BDUSS 按照入门教程运行debug.py无法登陆

简要描述这个bug
填入BDUSS 按照入门教程运行debug.py报错
提示:
<2022-07-01 15:42:47> [WARNING] Failed to login. reason:请点击“取消”按钮,打开首页后手动输入帐号信息完成登录。
<2022-07-01 15:42:47> [INFO] 当前用户信息: BasicUserInfo [user_id:0 / user_name: / portrait: / nick_name:]

如何复现
粘贴BDUSS ,复制入门教程debug.py代码,运行、、

环境
centos7.8(国外)
python 3.9
pip 22.0.4

截图(可选)
image

云审查使用求助

[WARN] [compute_imghash] module 'cv2' has no attribute 'img_hash'

这个怎么解决,谢谢大佬

函数get_threads 获取的某一页的主题帖数量有误

简要描述这个bug
get_threads函数不能稳定取到正确的主题帖数量,需要调用多次才能返回正确的值。
部分页面甚至永远取不到正确的主题帖数量,且xpath.log没有任何输出。

如何复现
下面以flowers吧前72页为例,在个人电脑以web端数据为参照,复现该问题:

import aiohttp
from lxml.etree import HTML
import aiotieba as tb
import asyncio
from random import randint


async def get_page_thread_count(bar: str, p: int):
    '''根据xpath取pc端网页,改页的主题贴数量,一般为50'''
    x = 'count(//*[@id="thread_list"]//li/@data-floor)'
    async with aiohttp.ClientSession() as session:
        async with session.request(method='GET', url='https://tieba.baidu.com/f?kw={0}&ie=utf-8&pn={1}'.format(bar, (p - 1) * 50)) as r:
            await asyncio.sleep(2)
            result = await r.text()
            page_count = int(HTML(result).xpath(x))
            return page_count


async def fuck(bar: str, p: int):
    async with tb.Client("default") as client:
        threads: tb.Threads = await client.get_threads(bar, pn=p, rn=50)
        return len(threads)


async def try_fetch(bar, p):
    c1 = await get_page_thread_count(bar, p)
    n, c2 = 0, 0
    for n in range(1, 31):
        await asyncio.sleep(randint(1, 3))
        if c1 == (c2 := await fuck(bar, p)):
            if n > 1:
                print(f"第{p}页尝试{n}次")
            break
    else:
        print(f"第{p}页尝试30次仍无法取得正确贴数,应为{c1}实际为{c2}")


async def main(bar, p):
    await asyncio.gather(*[try_fetch(bar, i) for i in range(1, p)])


asyncio.run(main("flowers", 72))
python xpath.py 
第21页尝试2次
第2页尝试3次
第18页尝试4次
第15页尝试5次
第19页尝试6次
第1页尝试8次
第10页尝试11次
第20页尝试11次
第22页尝试12次
第46页尝试18次
第37页尝试30次仍无法取得正确贴数,应为49实际为39
第57页尝试30次仍无法取得正确贴数,应为49实际为48
第17页尝试30次仍无法取得正确贴数,应为50实际为44
python xpath.py 
第18页尝试2次
第1页尝试2次
第9页尝试2次
第22页尝试2次
第21页尝试2次
第20页尝试4次
第7页尝试4次
第19页尝试5次
第15页尝试6次
第8页尝试9次
第10页尝试12次
第2页尝试17次
第17页尝试17次
第46页尝试30次仍无法取得正确贴数,应为49实际为48
第57页尝试30次仍无法取得正确贴数,应为49实际为48
第37页尝试30次仍无法取得正确贴数,应为49实际为39
python xpath.py
第21页尝试2次
第19页尝试2次
第22页尝试3次
第18页尝试3次
第2页尝试3次
第9页尝试3次
第8页尝试4次
第7页尝试4次
第20页尝试6次
第10页尝试14次
第37页尝试30次仍无法取得正确贴数,应为49实际为39
第17页尝试30次仍无法取得正确贴数,应为50实际为46
第57页尝试30次仍无法取得正确贴数,应为49实际为48
第46页尝试30次仍无法取得正确贴数,应为49实际为48

你希望程序作出何种行为
get_page_thread_count('flowers', 57) == fuck('flowers', 57)

截图(可选)

...

希望添加楼中楼回复的功能

我需要什么功能

需要在某个指定的楼层中进行回复的功能。

我想将这个功能应用于何种场景

在一个贴子的某个楼层中添加回复,同时有可能是回复给已经存在的楼中楼的某个用户。

setup.py构建得到的so文件在导入时显示undefined symbol: u64toa

起因是我遇到了跟Starry-OvO/aiotieba-reviewer#14 一样的问题,通过pip install安装的aiotieba在运行时会报Segmentation fault
通过gdb调试了一下发现是tbc_heliosHash调用libz时挂了,可能是libz的版本有问题?
屏幕截图 2023-06-05 034503
总之我转而尝试clone源码编译,python3 setup.py build成功生成了so文件,把它拷贝到aiotieba/helper/crypto下,重新运行python3 my_reviewer.py,结果出现以下报错

root@vultr:~/aiotieba-reviewer# python3 my_reviewer.py 
Traceback (most recent call last):
  File "/root/aiotieba-reviewer/my_reviewer.py", line 8, in <module>
    import aiotieba as tb
  File "/root/aiotieba-reviewer/aiotieba/__init__.py", line 11, in <module>
    from . import const, core, enums, exception, typing
  File "/root/aiotieba-reviewer/aiotieba/core/__init__.py", line 1, in <module>
    from .account import Account
  File "/root/aiotieba-reviewer/aiotieba/core/account.py", line 8, in <module>
    from ..helper.crypto import c3_aid, cuid_galaxy2
  File "/root/aiotieba-reviewer/aiotieba/helper/__init__.py", line 2, in <module>
    from . import cache, crypto, utils
  File "/root/aiotieba-reviewer/aiotieba/helper/crypto/__init__.py", line 3, in <module>
    from .crypto import c3_aid, cuid_galaxy2, rc4_42
ImportError: /root/aiotieba-reviewer/aiotieba/helper/crypto/crypto.cpython-310-x86_64-linux-gnu.so: undefined symbol: u64toa

于是我又去找哪里出现了u64toa,发现是

root@vultr:~/aiotieba-reviewer/aiotieba-src# grep -rnw . -e 'u64toa'
./thirdparty/rapidjson/internal/itoa.h:35:inline char *u64toa(uint64_t value, char *buffer)
./thirdparty/rapidjson/internal/itoa.h:222:    return u64toa(u, buffer);
grep: ./build/temp.linux-x86_64-3.10/aiotieba/helper/crypto/sign.o: binary file matches
grep: ./build/lib.linux-x86_64-3.10/aiotieba/helper/crypto/crypto.cpython-310-x86_64-linux-gnu.so: binary file matches
grep: ./aiotieba/helper/crypto/crypto.cpython-310-x86_64-linux-gnu.so: binary file matches

所以应该是sign.c这个文件include了itoa.h中定义的inline char *u64toa,我nm看了一下sign.o中确实缺少u64toa的符号定义
屏幕截图 2023-06-05 042213

所以这里是不是有问题?

inline char *u64toa(uint64_t value, char *buffer)

原文件所属的rapidjson是一个C++项目,inline关键字的语义和C不同,用在C里可能导致编译器不内联,同时又没有外联版本,于是undefined symbol。这里应该改成static inline char *u64toa吧?
修改代码加上static后重新编译,这次生成的so可以正常导入了,而且运行也没有出现Segmentation fault

奇怪的是我用pip install安装的aiotieba却没有这个问题,难道是whl文件用的编译器不一样?或者加了某些编译选项?

在使用sanic框架的项目里导入aiotieba会导致sanic的logger模块失效

测试代码如下

from sanic import Sanic
from sanic.response import text
import aiotieba

app = Sanic("MyHelloWorldApp")

@app.get("/")
async def hello_world(request):
    return text("Hello, world.")

if __name__ == '__main__':
    app.run(host="127.0.0.1", port=8080, debug=True)

技术力低,找不到冲突的地方,来这问问😥

无头环境下无法导入opencv库

简要描述这个bug

linux服务器无头环境下无法使用 opencv-contrib-python

如何复现

Rocky Linux release 8.4
python3.9.7 

安装 requirement.txt 并运行本库

你希望程序作出何种行为

识别到无头环境自动切换安装 opencv-contrib-python-headless

截图(可选)

你好。使用 `client.send_msg()` 时会报超时的错误。

你好,aiotieba。
在使用过程中调用client.send_msg()会报超时的错误,我看到问题是出在client.__init_websocket(),不知道要怎么能正常使用。

再一次非常感谢!*

附上代码:

import asyncio
import aiotieba

uid = 3357704***

async def main():
    async with aiotieba.Client("default") as client:
        ok = await client.send_msg(uid, "你好")
        print(ok)

asyncio.run(main())

错误信息为:

<2023-05-08 15:37:07.476> [WARN] [send_msg] Timeout to read. user_id=3357704***

你好,调用client.get_self_info()和client.add_post()时会出现「用户未登录或登录失败,请更换账号或重试」和「用户名或密码错误」的错误

你好,aiotieba非常好用!非常感谢你们。

我在使用过程中获取threads等操作都非常顺滑和高效,但是在需要个人信息的时候(例如:client.get_self_info()client.add_post())会出现「用户未登录或登录失败,请更换账号或重试」和「用户名或密码错误」的错误。

我已经配置好了BDUSS,是否还有其他字段可以配置用户名和密码?我在官网和文档中都没有找到(也可能我查阅不够细致),请告知这种情况要怎么处理。

再次感谢!

附上代码片段:

import asyncio
import aiotieba

async def main():
    async with aiotieba.Client() as client:
        info = await client.get_self_info()
        print(info)

        ok = await client.add_post(24091, 8395194224, "试一下试一下")
        print(ok)

asyncio.run(main())

错误信息如下:

<2023-05-05 18:16:56.432> [WARN] [__login] (2, '用户名或密码错误'). 
<2023-05-05 18:16:56.476> [WARN] [__get_selfinfo_initNickname] (1, '用户未登录或登录失败,请更换账号或重试'). 
<2023-05-05 18:16:56.779> [WARN] [__login] (2, '用户名或密码错误'). 
<2023-05-05 18:16:57.411> [WARN] [add_post] (1, '用户未登录或登录失败,请更换账号或重试'). fname=水 tid=8395194224

我的配置信息(aiotieba.toml)如下,配置了BDUSS和STOKEN:

[User]
[User.default]
BDUSS = "NyLUZXMlhRaG93NXVzbHZyV0ZSMkc5QnJ1TWpTa2……"
STOKEN = "e2bb9908bd606d62f2cbcbe6cb9d406d05d……"

关于 get_image 接口,没必要使用 numpy 和 opencv

百度接口返回的已经是图片的 bytes 数据,可以直接使用,没必要后续通过 opencv 转换为 ndarray,如果后续需要处理图片,应该自己安装模块,而不是在 aiotieba 中引入。我搜了下,只有这个接口需要使用这两个模块,为了使用这个接口还需要额外安装 numpy 和 opencv,有点麻烦,建议 parse_body 直接 return body,不进行 decode,移除相关引用。

添加在代码中给client传入配置的参数

目前我如果需要动态的调整客户端的配置的话,只能这样子?:

async with aiotieba.Client("TopAdmin") as client:
            client.account.BDUSS = rqt.form.get('BDUSS')
            client.account.STOKEN = rqt.form.get('STOKEN')
            user = await client.get_self_info()

这很不方便

如果可以动态传入的话,我的管理器也可以将这些配置放入数据库内了

部分帖子会出现某一页请求超出范围的问题,但实际上后面还有楼层

复现可用如下代码

await client.get_posts(3669356387, 44)
报错如下
<2024-01-28 17:32:45.457> [WARN] [get_posts] list assignment index out of range. tid=3669356387

而43页的has_more是true的,44页本身has_more则是false,然后45页可以请求到有内容,直至帖子结束。

在贴吧app上,在该楼内往下拉,直到正序43页最后一楼或者倒序45页第一楼的楼层后就会无法加载后续的楼层
在网页版则是这些楼层之间缺了一大片楼层。

吧和帖子可以由以上post获取了,就不发了
目前只在该贴遇到此问题

应该是官方的问题?

[Feature Request] 可配置的 logger

我需要什么功能

由于原有 loggerformat 是硬编码的,我觉得可以在 aiotieba.toml 中新增一个配置项 Logger 来配置日志的 formatbackup count 等,或许还可以加上颜色。

v2.10.3 get_user_info 使用 uid 无法查询

如何复现

test.py

import asyncio

import aiotieba as tb


async def run():
    async with tb.Client() as client:
        user = await client.get_user_info(809141539)
        print(user)
        print(user.user_id)


loop = asyncio.get_event_loop()
loop.run_until_complete(run())

aiotieba.toml

[User]

# default是自定义的BDUSS_key,你可以改成你喜欢的标识
# 该设计是为了方便通过BDUSS_key快速调用BDUSS,这样你就不用每次都填一串很长的东西作为参数
[User.default]
BDUSS = "" # 把你的那一串长长的BDUSS放在这

python 3.9 v2.10.3

<2023-01-13 15:30:51.254> [WARN] [_get_uinfo_getUserInfo] (110000, '请先登录'). user=809141539
<2023-01-13 15:30:51.254> [WARN] [get_user_info] Null input
0
0

python 3.9 v2.9.1

雪景suki
809141539

你希望程序作出何种行为
v2.9.1 所示

封禁功能失效

代码:

import aiotieba as tb
import asyncio

async def ban():
    async with tb.Client('default') as brow:
        brow.account.BDUSS = '*****'
        black_list = ('_G***Uty', '_5***CyQ', '_7***1NE', '_5***t8t8y')
        for id_ in black_list:
            await brow.block('*', id_, day=10, reason='')


asyncio.run(ban())

输出结果:

<2023-09-17 19:31:30.416> [WARN] [_get_uinfo_user_json] Empty body. user_name=_G***Uty
<2023-09-17 19:31:30.596> [WARN] [block] (300000, '由于系统升级,烦请您更新至最新版客户端处理违规用户,感谢您的理解与支持!'). fid=17636** portrait= day=10
<2023-09-17 19:31:30.634> [WARN] [_get_uinfo_user_json] Empty body. user_name=_5***CyQ
<2023-09-17 19:31:30.720> [WARN] [block] (300000, '由于系统升级,烦请您更新至最新版客户端处理违规用户,感谢您的理解与支持!'). fid=17636** portrait= day=10
<2023-09-17 19:31:30.750> [WARN] [_get_uinfo_user_json] Empty body. user_name=_7***1NE
<2023-09-17 19:31:31.420> [WARN] [block] (300000, '由于系统升级,烦请您更新至最新版客户端处理违规用户,感谢您的理解与支持!'). fid=17636** portrait= day=10
<2023-09-17 19:31:31.476> [WARN] [_get_uinfo_user_json] Empty body. user_name=_5***t8t8y
<2023-09-17 19:31:31.512> [WARN] [block] (300000, '由于系统升级,烦请您更新至最新版客户端处理违规用户,感谢您的理解与支持!'). fid=17636** portrait= day=10

UserInfo_c 缺少 is_bawu 字段

简要描述这个bug

get_comments接口返回的User数据包含is_bawu,但v2.10.2 UserInfo_c 没有初始化这个字段

你希望程序作出何种行为

class UserInfo_c(object):

    def _init(self, data_proto: TypeMessage) -> "UserInfo_c":
        ...
        self._is_bawu = bool(data_proto.is_bawu)
        self._is_vip = bool(data_proto.new_tshow_icon)
        self._is_god = bool(data_proto.new_god_data.status)
        ...
        return self

    @property
    def is_bawu(self) -> bool:
        """
        是否吧务
        """

        return self._is_bawu

加上就能和v2.10.1行为相同

Request Retry param for get_***

我需要什么功能

get_threads get_posts get_comment 三个函数在异步爬取帖子速率过快时,会出现429错误。
可否提供retry的参数,设置行为成重新爬取而非raise然后打log忽略掉,多谢

async def get_threads(

async def get_posts(

async def get_comments(

我想将这个功能应用于何种场景
快速爬取一个吧内的帖子

...

get_posts 获取到的 post 中 comments 均为空

简要描述这个bug

get_posts 获取到的 post 中 comments 均为空。

如何复现

import asyncio
import aiotieba

async def main():
    async with aiotieba.Client() as c:
        reps = await c.get_posts(8498223489)
        for rep in reps:
            print(rep.comments)

asyncio.run(main())

你希望程序作出何种行为

返回正确的 comments。

纯文本私信已实现

与极速版9.1.0.0实现一致
支持多对多收发
支持设置已读状态,接收已读状态

一个auto-echo的demo如下
请使用develop分支版本

import asyncio

import aiotieba as tb


async def main():
    async with tb.Client('listener') as brow:

        async def on_receive(ws: tb.core.WsCore, data: bytes, _: int) -> None:

            notifies = push_notify.parse_body(data)
            print(notifies)
            for notify in notifies:
                ws.mid_manager.update_msg_id(notify.group_id, notify.msg_id)

            groups = await brow.get_group_msg([n.group_id for n in notifies])
            print(groups)

            for group in groups:
                if group.group_type != tb.enums.GroupType.PRIVATE_MSG:
                    continue
                if not group.messages:
                    continue
                msg = group.messages[-1]
                if msg.text != 'ping':
                    continue
                await brow.send_msg(msg.user.user_id, 'pong')

        from aiotieba.client import push_notify

        brow._ws_core.callbacks[push_notify.CMD] = on_receive
        await brow.init_websocket()

        await asyncio.sleep(600.0)


asyncio.run(main())

期望的日志输出

<2023-02-07 11:12:38.698> [INFO] [on_receive] notifies: [{'note_type': 0, 'group_type': 6, 'group_id': 2582091924, 'msg_id': 290663630549}]
<2023-02-07 11:12:39.206> [INFO] [on_receive] msg_groups: [{'group_type': 8, 'group_id': 9, 'messages': [{'text': '{"fans":1,"replyme":1,"atme":0,"zan":2,"agree":2,"feed":0,"gift":0,"ueg":[],"absmsg":{"replyme":"\\u8d34\\u5427\\u7528\\u6237_GytRRAR \\u56de\\u590d\\u4f60: \\u6211\\u4e0d\\u9ea6\\u7247~\\u8cbc\\u91cc\\u4e00\\u4e2a\\u4eba\\u6084\\u6084\\u7684","atme":"\\u4e1c\\u5934\\u4f0a\\u4f50\\u5948\\u4e0d\\u61c2\\u604b\\u7231? \\u5728\\u8fd9\\u7bc7\\u795e\\u8d34\\u4e0b@\\u4e86\\u4f60\\uff0c\\u5e26\\u4e0a\\u74dc\\u5b50\\u53bb\\u56f4\\u89c2>>","agree":"\\u65b0\\u6536\\u52301\\u4e2a\\u70b9\\u8d5e"},"godfeed":1,"is_invite":0,"new_invite_num":0}', 'user': {'user_id': 0, 'user_name': '', 'portrait': ''}}]}, {'group_type': 6, 'group_id': 2582091924, 'messages': [{'text': 'ping', 'user': {'user_id': 6050811555, 'user_name': 'v_b0t', 'portrait': 'tb.1.2fc1394a.ukuFqA26BTuAeXqYr1Nmwg'}}]}]
<2023-02-07 11:12:39.407> [INFO] [set_msg_readed] Suceeded. user_id=6050811555 msg_id=290663630549
<2023-02-07 11:12:40.272> [INFO] [send_msg] Suceeded. user_id=6050811555
<2023-02-07 11:12:41.175> [INFO] [on_receive] notifies: [{'note_type': 22, 'group_type': 6, 'group_id': 2582091924, 'msg_id': 290663632981}]
<2023-02-07 11:12:41.563> [INFO] [on_receive] msg_groups: [{'group_type': 8, 'group_id': 9, 'messages': [{'text': '{"fans":1,"replyme":1,"atme":0,"zan":2,"agree":2,"feed":0,"gift":0,"ueg":[],"absmsg":{"replyme":"\\u8d34\\u5427\\u7528\\u6237_GytRRAR \\u56de\\u590d\\u4f60: \\u6211\\u4e0d\\u9ea6\\u7247~\\u8cbc\\u91cc\\u4e00\\u4e2a\\u4eba\\u6084\\u6084\\u7684","atme":"\\u4e1c\\u5934\\u4f0a\\u4f50\\u5948\\u4e0d\\u61c2\\u604b\\u7231? \\u5728\\u8fd9\\u7bc7\\u795e\\u8d34\\u4e0b@\\u4e86\\u4f60\\uff0c\\u5e26\\u4e0a\\u74dc\\u5b50\\u53bb\\u56f4\\u89c2>>","agree":"\\u65b0\\u6536\\u52301\\u4e2a\\u70b9\\u8d5e"},"godfeed":1,"is_invite":0,"new_invite_num":0}', 'user': {'user_id': 0, 'user_name': '', 'portrait': ''}}]}, {'group_type': 6, 'group_id': 2582091924, 'messages': [{'text': '{"eventId":22001,"eventParam":{"groupId":2582091924,"readMsgId":290663632235}}', 'user': {'user_id': 6050811555, 'user_name': 'v_b0t', 'portrait': 'tb.1.2fc1394a.ukuFqA26BTuAeXqYr1Nmwg'}}]}]

客户端内效果

Screenshot_2023-02-07-11-06-21-192-edit_com baidu tieba_mini

运行删除历史帖子,报错

import asyncio

import aiotieba as tb


async def main() -> None:
    async with tb.Client('default') as client:
        while posts_list := await client.get_self_posts():
            await asyncio.gather(*[client.del_post(post.fid, post.tid, post.pid) for posts in posts_list for post in posts])


asyncio.run(main())

<2023-08-24 13:00:30.570> [WARN] [get_self_posts] voice_info. user_id=xxxxxx

无后续

请教一个旧版的问题

v2.10.3版本的get_homepage接口无法获取到用户的IP归属地信息,返回的字段为空,但是get_post接口可以,是什么原因呢?
我对比了一下v2.10.3和当前版本的get_homepage目录的proto文件,几乎是一样的,那么是请求参数的问题吗?
我又对比了一下二者的pack_proto方法,的确有一些区别,但我不确定具体是哪个字段的影响。

关于返回帖子时间

我需要什么功能
您好,想问一下调用get_posts()以后如何可以返回更多的帖子内容呢,例如时间,来自xxx客户端等。谢谢
...

我想将这个功能应用于何种场景

...

楼中楼回复对象信息

我需要什么功能
楼中楼里
A 回复 B: “text”
除了user A和text文本的信息,还有回复对象B的名称信息,不知道能否获取

感谢~

云审查教程 报错

Traceback (most recent call last):
File "/Users/wgl/py/4.py", line 11, in
asyncio.run(main())
File "/usr/local/Cellar/[email protected]/3.9.12/Frameworks/Python.framework/Versions/3.9/lib/python3.9/asyncio/runners.py", line 44, in run
return loop.run_until_complete(main)
File "/usr/local/Cellar/[email protected]/3.9.12/Frameworks/Python.framework/Versions/3.9/lib/python3.9/asyncio/base_events.py", line 647, in run_until_complete
return future.result()
File "/Users/wgl/py/4.py", line 7, in main
async with tb.Database("在这里填你要审查的贴吧名") as brow:
AttributeError: module 'aiotieba' has no attribute 'Database'

转发贴图像init_wh报错

简要描述这个bug

Traceback (most recent call last):
  File "D:\ProgramProject\Tieba\aiotieba\v2.10.1\test.py", line 18, in <module>
    loop.run_until_complete(run())
  File "D:\ProgramProject\3.9\lib\asyncio\base_events.py", line 642, in run_until_complete
    return future.result()
  File "D:\ProgramProject\Tieba\aiotieba\v2.10.1\test.py", line 14, in run
    print(img.show_width)
  File "D:\ProgramProject\Tieba\aiotieba\v2.10.1\aiotieba\client\common\typedef\frags.py", line 193, in show_width
    self._init_wh()
  File "D:\ProgramProject\Tieba\aiotieba\v2.10.1\aiotieba\client\common\typedef\frags.py", line 179, in _init_wh
    self._show_width = int(show_width)
ValueError: invalid literal for int() with base 10: '%!s(*string=0xc1847cc0e0)'

如何复现

import asyncio

import aiotieba as tb


async def run():
    async with tb.Client() as client:
        threads = await client.get_threads('starry')
        for thread in threads:
            if thread.tid != 7905926315:
                continue

            for img in thread.share_origin.contents.imgs:
                print(img.show_width)


loop = asyncio.get_event_loop()
loop.run_until_complete(run())

你希望程序作出何种行为

输出show_width (show_height同理)

protobuf接口的websocket

https://github.com/Starry-OvO/aiotieba/releases/tag/v3.2.0

所有使用prorobuf序列化请求参数的接口现在都支持 websocket 模式,使用 Client(enable_ws=True) 以启用并优先使用 websocket 。 websocket 模式的优势是: get_threads 和 get_posts 的响应会使用 gzip 压缩;预期稳定性更好

99c48b1
46d7bd2 (#104)

  1. 所以请求接口是什么?

    ws_url = yarl.URL.build(scheme="ws", host="im.tieba.baidu.com", port=8000)
    im.tieba.baidu.com:8000不是阁下去年挖出来的私信接口吗? https://www.52pojie.cn/thread-1648818-1-1.html

  2. get_threads 和 get_posts 的响应会使用 gzip 压缩

    3大接口不本来就有response header之Content-Encoding: gzip吗?阁下是否忘了在request header中加Accept-Encoding: gzip?(但他们一直不支持HTTP/2brotli,而且对于本就是二进制结构的protobuf encoding压缩也就压缩掉重复字符串)

  3. 预期稳定性更好

    什么稳定性?难道给protobuf接口套一层ws都去ws endpoint url而不是每接口url那请求所返回的protobuf结构不同吗?(如同不同_client_version带来的效果 #64 (comment)

  4. 另外由于c.tieba.baidu.com下的endpoint不支持HTTP/2,所以阁下此前于 3886edf7b7bba9 把改成一堆接口的url scheme改成https反而会更慢(当然贴吧方面要求携带BDUSS cookie的接口必须https是合理的),我以前curl测试http要300ms左右而https要600ms左右,而如果他们哪天支持了HTTP/2那复用现有的connection就可以压缩response header中那一堆重复的cookie(不论您的request header多简洁有无BDUSS他们都会返回一堆遥测tracing用途的cookie)

封禁用户功能失效

从昨天起日志发现无法获取到用户信息,且block时提示以下信息

<2023-01-04 03:42:06.073> [INFO] [_exce_delete] Del Post. text=昆鹏发卡网,卡密,秘钥自动发货,虚拟产品自动发货 user=0 level=0 note=L81 推广网站/产品/群聊等广告行为
<2023-01-04 03:42:07.709> [INFO] [del_post] Succeeded. forum=abc pid=123 (具体的forum和pid就不写了)
<2023-01-04 03:42:07.710> [WARN] [get_user_info] Null input
<2023-01-04 03:42:07.916> [WARN] [block] (300000, '由于系统升级,烦请您更新至最新版客户端处理违规用户,感谢您的理解与支持!'). forum=abc user=0 day=1

看起来似乎是贴吧客户端接口升级了。有什么跟进吗?

无法获取post[n]的user对象

简要描述这个bug
去年功能一切正常,从2023年开始无法获取到post里的每个用户的个人信息
...

如何复现
使用client.get_posts方法
在何种场景下用何种操作复现

你希望程序作出何种行为
统计每个发帖人 回帖人的用户名 昵称 归属地
...

截图(可选)
image
image

...

百度贴吧接口合集 链接失效

README 文件中的友情链接中的第一个超链接百度贴吧接口合集,链接到的地址为https://github.com/Starry-OvO/Tieba-Manager/blob/master/aiotieba/_api.py,是一个无效地址。

近期贴吧后端将曾于2019年3月b吧事件时缩小的`吧首页主题帖列表`接口所能通过`pn`参数翻到的`最多x条主题帖限制`从10k加到了100k

rt
当时是缩小到了20k主题帖
image
好像是几个月后又进一步缩小到了10k
https://github.com/n0099/TiebaMonitor/blob/981fc6d3d077f3ba6a79f27e1b2e245f46492335/c%23/crawler/src/Worker/ArchiveCrawlWorker.cs#L10-L12

// as of March 2019, tieba had restrict the max accepted value for page param of forum's threads api
// any request with page offset that larger than 10k threads will be respond with results from the first page
private const int MaxCrawlablePage = 334; // 10k threads / 30 per request (from Rn param) = 333.3...

这个限制在当时是应用于所有能显示吧首页的接口,包括网页端 客户端c/f/frs/page wap网页端https://community.wvbtech.com/d/1805移动端网页端
如果对这些接口请求的 $pn&gt;limit$ (对于客户端接口$pn&gt;limit*rn\text{(每页数量参数)}$ 因为只有客户端接口pn参数是真的指页数,也就是 $客户端pn=rn*网页端pn$网页端pn实际上是指SQL OFFSET),那么贴吧服务端只会返回pn=1的主题帖


而刚才我又试了下发现不知何时起他们又改成了100k条主题帖(网页端参数rn=50&pn=100000
以有着共有主题数14534787个,贴子数 993077918篇 众人皆帝数33828556的李毅吧为例:

  • 网页端
    image
  • wap网页端
    image
  • 移动端网页端
    image

而客户端(基于 https://github.com/n0099/TiebaMonitor/blob/e7d7240aebeee74d04f7b5d4748af69dff3ed5b0/client_tester.php#L30 )不是简单的增加到100k,而是客户端接口特色之根据提供参数和client_version取值排列组合而不同:
对于有些(知名贴吧?(已经死了的)核心区?热门分区排序?)贴吧,client_version>=8.0.0(.0)时限制是12k条,而client_version<8.0.0(.0)或其他普通的贴吧(即便有着大量历史主题帖)时没有限制
已经试过用于避免热门分区sort=5但没有效果

$ php-cgi client_tester_2.php client_version=8.0.0 type=posts forum=东方 rn=10 pn=1200 | sed -n '3,$p' | jq '.page'
{
  "cur_good_id": 0,
  "page_size": 10,
  "offset": 11990,
  "current_page": 1200,
  "total_count": 12000,
  "total_page": 1200,
  "has_more": 0,
  "has_prev": 1
}
$ php-cgi client_tester_2.php client_version=7.0.0 type=posts forum=东方 rn=10 pn=240 | sed -n '3,$p' | jq '.page'
{
  "has_more": 1,
  "has_prev": 1,
  "cur_good_id": 0,
  "page_size": 10,
  "offset": 2390,
  "current_page": 240,
  "total_count": 306968,
  "total_page": 30697
}
$ php-cgi client_tester_2.php client_version=7.9.9.9 type=posts forum=东方 rn=10 pn=240 | sed -n '3,$p' | jq '.page'
{
  "total_count": 306968,
  "total_page": 30697,
  "has_more": 1,
  "has_prev": 1,
  "cur_good_id": 0,
  "page_size": 10,
  "offset": 2390,
  "current_page": 240
}
$ php-cgi client_tester_2.php client_version=12.40.1.1 type=posts forum=东方 rn=10 pn=240 | sed -n '3,$p' | jq '.page'
{
  "current_page": 240,
  "total_count": 12000,
  "total_page": 1200,
  "has_more": 1,
  "has_prev": 1,
  "cur_good_id": 0,
  "page_size": 10,
  "offset": 2390
}
$ php-cgi client_tester_2.php client_version=12.40.1.1 type=posts forum=minecraft rn=10 pn=240 | sed -n '3,$p' | jq '.page'
{
  "has_more": 1,
  "has_prev": 1,
  "cur_good_id": 0,
  "page_size": 10,
  "offset": 2390,
  "current_page": 240,
  "total_count": 12000,
  "total_page": 1200
}
$ php-cgi client_tester_2.php client_version=12.40.1.1 type=posts forum=模拟城市 rn=10 pn=240 | sed -n '3,$p' | jq '.page'
{
  "offset": 2390,
  "current_page": 240,
  "total_count": 46852,
  "total_page": 4686,
  "has_more": 1,
  "has_prev": 1,
  "cur_good_id": 0,
  "page_size": 10
}
$ php-cgi client_tester_2.php client_version=12.40.1.1 type=posts forum=v rn=10 pn=240 | sed -n '3,$p' | jq '.page'
{
  "page_size": 10,
  "offset": 2390,
  "current_page": 240,
  "total_count": 12000,
  "total_page": 1200,
  "has_more": 1,
  "has_prev": 1,
  "cur_good_id": 0
}

还注意到只有客户端接口的返回的主题帖列表跟其他3个网页端接口不同(但发帖时间都是2021-05-12),这说明3个网页端接口后端至少在分页逻辑上是一致的,而客户端接口后端做了额外的分页前prefilter(比如前几年搞的客户端投票贴在网页端不显示,遗留的基于flash的网页端投票贴在客户端不显示)

$ php-cgi client_tester_2.php client_version=6.0.2 type=posts forum=李毅 rn=50 pn=2000 | sed -n '3,$p' | jq '.thread_list[].title'
"昨天朋友介绍了个相亲对象,听说家庭条件挺好。对方父亲开公司,"
"求这个头像是情头吗,我感觉我有点颜色了"
"假装小白,直播培训机构如何忽悠小白报名培训班的。"
"各位大佬,帅哥美女们,阿姨阿姨父们,累的深俺的接头们,捧个场"
"#512# 什么样的分手应该挽回?_济南泉思情感咨询"
"今天听到警报声"
"从来不看电视剧的我竟然看完了"
"我发表了一篇视频贴,大伙来看看吧~"
"汶川地震十三周年#汶川地震#"
"五月的青海湖,太美了"
"在北京注册一家保安公司"
"大红孩儿"
"到底是你借我还是我借你"
"过去了13年一看到还是泪目了"
"有没睡的吗 进来唠唠"
"贴吧又抽了"
"祝贺《药问3收棺之战》圆满成功"
"妈妈说:“别再情绪上头的那一刻忘记了对方所有的好,满身是刺的"
"现在人真可怕"
"求本小说,哪位大神知道叫什么名字!!!"
"进来唠唠"
"14,已然不是那个14了"
"这样农村姑娘值得娶吗?"
"🐂"
"我们小区里面买不到馒头,没有卖馒头,害"
"哪位老兄有那张说了一大堆,其实以上都是我编的那张图?"
"【求一张婴儿小jj的图片,】"
"图文店周年庆:黑白打印0.1元,彩色打印0.3元 胶装3元"
"贴吧五虎上将后继有人了"
"谁有这种图,感谢"
"一只烧鸡只剩这些了……"
"再来重温帝吧当年的内涵文章"
"专家一天是什么都能一本正经的胡说八道!"
"女孩一直想去城里打工,原来城里的活也不容易。两袋水泥二百斤,"
"戒烟斑马线"
"你见过最土的网名是什么?"

以于2004年建吧有着46852条主题帖(因此可以翻到最后的937页之rn=50&pn=46800)的模拟城市吧为例:
网页端的第937页:
image
客户端的第937页(可见甚至没有返回够50条主题帖,说明除了prefilter还存在着应用于分页后的postfilter):

$ php-cgi client_tester_2.php client_version=6.0.2 type=posts forum=模拟城市 rn=50 pn=937 | sed -n '3,$p' | jq '.thread_list[].title'
"[公告撤消Tobynickness的吧主权限"
"你们输入城市名字的时候,有没有遇到我这样的问题"
"完全免费的单机游戏下载"
"模拟城市4有没有发财致富秘诀???"
"求助!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
"求求大家了帮帮我好吗?怎么用金山游侠修改尖峰时刻的钱啊?"
"公墓和市政厅有何用?"
"大家都用什么方法赚钱的???"
"这个贴吧,我喜欢!!!"
"若有东方式的建筑该多好!!"
"玩多么大的地图最合适啊?小地图还是大地图?"
"模拟城市4问题请教??"
"事业"

程序不会自动创建数据库和表?

使用my_reviewer.py时一直报数据库连接错误,折腾半天后发现是没有创建数据库(因为我以为会自动创建)
手动执行CREATE DATABASE aiotieba后,重新运行程序又报错(1146, "Table 'aiotieba.user_id_XXX' doesn't exist")
所以程序不会创建数据库和表吗?我注意到database.py中有create_database方法,但这个方法从未被使用,也没有在示例中说明
框架是否应该在Reviewer初始化时(或者__aenter__中)先调用db.create_database方法?

无法获取楼中楼

无法获取到楼中楼
1.client.get_posts(tid=8354539603,only_thread_author=False,with_comments=True,comment_sort_by_agree=True,rn=30)
通过get_posts没有获取到楼中楼信息
返回列表key:['floor','text','tid','user','vimage‘]
2.client.get_comments(pn=1,tid=8354539603,pid=147346323674,is_floor=True)
通过get_comments获取到的信息为
<2023-04-20 10:10:38.962> [WARN] [get_comments] (4, '贴子可能已被删除').
确认tid和pid无误

user.portrait 出现 ?t= url参数

简要描述这个bug

贴吧接口真是太神奇啦

如何复现

import asyncio

import aiotieba as tb


async def run():
    async with tb.Client() as client:
        posts = await client.get_posts(8176989942, pn=7)
        for post in posts:
            if post.floor == 197:
                # tb.1.f786.6nEjx1tEYgNNTxjZeaefFg?t=1673398976
                print(post.user.portrait)

loop = asyncio.get_event_loop()
loop.run_until_complete(run())

你希望程序作出何种行为

对portrait做处理,清除 ?t=

为什么频繁修改请求客户端接口时指定的`_client_version`(api版本)

git clone https://github.com/Starry-OvO/aiotieba
git log -L 281,281:aiotieba/client.py | grep -E '(Date|commit|\+    latest)'
commit 507c9224e48a00986a3e1867d9c170353e31e38c
Date:   Mon Dec 19 08:40:55 2022 +0800
+    latest_version: ClassVar[str] = "12.34.1.0"  # 这是目前的最新版本
commit 3ad1bdf725aae62c0b49a67c296eee26afd51ee8
Date:   Sat Dec 3 10:49:49 2022 +0800
+    latest_version: ClassVar[str] = "12.32.5.2"  # 这是目前的最新版本
commit 6019574f5ca27a8894fcecd0d21bfb829751505e
Date:   Fri Nov 25 08:34:36 2022 +0800
+    latest_version: ClassVar[str] = "12.32.5.1"  # 这是目前的最新版本
commit e0a95139ad6f05d2ecc417f926c8dfa804201b9f
Date:   Wed Nov 23 16:35:20 2022 +0800
+    latest_version: ClassVar[str] = "12.32.4.1"  # 这是目前的最新版本
commit 51197f5fd9276d2570bce4c86d6191719bccc162
Date:   Fri Nov 18 10:12:38 2022 +0800
+    latest_version: ClassVar[str] = "12.32.3.0"  # 这是目前的最新版本
commit 4af2e30861b887d4c857e003be7d0829997a460b
Date:   Fri Nov 4 22:26:16 2022 +0800
+    latest_version: ClassVar[str] = "12.31.6.0"  # 这是目前的最新版本
commit 478d006d29c49f7b721398cf33a756b7f2a42f78
Date:   Mon Oct 31 19:49:50 2022 +0800
+    latest_version: ClassVar[str] = "12.31.0.3"  # 这是目前的最新版本
commit 3d70b1638b4609f11f3d02625a13bf261395a454
Date:   Fri Oct 28 22:10:08 2022 +0800
+    latest_version: ClassVar[str] = "12.30.1.0"  # 这是目前的最新版本
commit 3272201302add4532771fca96a2b19e1edad0a8b
Date:   Fri Oct 21 07:45:22 2022 +0800
+    latest_version: ClassVar[str] = "12.30.0.0"  # 这是目前的最新版本
commit 236377a24f31d9e42bdd999ec339908e6cc985dd
Date:   Mon Oct 10 21:52:02 2022 +0800
+    latest_version: ClassVar[str] = "12.29.7.0"  # 这是目前的最新版本
commit 11019a1ec9edb161cb91efc635dcea11ab6f6f58
Date:   Wed Sep 28 08:28:16 2022 +0800
+    latest_version: ClassVar[str] = "12.29.5.0"  # 这是目前的最新版本
commit 715cf1f761ed08be4f17481aa2c84cdfaa43285a
Date:   Sat Sep 24 08:11:49 2022 +0800
+    latest_version: ClassVar[str] = "12.29.4.2"  # 这是目前的最新版本
commit b7cd81baed96360019b10e96bfacc4692578bb53
Date:   Fri Sep 23 07:52:26 2022 +0800
+    latest_version: ClassVar[str] = "12.29.4.1"  # 这是目前的最新版本
commit b403d1f5cfede874bba20f623694efbb98e7f8f4
Date:   Sun Sep 18 07:51:51 2022 +0800
+    latest_version: ClassVar[str] = "12.29.1.1"  # 这是目前的最新版本
commit 1e468fa92df1c9dded4695e57f44b07393f03c35
Date:   Fri Sep 9 19:04:58 2022 +0800
+    latest_version: ClassVar[str] = "12.29.0.1"  # 这是目前的最新版本
commit 90549f37a9f70b20f90e6c96414adac0e29c80f2
Date:   Wed Sep 7 11:00:20 2022 +0800
+    latest_version: ClassVar[str] = "12.28.1.1"  # 这是目前的最新版本
commit 204669c129ec1ce67e200b5a74b2a32fcae6d153
Date:   Wed Aug 31 10:53:02 2022 +0800
+    latest_version: ClassVar[str] = "12.28.1.0"  # 这是目前的最新版本
commit 47e68aecdb0bc66e0cfc502911e34d6233742974
Date:   Sat Aug 27 19:56:27 2022 +0800
+    latest_version: ClassVar[str] = "12.28.0.0"  # 这是目前的最新版本
commit f74e5764e6f1a6ae69b48b45b6d234605a65ea58
Date:   Fri Aug 19 19:41:24 2022 +0800
+    latest_version: ClassVar[str] = "12.27.5.0"  # 这是目前的最新版本
commit fad36a7632d50c9cf47f67085f306eff86b42e38
Date:   Thu Aug 18 22:28:26 2022 +0800
+    latest_version: ClassVar[str] = "12.27.4.2"  # 这是目前的最新版本
commit 2aa0c56c4cb48f68b78d81772093a4ea2c0c03ac
Date:   Tue Aug 16 22:32:46 2022 +0800
+    latest_version: ClassVar[str] = "12.27.4.1"  # 这是目前的最新版本
commit 6ef184f5078b797603916fb4c7c2b1c23fde8150
Date:   Fri Aug 12 22:11:40 2022 +0800
+    latest_version: ClassVar[str] = "12.27.1.1"  # 这是目前的最新版本
commit 5bd6ebf459673e35ca44bf385bb94892146a6a64
Date:   Wed Aug 10 16:11:31 2022 +0800
+    latest_version: ClassVar[str] = "12.27.1.0"  # 这是目前的最新版本
commit dfd9b122406931377dffe9bc69e29b2c277a3cb7
Date:   Mon Aug 8 16:58:57 2022 +0800
+    latest_version: ClassVar[str] = "12.27.0.2"  # 这是目前的最新版本
commit b1a684c730cfd1e5dcc19b097c9951e7a6677c27
Date:   Thu Aug 4 12:12:39 2022 +0800
+    latest_version: ClassVar[str] = "12.26.4.3"  # 这是目前的最新版本
commit 49a0e17b86b0ff44d5d7386241a2da7a39cf45d8
Date:   Sun Jul 24 16:12:56 2022 +0800
+    latest_version: ClassVar[str] = "12.26.4.2"  # 这是目前的最新版本
commit f7cd6fb1d209befae9920e87855ae6745f7b39dd
Date:   Sat Jul 23 21:59:45 2022 +0800
+    latest_version: ClassVar[str] = "12.26.4.1"  # 这是目前的最新版本
commit b13f5c2ead6dc1b52f69a8fcd6cb4c29cbe9a754
Date:   Fri Jul 15 22:47:28 2022 +0800
+    latest_version: ClassVar[str] = "12.26.1.0"  # 这是目前的最新版本
commit fd99cc7a7f511731f0dc2c6a3ad6a6ddcfa9d113
Date:   Sun Jul 3 22:10:40 2022 +0800
+    latest_version: ClassVar[str] = "12.25.5.0"  # 这是目前的最新版本
commit 1cbf476555b8a1e43cf1e3190b766e51455245a7
Date:   Sun Jun 19 23:46:30 2022 +0800
+    latest_version: ClassVar[str] = "12.25.4.3"  # 这是目前的最新版本
commit 65111a3436aac6182d32260de4d76fa47c519824
Date:   Thu Jun 9 22:59:31 2022 +0800
+    latest_version: ClassVar[str] = "12.25.1.0"  # 这是目前的最新版本
commit db6a5c8a18b01dea3f34a724dc11ddec5bcee81d
Date:   Mon May 30 22:11:15 2022 +0800
+    latest_version: ClassVar[str] = "12.25.0.2"  # 这是目前的最新版本
commit 9ff799490039b790e28d8f17a3545a1dcd7ded40
Date:   Fri May 27 23:09:41 2022 +0800
+    latest_version: ClassVar[str] = "12.24.4.0"  # 这是目前的最新版本

9ff7994 之前版本号分散在tiebaBrowser/_api.py的各个api封装函数中:

git checkout 9ff799490039b790e28d8f17a3545a1dcd7ded40~1
git log -L 774,2705:tiebaBrowser/_api.py | grep -E '^(Date|commit|\+.*version)'
commit 8c6500fe7806d33678930c347b9f425c9fe863d0
Date:   Fri May 27 19:38:22 2022 +0800
+            ('_client_version', '12.12.1.0'),
+            ('_client_version', '12.12.1.0'),
+                ('_client_version', '12.12.1.0'),
commit 90569c4642692659f892b90d823e29ba9e7f0792
Date:   Fri May 27 15:05:48 2022 +0800
commit f382b75a9c3747b50dd511026fca8d2e1bd80dc5
Date:   Fri May 27 01:28:15 2022 +0800
commit ac852e5a96e5d3e61d1b6e6d28999f2a5e2fa2d3
Date:   Thu May 26 21:30:27 2022 +0800
commit 4c9d5dfcd699e07889213ec16095696c4ab60a88
Date:   Thu May 26 21:22:12 2022 +0800
commit 8b364bced45a36eeb3770f656f8cfa4d45557178
Date:   Thu May 26 20:59:30 2022 +0800
commit 2a99e9d56b3f8c36be78d03b05fca34d5ae8b65f
Date:   Thu May 26 16:47:50 2022 +0800
commit c5c208f002cf1038acbd324c687f037cf5963008
Date:   Thu May 26 13:09:03 2022 +0800
commit 842b725e5c0053b514c5b351b7f1caa913547eb8
Date:   Thu May 26 12:57:23 2022 +0800
+        common_proto._client_version = '12.12.1.0'
commit a7534ef2729cec0328de7da80a32d006268efb1d
Date:   Tue May 24 18:26:45 2022 +0800
commit 3d9e657a1c6ae200ef52e65c2964f9119104d119
Date:   Mon May 23 02:04:29 2022 +0800
+        common_proto._client_version = '12.12.1.0'
+        common_proto._client_version = '12.12.1.0'
+        common_proto._client_version = '12.12.1.0'
+        common_proto._client_version = '12.12.1.0'
+        common_proto._client_version = '12.12.1.0'
+        common_proto._client_version = '12.12.1.0'
commit 2d89e639e957f198ac1e73f591e05e070f3072bd
Date:   Mon May 16 19:07:15 2022 +0800
commit 7cd8ec5c29205599dbc4cf25d9752158b632910a
Date:   Mon May 16 17:25:15 2022 +0800
+            ('_client_version', '12.12.1.0'),
+            ('_client_version', '12.12.1.0'),
+            ('_client_version', '12.12.1.0'),
+            ('_client_version', '12.12.1.0'),  # 删除该字段会导致post_list和dynamic_list为空
+            ('_client_version', '12.12.1.0'),
+            ('_client_version', '12.12.1.0'),  # 删除该字段可直接获取前200个吧,但无法翻页
+            ('page_no', pn),  # 加入client_version后,使用该字段控制页数
+            ('_client_version', '12.12.1.0'),
+            ('_client_version', '12.12.1.0'),
+            ('_client_version', '12.12.1.0'),
+            ('_client_version', '12.12.1.0'),
commit e0cc14dc94ecb21eafc359897ff803447e348d9c
Date:   Sat May 14 17:30:58 2022 +0800
commit fe4bd8e39aac7d8dc80f28d17e19806a370c6f42
Date:   Sun May 8 00:59:04 2022 +0800
+            '_client_version': '12.12.1.0',  # 删除该字段可直接获取前200个吧,但无法翻页
+            'page_no': pn,  # 加入client_version后,使用该字段控制页数
commit bae28cb6c6c95e3b07d82759d0713661214ab5b1
Date:   Sat May 7 14:38:04 2022 +0800
commit fde137a6cac56268ab9e829a1a1ea0f3c5799d74
Date:   Sat May 7 10:31:06 2022 +0800
+            '_client_version': '12.12.1.0',
commit dea5c86b2b5f75a59bd05e3a2d10911a6638f5cf
Date:   Sun May 1 22:09:57 2022 +0800
commit 68df1e4d4cffd3879232ba92bcb785eefd1f5c31
Date:   Wed Apr 27 18:18:27 2022 +0800
commit 1bb8ac7a96ccc222075d4fead68aa87bb4d51f43
Date:   Fri Apr 22 23:49:14 2022 +0800
commit 898492086df8d81d405db9f41d17018023a799dd
Date:   Thu Apr 21 22:20:57 2022 +0800
commit ae295d2c153f548c67575eec24ae29c65fea31be
Date:   Tue Apr 19 16:49:42 2022 +0800
commit 47b691568d9318ebfb5a6c554bd1900a2c6f6e0b
Date:   Tue Apr 19 13:19:12 2022 +0800
+                'page_no': _pn,  # 加入client_version后,使用该字段控制页数
commit a80ef7506a8b21a49ff709538e2d680695138ea9
Date:   Mon Apr 18 18:36:43 2022 +0800
+        common._client_version = '12.12.1.0'
commit b0b14a9f70cc0d2ba16d8e6b62618944fdf9ef54
Date:   Mon Apr 18 18:35:19 2022 +0800
+        common._client_version = '12.12.1.0'
+        common._client_version = '12.12.1.0'
+            '_client_version': '12.12.1.0',
+            '_client_version': '12.12.1.0',
+        common._client_version = '12.12.1.0'
+        payload = {'BDUSS': self.sessions.BDUSS, '_client_version': '12.12.1.0'}
+            '_client_version': '12.12.1.0',  # 删除该字段会导致post_list和dynamic_list为空
+            '_client_version': '12.12.1.0',
+                '_client_version': '12.12.1.0',  # 删除该字段可直接获取前200个吧,但无法翻页
+        common._client_version = '12.12.1.0'
+        common._client_version = '12.12.1.0'
+            '_client_version': '12.12.1.0',
+            '_client_version': '12.12.1.0',
+            '_client_version': '12.12.1.0',
commit 704577bd84752a4934db97c5db57da22db8bfb1d
Date:   Sun Apr 17 14:01:01 2022 +0800
commit fa2afdce0e5aa0655429424f134fce6f8a2b6b51
Date:   Thu Apr 14 23:32:57 2022 +0800
commit a2eae0121492e79db8f426f1f39a5355abbaeadc
Date:   Tue Apr 12 15:57:04 2022 +0800
commit dfd30bf5602b9f8df282c19bd039f9f6a16a4349
Date:   Sun Apr 10 23:10:39 2022 +0800
commit e5986e055b01b9e01c553b825aaa88d6d8f9a568
Date:   Sun Apr 10 23:01:59 2022 +0800
commit 126bc00d365c3de315b64a657482a4bb27b462a7
Date:   Sat Apr 9 22:38:03 2022 +0800
+            '_client_version': '12.23.1.0',
+            '_client_version': '12.23.1.0',
+        payload = {'BDUSS': self.sessions.BDUSS, '_client_version': '12.23.1.0'}
+            '_client_version': '12.23.1.0',  # 删除该字段会导致post_list和dynamic_list为空
+            '_client_version': '12.23.1.0',
+                '_client_version': '12.23.1.0',  # 删除该字段可直接获取前200个吧,但无法翻页
+                'page_no': _pn  # 加入client_version后,使用该字段控制页数
+            '_client_version': '12.23.1.0',
+            '_client_version': '12.23.1.0',
+            '_client_version': '12.23.1.0',
commit 751eabda9d97f70b81090738e87b3e4028e4c717
Date:   Sat Apr 9 21:53:07 2022 +0800
+                       'page_no': _pn  # 加入client_version后,使用该字段控制页数
commit 6a2d1bbd2aed6162d641f36c3a417280d1651a90
Date:   Sat Apr 9 19:27:44 2022 +0800
commit 6d275e6b5898d22286d06be7bceda7c7cfddd710
Date:   Fri Apr 8 21:53:46 2022 +0800
+        common._client_version = '12.23.1.0'
+        common._client_version = '12.23.1.0'
+        common._client_version = '12.23.1.0'
+                   '_client_version': '12.23.1.0',
+        payload = {'_client_version': '12.23.1.0',
+        common._client_version = '12.23.1.0'
+                   '_client_version': '12.23.1.0'
+                   '_client_version': '12.23.1.0',  # 删除该字段会导致post_list和dynamic_list为空
+        payload = {'_client_version': '12.23.1.0',
+                       '_client_version': '12.23.1.0',  # 删除该字段可直接获取前200个吧,但无法翻页
+        common._client_version = '12.23.1.0'
+        common._client_version = '12.23.1.0'
+                   '_client_version': '12.23.1.0',
+                   '_client_version': '12.23.1.0',
+                   '_client_version': '12.23.1.0',
commit d20cd11bc9e66ab3dc96b50f37ad27d2df3f2891
Date:   Tue Apr 5 22:10:36 2022 +0800
+        payload = {'_client_version': '12.23.0.1',
commit 93738095f323e292fac0d58664d425eba12f2df4
Date:   Sun Apr 3 14:40:13 2022 +0800
+        common._client_version = '12.23.0.1'
+        common._client_version = '12.23.0.1'
+        common._client_version = '12.23.0.1'
+                   '_client_version': '12.23.0.1',
+        payload = {'_client_version': '12.23.0.1',
+        common._client_version = '12.23.0.1'
+                   '_client_version': '12.23.0.1'
+                   '_client_version': '12.23.0.1',  # 删除该字段会导致post_list和dynamic_list为空
+                       '_client_version': '12.23.0.1',  # 删除该字段可直接获取前200个吧,但无法翻页
+        common._client_version = '12.23.0.1'
+        common._client_version = '12.23.0.1'
+                   '_client_version': '12.23.0.1',
+                   '_client_version': '12.23.0.1',
+                   '_client_version': '12.23.0.1',
commit 9705aa0eabbeeab99e6d16ca7a2206233595c106
Date:   Fri Apr 1 22:42:36 2022 +0800
commit 54dba2ed3d928ee52ed2b8c974bf63749b979a28
Date:   Thu Mar 31 00:01:42 2022 +0800
commit 8eebfe61e19938a8a10224831052e50001ac260e
Date:   Wed Mar 30 17:31:31 2022 +0800
commit a0a20f569d38792c82aa2ce201882ccfe90d3906
Date:   Tue Mar 29 12:48:05 2022 +0800
+        common._client_version = '12.22.1.0'
commit bd25281beed23c1460ca0a47b19906bfd1f634aa
Date:   Tue Mar 29 00:39:49 2022 +0800
commit 113d254fabeedf374fc28814b35f85f38028bf36
Date:   Tue Mar 29 00:07:19 2022 +0800
+                   '_client_version': '12.22.1.0',
commit 95419d98d8aa3d153be48ca1b696079276d311a5
Date:   Mon Mar 28 00:18:15 2022 +0800
commit c7ac6cbd9f95776260bf40b6a9a0c2f7dc600919
Date:   Sat Mar 26 19:08:02 2022 +0800
commit 8da7cba159f28fca489a801d96d1783011e7bde2
Date:   Sat Mar 26 13:50:54 2022 +0800
+                   '_client_version': '12.22.1.0',
commit b887e670dba0323b54e6ca4955962778bd34c3a9
Date:   Fri Mar 25 18:35:03 2022 +0800
commit e0e07b6c3dc9e47ea423e52970a73d5a2db5a82a
Date:   Thu Mar 24 21:25:16 2022 +0800
commit 1161d99098eebc96c49cf1270d84fa7b03e6f9ed
Date:   Thu Mar 24 15:15:25 2022 +0800
commit 998bd8f7d74d442ff455df049f3bd9b7d9503c30
Date:   Thu Mar 24 13:45:07 2022 +0800
commit f598a11e14d5e791cfa26914d33623bc6fc2ebb4
Date:   Thu Mar 24 01:20:15 2022 +0800
+        common._client_version = '12.22.1.0'
+        common._client_version = '12.22.1.0'
+        common._client_version = '12.22.1.0'
+                   '_client_version': '12.22.1.0',
+        payload = {'_client_version': '12.22.1.0',
+                   '_client_version': '12.22.1.0'
+                   '_client_version': '12.22.1.0',  # 删除该字段会导致post_list和dynamic_list为空
+                       '_client_version': '12.22.1.0',  # 删除该字段可直接获取前200个吧,但无法翻页
+        common._client_version = '12.22.1.0'
+        common._client_version = '12.22.1.0'
+                       '_client_version': '12.22.1.0',
+                   '_client_version': '12.22.1.0',
commit ad2dc30c0f78937abe19d337d4e8d22ad3ac6cd0
Date:   Wed Mar 23 19:50:06 2022 +0800
commit fc990750c11f47ab7f9f3245e057e8b201506083
Date:   Wed Mar 23 19:19:41 2022 +0800
commit c003d610f48ffaafa0396df216ccf114efa64f78
Date:   Wed Mar 23 12:56:11 2022 +0800
commit 922bc4cef0480fa3c334681448fe7181bf991330
Date:   Wed Mar 23 12:46:31 2022 +0800
+        common._client_version = '12.22.0.3'
commit 87b4d65dee2509a04268081e26d257b486ae953f
Date:   Tue Mar 22 23:24:28 2022 +0800
commit 63cb1aaca5be11fa4cdcc5188bd35f592614f73d
Date:   Tue Mar 22 00:59:21 2022 +0800
+        common._client_version = '12.22.0.3'
+        common._client_version = '12.22.0.3'
+        common._client_version = '12.22.0.3'
+                   '_client_version': '12.22.0.3',
+        payload = {'_client_version': '12.22.0.3',
+                   '_client_version': '12.22.0.3'
+                   '_client_version': '12.22.0.3',  # 删除该字段会导致post_list和dynamic_list为空
+                       '_client_version': '12.22.0.3',  # 删除该字段可直接获取前200个吧,但无法翻页
+        common._client_version = '12.22.0.3'
+                       '_client_version': '12.22.0.3',
+                   '_client_version': '12.22.0.3',
commit caf9ba9a743f83c023c7f8b54d016dff92f89385
Date:   Sun Mar 20 19:18:07 2022 +0800
commit 7913072b44237e8d451855cb7046fab65ea4cc79
Date:   Sun Mar 20 13:58:46 2022 +0800
commit 49914126375d73891aa21f3d65aa606b4401a784
Date:   Sun Mar 20 10:54:15 2022 +0800
commit f22d2f6273ec437b51e17d0767c3e4a0faa435f4
Date:   Sun Mar 20 10:37:31 2022 +0800
commit 4d81a753a099a69ddccce647c4bfbed53aaef2de
Date:   Sun Mar 20 00:57:25 2022 +0800
+                       '_client_version': '12.21.1.0',
+                   '_client_version': '12.21.1.0',
commit 934b715676709f1675210d640a0a9828ba1ac487
Date:   Sat Mar 19 17:17:04 2022 +0800
commit 9f3b09873c3f1227708c27dc21d05b941d02ebda
Date:   Sat Mar 19 10:27:02 2022 +0800
commit 4795229746756e400ae85a429cd6a26368151379
Date:   Fri Mar 18 21:18:05 2022 +0800
commit b8e4e614084bb40da98da4b4289db362c1441e62
Date:   Fri Mar 18 14:44:28 2022 +0800
+                   '_client_version': '12.21.1.0'
commit 736691f9b01324b8febd1e0c460c90b8ccc1f67c
Date:   Fri Mar 18 11:00:29 2022 +0800
commit a0f1e2e0ee73878ad0bd7b01ce4ac5916ef5ca80
Date:   Fri Mar 18 00:28:12 2022 +0800
commit f332f0a8fe4b1819f8de55e25f3ce95d0d9df104
Date:   Thu Mar 17 22:21:22 2022 +0800
commit 0f6856937721a328e001e96478ec464beeac1889
Date:   Thu Mar 17 14:18:30 2022 +0800
+                   '_client_version': '12.21.1.0',
+        common._client_version = '12.21.1.0'
commit a46dd2e2150fe055682dd93f9b9b07eddac75888
Date:   Thu Mar 17 11:26:22 2022 +0800
+            common._client_version = '12.21.1.0'
+                       '_client_version': '12.21.1.0',
commit 8beb92800d0fddba3de9e173846a73637a3427c9
Date:   Thu Mar 17 00:02:05 2022 +0800
+        common._client_version = '12.21.1.0'
+        common._client_version = '12.21.1.0'
+        common._client_version = '12.21.1.0'
+        payload = {'_client_version': '12.21.1.0',
+                   '_client_version': '12.21.1.0',  # 删除该字段会导致post_list和dynamic_list为空
+                       '_client_version': '12.21.1.0',  # 删除该字段可直接获取前200个吧,但无法翻页
commit 3bccebd1750d9c04572655d834362aa67eef11c7
Date:   Wed Mar 16 20:59:27 2022 +0800
commit c960e0c1c56e3250995cc3e98ebba42df2f0213c
Date:   Wed Mar 16 20:48:10 2022 +0800
+        common._client_version = '9.1.0.0'
+        common._client_version = '9.1.0.0'
commit a35030f1a201018a593c452dd7193623cc30e0e4
Date:   Wed Mar 16 18:45:56 2022 +0800
+        common._client_version = '9.1.0.0'
+        payload = {'_client_version': '9.1.0.0',
+        payload = {'_client_version': '9.1.0.0',
+        payload = {'_client_version': '9.1.0.0',
commit ad32fa9232c6b25a9de5dc23312b30ead93e6d3d
Date:   Fri Mar 11 23:43:10 2022 +0800
commit 9437c659e7098b9c76341e442121e3621ceb55ad
Date:   Fri Mar 4 15:34:09 2022 +0800
commit f1e8f171bd231135aad29de06fc98e9f97020a06
Date:   Wed Mar 2 10:31:19 2022 +0800
commit c9fb7979947f3379f3e3948d197ea3bd3bdd429f
Date:   Mon Feb 28 15:03:53 2022 +0800
commit ee4be02b2f53b82bfda71cb3f6d65e0222834654
Date:   Mon Feb 28 12:47:50 2022 +0800
commit 0c4ea8710e13235a8052a9bad4b921d297db8922
Date:   Fri Feb 25 20:46:54 2022 +0800
commit d1f2f832e5d5278d3e92c02bb00f3739b01934cb
Date:   Fri Feb 25 16:16:15 2022 +0800
commit cdbf0e4662cc92ca09e0d543e784cebc2a181acf
Date:   Thu Feb 24 19:52:50 2022 +0800
commit 45db46ada57e1220690e27483322d77ed81d1bba
Date:   Thu Feb 24 18:42:01 2022 +0800
commit 00f9cba49edfb1c61a4f21c2b686ed4454a83204
Date:   Thu Feb 24 17:03:27 2022 +0800
commit 18a961d8330bbf099e5c2b388957012c9ad6cf0d
Date:   Thu Feb 24 00:27:39 2022 +0800
commit e2d4829cf98186b0d54d71d7ed2c68dab11a8bd3
Date:   Wed Feb 23 10:33:34 2022 +0800
+        payload = {'_client_version': '12.20.0.3',
+        payload = {'_client_version': '12.20.0.3',
commit ae3ea4244ae1b33cb9bec3eb938dfecbebf1c674
Date:   Mon Feb 21 17:31:40 2022 +0800
commit 7066365d3184b683afb70cbe05b96732a4e51072
Date:   Mon Feb 14 19:46:04 2022 +0800
commit edc9e1418a293dd5c00949a84f958d363946212e
Date:   Thu Feb 10 13:05:10 2022 +0800
commit eb0fa33b661d1918cf2fe1acc49be420f874c2d7
Date:   Tue Feb 8 14:15:04 2022 +0800
+        payload = {'_client_version': '12.19.1.0',
commit 41cb8cd25980085bb67e4848c2c2eaa15392e015
Date:   Wed Feb 2 11:28:05 2022 +0800
commit 271bb8a278f0c89bade316ce686f45e1d00580b7
Date:   Wed Feb 2 00:52:16 2022 +0800
commit 14fa06735f673f3fb3dbfbd79a1eb5282169ae77
Date:   Tue Feb 1 12:53:08 2022 +0800
+        payload = {'_client_version': '12.19.1.0',
+                       '_client_version': '12.19.1.0',  # 删除该字段可直接获取前200个吧,但无法翻页
+                       'page_no': pn  # 加入client_version后,使用该字段控制页数
commit 5b4fe134d74e9354ca2b9f4eef061d07dbb6a581
Date:   Sun Jan 30 16:52:15 2022 +0800
commit 7884a37b16553bbddad948317da9911de8fe4dca
Date:   Sun Jan 30 15:06:54 2022 +0800
commit c3c8fa73b489c50bfb51ee73284de38effdfe096
Date:   Sat Jan 29 20:23:49 2022 +0800
commit e73779c9a09407ff2f02ffb4d5bdac216e104c82
Date:   Sat Jan 29 19:55:24 2022 +0800
commit c956f81250e51d6714fbc978be56a92720793297
Date:   Sat Jan 29 11:46:21 2022 +0800
commit 57dc3e137c2cf5a774368a991a192797614d2d87
Date:   Sat Jan 29 11:36:06 2022 +0800
commit 09b88e5da8cfc7a8efa4055926c8964d27eeaba0
Date:   Sat Jan 29 11:23:31 2022 +0800
+                   '_client_version': '12.19.1.0',  # 删除该字段会导致post_list和dynamic_list为空
+                   # '_client_version':'12.19.1.0',  # 添加该字段可以查看共同关注,删除该字段以提升解析性能
commit 5c8fb72481dc9fe28db4cae2ddfca9498a0d845d
Date:   Sat Jan 29 11:09:28 2022 +0800
+        payload = {'_client_version': '7.9.2',  # 因新版app使用file传参,改动此处的版本号可能导致列表为空!
+        payload = {'_client_version': '7.9.2',  # 因新版app使用file传参,改动此处的版本号可能导致列表为空!
+        payload = {'_client_version': '7.9.2',  # 因新版app使用file传参,改动此处的版本号可能导致列表为空!
+                   '_client_version': '12.5.6.0',  # 删除该字段会导致post_list和dynamic_list为空
+                   # '_client_version':'12.5.6.0',  # 添加该字段可以查看共同关注,删除该字段以提升解析性能
+                   # 'page_no': 1  # 加入client_version后会限制每页数量,使用该字段控制页数
commit fe1e132c51d4c96aaa025c5cbe71b2834314456b
Date:   Fri Jan 28 20:34:01 2022 +0800
commit 3e837eda3a838249b48c652bf56cd4a1b5f9ab20
Date:   Fri Jan 28 20:30:52 2022 +0800
+                   '_client_version': '7.9.2',
commit 3a7f25e481e31e80e2f7d0e02a73cf0508174e62
Date:   Fri Jan 28 17:37:08 2022 +0800
commit 63191f8bd66756bb592c34af7198d5120a46cc5e
Date:   Fri Jan 28 16:22:01 2022 +0800
commit c794578767968c38d8de6983eccaf2a1f97c123b
Date:   Fri Jan 28 13:30:04 2022 +0800
commit 30b92193d3c52af9a8dc88e8148bd1dabf638e3a
Date:   Thu Jan 27 23:31:57 2022 +0800
commit 2cc0c047e211e81a0eccaa02077169571a4bd6fa
Date:   Thu Jan 27 22:27:53 2022 +0800
commit b7b034113013ff27ba3669002608dfbf244b121e
Date:   Sat Oct 9 11:25:41 2021 +0800
commit c11d0e27809b107375fdfba37ef9ce58058d2957
Date:   Sat Sep 18 09:12:33 2021 +0800
commit 0db113ad947ac88defe8a095e89324081045f513
Date:   Fri Sep 17 21:34:21 2021 +0800
+        payload = {'_client_version': '7.9.2',
+        payload = {'_client_version': '7.9.2',
+        payload = {'_client_version': '7.9.2',
+                       '_client_version': '7.9.2',
+                   '_client_version': '7.9.2',
+                   '_client_version': '7.9.2',
+                   '_client_version': '7.9.2',
+                   '_client_version': '7.9.2',
commit 18c532f03e2f60625649c78f96a49c221cf70d00
Date:   Fri Sep 17 11:53:01 2021 +0800
commit 211313818079febd73c0067fcbfbf1061431feef
Date:   Fri Sep 17 09:23:40 2021 +0800
+        payload = {'_client_version': '12.10.1.0',
+        payload = {'_client_version': '12.10.1.0',
+        payload = {'_client_version': '12.10.1.0',
+                       '_client_version': '12.10.1.0',
+                   '_client_version': '12.10.1.0',
+                   '_client_version': '12.10.1.0',
+                   '_client_version': '12.10.1.0',
+                   '_client_version': '12.10.1.0',
commit 75d8c843b7d07fff9b2e49e71e9b1039246755ed
Date:   Thu Sep 16 19:31:50 2021 +0800
commit 20b7c2962165490986625bfb4269415d5f316355
Date:   Thu Sep 16 00:22:12 2021 +0800
commit a40156f2c295d7a0aa1af95aadd8940244e8fab6
Date:   Wed Sep 15 23:46:44 2021 +0800
commit 3f2bedc902c5f6e28e66a4b48ddd1f69e3258df7
Date:   Fri Sep 3 23:17:00 2021 +0800
commit bf0118dacfc55e92b2c5e0926107cc67044f2f48
Date:   Fri Sep 3 23:01:31 2021 +0800
commit 91020f7ceb3f8504bbf6afc7061e9b1bfc5c4ff8
Date:   Thu Aug 19 14:15:43 2021 +0800
+        payload = {'_client_version': '12.8.2.1',
+        payload = {'_client_version': '12.8.2.1',
+        payload = {'_client_version': '12.8.2.1',
+                       '_client_version': '12.8.2.1',
+                   '_client_version': '12.8.2.1',
+                   '_client_version': '12.8.2.1',
+                   '_client_version': '12.8.2.1',
+                   '_client_version': '12.8.2.1',
commit ffd1ef8cebf234a68b5455b5d1ccb328ba0b6942
Date:   Mon Aug 16 22:44:43 2021 +0800
commit 8454e41f98480eebae3a6001dd7374521a189a20
Date:   Sat Aug 14 20:35:22 2021 +0800
+        payload = {'_client_version': '12.7.5.3',
commit 93a0548823bcd41e36e1bc6edee654caf326493b
Date:   Sun Jul 25 21:39:43 2021 +0800
+                   '_client_version': '12.7.5.3',
+        payload = {'_client_version': '12.7.5.3',
+        payload = {'_client_version': '12.7.5.3',
+                       '_client_version': '12.7.5.3',
+                   '_client_version': '12.7.5.3',
+                   '_client_version': '12.7.5.3',
+                   '_client_version': '12.7.5.3',
+                   '_client_version': '12.7.5.3',
commit 54d5b0b0c1702c76023c69a890c14fd87a82c895
Date:   Fri Jul 23 20:33:27 2021 +0800
commit 4ec658936a18f1718ff05ee921f94f72faf54de1
Date:   Tue Jul 20 15:25:25 2021 +0800
commit 6fa4c736d1155687c823c4c9d202a7baeef69007
Date:   Sun Jul 11 09:37:08 2021 +0800
commit 46f6fa70521a7217a24d39806c4e36e378d584ed
Date:   Tue Jul 6 09:58:18 2021 +0800
commit c26ac37c683875bf775760796883530a7ffc2577
Date:   Sun Jul 4 11:51:16 2021 +0800
+                   '_client_version': '12.6.3.0',
+        payload = {'_client_version': '12.6.3.0',
+        payload = {'_client_version': '12.6.3.0',
+                       '_client_version': '12.6.3.0',
+                   '_client_version': '12.6.3.0',
+                   '_client_version': '12.6.3.0',
+                   '_client_version': '12.6.3.0',
commit 08e32aa370159b171ac439023ff27cadeb1c2598
Date:   Thu Jun 3 21:10:11 2021 +0800
commit ce68db8a337505597690d4b35508e8f548e8e508
Date:   Wed Jun 2 10:23:42 2021 +0800
commit e121ca04c6e1555503821784002110e4fe937c93
Date:   Wed May 26 12:14:53 2021 +0800
commit 1f42ed4f983fe83a21d650bcea526d04acefcd70
Date:   Thu May 6 09:57:09 2021 +0800
commit ea25b27628d4c1f38c0112f94e026dd55966c1d4
Date:   Wed May 5 20:12:27 2021 +0800
+                   '_client_version': '12.4.8.23',
+                   '_client_version': '12.4.8.23',
+                   '_client_version': '12.4.8.23',
+                   '_client_version': '12.4.8.23',
+                       '_client_version': '12.4.8.23',
+                   '_client_version': '12.4.8.23',
+                   '_client_version': '12.4.8.23',
+                   '_client_version': '12.4.8.23',

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.