logo NodeSeekbeta

百度贴吧自动签到脚本

如何使用:

  1. 手动安装 requests 和 dotenv 库
  2. 在脚本路径下创建名为 .env 的文件
  3. 在贴吧 web 端抓取你的 BDUSS 并保持到 .env 文件里,格式如下(记得带分号):
BDUSS='V-TICJXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX;'
  1. 用 crontab 或者其他定时任务管理器运行脚本即可

额外说明:百度的 Cookie 有效期很长,而且贴吧的签到风控很弱,我在 1o 小鸡上跑了2年一切正常


下面是脚本内容:

import requests
import time
import random
import hashlib
import os
import dotenv
from functools import wraps

dotenv.load_dotenv()

def retry(max_retries=3, delay=2):
    def decorator(func):
        @wraps(func)
        def wrapper(*args, **kwargs):
            for attempt in range(max_retries):
                try:
                    return func(*args, **kwargs)
                except requests.RequestException as e:
                    if attempt == max_retries - 1:
                        print(f"[-] {kwargs.get('forum_name', '未知贴吧')} 网络请求失败: {e}")
                        return False
                    
                    wait_time = delay + random.uniform(0, 1)
                    print(f"[-] 网络错误 ({e}),{wait_time:.1f}秒后重试 ({attempt + 1}/{max_retries})...")
                    time.sleep(wait_time)
            return False
        return wrapper
    return decorator

class TiebaSigner:
    def __init__(self, bduss):
        self.session = requests.Session()
        self.session.cookies.update({'BDUSS': bduss})
        self.headers = {
            'User-Agent': 'Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Mobile Safari/537.36',
            'Referer': 'https://tieba.baidu.com/',
            'Connection': 'keep-alive'
        }
        self.tbs = None

    def _get_sign(self, data):
        SIGN_KEY = "tiebaclient!!!"
        s = "".join([f"{k}={data[k]}" for k in sorted(data.keys())])
        return hashlib.md5((s + SIGN_KEY).encode('utf-8')).hexdigest().upper()

    def init_tbs(self):
        try:
            url = "http://tieba.baidu.com/dc/common/tbs"
            res = self.session.get(url, headers=self.headers, timeout=10).json()
            if res.get('is_login') == 1:
                self.tbs = res['tbs']
                return True
            else:
                print("[-] 登录失败: BDUSS 可能已失效")
                return False
        except Exception as e:
            print(f"[-] 初始化 TBS 失败: {e}")
            return False

    def get_forums(self):
        print("[*] 正在获取关注列表...")
        try:
            url = 'https://tieba.baidu.com/mo/q/newmoindex'
            res = self.session.get(url, headers=self.headers, timeout=10).json()
            
            if res.get('error') != 'success':
                print(f"[-] 获取列表失败: {res.get('error')}")
                return []

            all_forums = res['data']['like_forum']
            todo_forums = [f['forum_name'] for f in all_forums if f['is_sign'] == 0]
            
            print(f"[+] 关注总数: {len(all_forums)} | 待签到: {len(todo_forums)}")
            return todo_forums
            
        except Exception as e:
            print(f"[-] 获取列表异常: {e}")
            return []

    @retry(max_retries=3, delay=3)
    def sign_one(self, forum_name):
        api_url = "https://c.tieba.baidu.com/c/c/forum/sign"
        
        data = {
            'kw': forum_name,
            'tbs': self.tbs
        }
        data['sign'] = self._get_sign(data)

        app_headers = {
            'User-Agent': 'bdtb for Android 12.51.1.0',
            'Content-Type': 'application/x-www-form-urlencoded',
            'Host': 'c.tieba.baidu.com'
        }
        
        res = self.session.post(api_url, data=data, headers=app_headers, timeout=10).json()

        if res.get('error_code') == '0':
            user_info = res.get('user_info', {})
            exp = user_info.get('sign_bonus_point')
            print(f"[√] {forum_name:<10} 签到成功 (经验 +{exp})")
            return True
        else:
            err_msg = res.get('error_msg', '未知错误')
            print(f"[x] {forum_name:<10} 签到失败: {err_msg}")
            return False

    def run(self):
        if not self.init_tbs():
            return

        tasks = self.get_forums()
        if not tasks:
            print("[=] 所有贴吧已签到。")
            return

        print("-" * 40)
        success_count = 0
        
        for i, forum in enumerate(tasks):
            if self.sign_one(forum_name=forum):
                success_count += 1

            if i < len(tasks) - 1:
                time.sleep(random.uniform(2, 4))
                
        print("-" * 40)
        print(f"[完成] 成功签到: {success_count}/{len(tasks)}")

if __name__ == '__main__':
    bduss = os.environ.get("BDUSS")
    
    if not bduss:
        print("请设置 BDUSS 环境变量。")
    else:
        signer = TiebaSigner(bduss)
        signer.run()
12
    1. 我没用过百度贴吧
    2. 感觉这个签到脚本还是没啥必要
  • 我就部署了一个Dcoker版本的
    但现在没怎么刷贴吧了

  • 华为云云函数23年跑到现在,cookie一直可用

  • 早不玩贴吧“了,来一个ns的 yct008

  • 来个NS的吧。

  • 用贴吧的都是神人了

  • 想到我12年时候搞的自动签到,现在还有人玩贴吧

  • 好久没有玩贴吧了,不过当时手机上有个软件,可以登录贴吧账号、一键自动签到,签到可以在后台运行,就是速度有点慢

  • 今天20年贴吧号被永封,不玩啦

12

你好啊,陌生人!

我的朋友,看起来你是新来的,如果想参与到讨论中,点击下面的按钮!

📈用户数目📈

目前论坛共有60095位seeker

🎉欢迎新用户🎉