• 某吧自动签到脚本

    发布时间:2025-12-18 09:58:04
    作者:ynkulusi
  • 保持2025年有一个更新吧(◔‿◔) 
    #!/usr/bin/env python
    # coding:UTF-8
    # -*- coding:utf-8 -*-
    
    import time,sys,re,math,requests,hashlib,json,logging
    from urllib import request, parse
    from urllib.request import urlopen
    
    #获取脚本运行目录
    script_path=sys.path[0]
    
    #日志文件生成信息配置
    logger = logging.getLogger("tiebaSign")
    logger.setLevel(level = logging.DEBUG)
    handler = logging.FileHandler(script_path+'/tiebaSign.log')
    handler.setLevel(logging.DEBUG)
    #logfmt = '[%(asctime)s] %(filename)s %(name)s [line:%(lineno)d] %(levelname)s: %(message)s'
    log_fmt = '[%(asctime)s] %(levelname)s: %(message)s'
    date_fmt='%Y-%m-%d %a %H:%M:%S'
    formatter = logging.Formatter(fmt=log_fmt,datefmt=date_fmt)
    handler.setFormatter(formatter)
    
    logger.addHandler(handler)
    
    logger.info('#'*30+'[ '+time.strftime('%Y-%m-%d', time.localtime(time.time()))+' ]'+'#'*30)
    
    class tieba:
        # bduss,浏览器登录后获取自己账号的认证信息
        bduss ='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
        stoken = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
        url = 'https://tieba.baidu.com/mg/o/getForumHome'
        headers = {'Cookie': 'BDUSS=' + bduss + '; STOKEN=' + stoken}
        
        lists = []
    
        def __init__(self):
            self.get_tbs()
            self.get_list()
    
        def chlis(self, kw):
            for i in range(len(self.lists)):
                if self.lists[i]['name'] == kw:
                    self.lists[i]['is_sign'] = 1
     
        def get_tbs(self):
            try:
                self.tbs = requests.get('https://tieba.baidu.com/dc/common/tbs', headers=self.headers).json()['tbs']
            except Exception as err:
                print(f'获取tbs异常: [ {err} ], 重新获取')
                logger.error(f'获取tbs异常: [ {err} ], 重新获取')
                self.get_tbs()
            
    
        def get_list(self, counter=0):
            #原有代码获取关注贴吧数据为空
            r = requests.get(self.url, headers=self.headers)
    
            # 打印返回的JSON数据
            if r.status_code == 200:
                data = r.json()
                forumList = []
                for forum in data['data']['like_forum']['list']:
                    forumList.append(forum['forum_name'])
            else:
                logger.error(f'获取贴吧列表信息失败!')
                exit(0)
    
            if len(forumList) == 0:
                counter += 1
                if counter < 3:
                    logger.error(f'第{counter}次获取关注贴吧信息失败,3秒后重新获取!')
                    time.sleep(3)
                    get_list(counter)
                else:
                    logger.error(f'第{counter}次获取关注贴吧信息失败,退出签到!')
                    exit(0)
            for i in forumList:
                self.lists.append({'name': i, 'is_sign': 0})
    
        def sign(self, kw):
            try:
                sign_data = {'ie': 'utf-8', 'kw': kw, 'tbs': self.tbs}
                info = requests.post('https://tieba.baidu.com/sign/add', data=sign_data, headers=self.headers).json()
            except Exception as err:
                print(f'贴吧[ {kw} ]签到操作异常: {err}')
                logger.error(f'贴吧[ {kw} ]签到操作异常: {err}')
                return 1
            if info['no'] == 0:
                self.chlis(kw)   #更改贴吧签到标志is_sign的值,当while下次循环的时候跳过签到成功的吧.
                print(Fore.GREEN+'贴吧[ '+kw+' ]签到成功!')
                logger.info('贴吧[ '+kw+' ]签到成功!')
                return 0
            elif re.search('已经签过', info['error']):
                self.chlis(kw)
                logger.error('贴吧[ '+kw+' ]已经签过到了!')
                return 0
            else:
                logger.error('贴吧[ '+kw+' ]签到失败!')
                return 1
    
    
    def main():
        tb = tieba()
        flag = 1
        print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time())))
        print('********************')
        loop_sign = 0
        while flag:
            print(f'进行第 {loop_sign+1} 轮签到...')
            logger.info(f'进行第 {loop_sign+1} 轮签到...')
            #新增最多循环签到10轮
            if loop_sign >= 10:
                break
            flag = sum([tb.sign(k['name']) for k in tb.lists if not k['is_sign']])
            loop_sign += 1
    
        print('********************\nAll Finished!')
        logger.info('*'*30+' All Finished! '+'*'*30)
    
    
    if __name__ == '__main__':
        start_time = time.time()
        main()
        end_time = time.time()
        time_diff = end_time - start_time
        run_hour = str(int(time_diff//3600))
        run_minute = str(int(time_diff%3600//60))
        run_second = str(round(time_diff%3600%60,6))
        run_time = run_hour+'时'+run_minute+'分'+run_second+'秒'
        print("本次执行耗时: "+run_time)
        logger.info("本次执行耗时: "+run_time)
    
  • 分类:python
    标签: python
    评论数:0 阅读数:22