某吧自动签到脚本
发布时间: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
评论数:0
阅读数:22