mirror of
https://github.com/XiaoGe-LiBai/yangmao.git
synced 2025-12-24 02:04:55 +08:00
685 lines
30 KiB
Python
685 lines
30 KiB
Python
# 软件:建行生活
|
||
# 活动信息: 奋斗季cc豆 功能:每日营收,签到 浏览任务,答题,抽奖,专区任务
|
||
# 先开抓包,先开抓包,抓的是微信端,搜wParam,复制wParam值,没抓到等两小时在抓
|
||
# 专区任务,专区抓fission-events.ccbft.com里面含有_ck_bbq_224,全部cookie,没抓到所有专区进一下
|
||
# 格式 ccdck = wParam参数值#cookie值
|
||
# 定时:一天两次
|
||
# 注: 此脚本仅限个人使用,不得传播
|
||
# 作者: 木兮
|
||
import os
|
||
import random
|
||
import re
|
||
import time
|
||
from datetime import datetime
|
||
|
||
import requests
|
||
|
||
app_ua = 'Mozilla/5.0 (Linux; Android 12; 22081212C Build/SKQ1.220303.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/112.0.5615.135 Mobile Safari/537.36/CloudMercWebView' # 用app的ua,不填也能跑
|
||
|
||
user_cookie = os.getenv("ccdck")
|
||
doll_flag = 1 # 1开启抓娃娃,0关闭
|
||
basket_flag = 1 # 1开启投篮球,0关闭
|
||
|
||
doll_draw = 9 # 抓娃娃次数,为几一天只抽几次,总数小于10
|
||
basket_draw = 4 # 投篮球次数,为几一天只玩几次,总数小于5
|
||
debug = 0 # 开启调式
|
||
|
||
|
||
class CCD:
|
||
user_region = None
|
||
zhc_token = None
|
||
wx_uuid = None
|
||
base_header = {
|
||
'Host': 'm3.dmsp.ccb.com',
|
||
'accept': 'application/json, text/plain, */*',
|
||
'user-agent': app_ua,
|
||
'origin': 'https://m3.dmsp.ccb.com',
|
||
'x-requested-with': 'com.tencent.mm',
|
||
'accept-language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',
|
||
'content-type': 'application/json'
|
||
}
|
||
token_headers = {
|
||
'Host': 'event.ccbft.com',
|
||
'accept': 'application/json, text/plain, */*',
|
||
'user-agent': app_ua,
|
||
'origin': 'https://event.ccbft.com',
|
||
'x-requested-with': 'com.tencent.mm',
|
||
'accept-language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',
|
||
'content-type': 'application/json'
|
||
}
|
||
|
||
def __init__(self, ccb_cookie):
|
||
self.w_param = ccb_cookie.split("#")[0]
|
||
self.zq_cookie = ccb_cookie.split("#")[1]
|
||
self.bus_headers = {
|
||
'Host': 'fission-events.ccbft.com',
|
||
'pragma': 'no-cache',
|
||
'cache-control': 'no-cache',
|
||
'accept': 'application/json, text/plain, */*',
|
||
'x-csrf-token': None,
|
||
'x-requested-with': 'XMLHttpRequest',
|
||
'authorization': None,
|
||
'user-agent': app_ua,
|
||
'origin': 'https://fission-events.ccbft.com',
|
||
'sec-fetch-site': 'same-origin',
|
||
'sec-fetch-mode': 'cors',
|
||
'sec-fetch-dest': 'empty',
|
||
'referer': 'https://fission-events.ccbft.com/a/224/kmenz5Zd/game',
|
||
'accept-language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',
|
||
'Cookie': self.zq_cookie,
|
||
'content-type': 'application/json'
|
||
}
|
||
|
||
def run(self):
|
||
self.get_token()
|
||
self.region()
|
||
self.user_info()
|
||
self.sign_in()
|
||
self.getlist()
|
||
self.answer_state()
|
||
print('\n======== 专区任务 ========')
|
||
time.sleep(random.randint(3, 5))
|
||
self.get_csrftoken()
|
||
self.get_user_ccd()
|
||
|
||
# 随机延迟默认1-1.5
|
||
def sleep(self, min_delay=1, max_delay=1.5):
|
||
delay = random.uniform(min_delay, max_delay)
|
||
time.sleep(delay)
|
||
|
||
def send_request(self, url, headers, data=None, method='GET', cookies=None):
|
||
with requests.Session() as session:
|
||
session.headers.update(headers)
|
||
if cookies is not None:
|
||
session.cookies.update(cookies)
|
||
|
||
try:
|
||
if method == 'GET':
|
||
response = session.get(url, timeout = 3)
|
||
elif method == 'POST':
|
||
response = session.post(url, json = data, timeout = 3)
|
||
else:
|
||
raise ValueError('Invalid HTTP method.')
|
||
|
||
response.raise_for_status()
|
||
if debug:
|
||
print(response.json())
|
||
return response.json()
|
||
|
||
except requests.Timeout as e:
|
||
print("请求超时:", str(e))
|
||
|
||
except requests.RequestException as e:
|
||
print("请求错误:", str(e))
|
||
|
||
except Exception as e:
|
||
print("其他错误:", str(e))
|
||
|
||
# 获取token
|
||
def get_token(self):
|
||
try:
|
||
url = 'https://event.ccbft.com/api/flow/nf/shortLink/redirect/ccb_gjb?shareMDID=ZHCMD_8460172f-48b2-4612-a069-f04611760445&shareDepth=1&CCB_Chnl=6000199'
|
||
payload = {
|
||
"appId": "wxd513efdbf26b5744",
|
||
"shortId": "polFsWD2jPnjhOx9ruVBcA",
|
||
"archId": "ccb_gjb",
|
||
"wParam": self.w_param,
|
||
"channelId": "wx", "ifWxFirst": True
|
||
}
|
||
|
||
return_data = self.send_request(url, headers = self.token_headers, data = payload, method = 'POST')
|
||
if return_data['code'] != 200:
|
||
print(return_data['message'])
|
||
raise ValueError('刷新token,请检查变量格式是否正确')
|
||
redirect_url = return_data['data'].get('redirectUrl')
|
||
self.wx_uuid = return_data['data'].get('wxUUID')
|
||
token = self.extract_token(redirect_url)
|
||
if token:
|
||
self.zhc_token = token
|
||
self.auth_login(token)
|
||
else:
|
||
raise ValueError('刷新token失败')
|
||
|
||
except ValueError as e:
|
||
print(e)
|
||
|
||
def extract_token(self, redirect_url):
|
||
start_token_index = redirect_url.find("__dmsp_token=") + len("__dmsp_token=")
|
||
end_token_index = redirect_url.find("&", start_token_index)
|
||
|
||
token = None
|
||
if start_token_index != -1 and end_token_index != -1:
|
||
token = redirect_url[start_token_index:end_token_index]
|
||
return token
|
||
|
||
# 登录
|
||
def auth_login(self, token):
|
||
url = 'https://m3.dmsp.ccb.com/api/businessCenter/auth/login'
|
||
payload = {"token": token, "channelId": "wx"}
|
||
return_data = self.send_request(url, headers = self.base_header, data = payload, method = 'POST')
|
||
self.sleep()
|
||
if return_data['code'] != 200:
|
||
print(return_data['message'])
|
||
return
|
||
|
||
# 获取用户地区代码
|
||
def region(self):
|
||
url = f'https://m3.dmsp.ccb.com/api/businessCenter/gis/getAddress?zhc_token={self.zhc_token}'
|
||
payload = {"lgt": 116.495434, "ltt": 40.3976539, "flag": 1}
|
||
return_data = self.send_request(url, headers = self.base_header, data = payload, method = 'POST')
|
||
self.sleep()
|
||
if return_data['code'] != 200:
|
||
print(return_data['message'])
|
||
return
|
||
self.user_region = return_data['data'].get('code')
|
||
|
||
# 查询用户等级
|
||
def user_info(self):
|
||
url = f'https://m3.dmsp.ccb.com/api/businessCenter/mainVenue/getUserState?zhc_token={self.zhc_token}'
|
||
return_data = self.send_request(url, headers = self.base_header, method = 'POST')
|
||
|
||
if return_data['code'] != 200:
|
||
print(return_data['message'])
|
||
return
|
||
current_level = return_data['data'].get('currentLevel')
|
||
need_exp = return_data['data'].get('needGrowthExp') - return_data['data'].get('currentLevelGrowthExp')
|
||
level = return_data['data'].get('currentProtectLevel')
|
||
reward_id = return_data['data'].get('zhcRewardInfo').get('id')
|
||
reward_type = return_data['data'].get('zhcRewardInfo').get('rewardType')
|
||
reward_value = return_data['data'].get('zhcRewardInfo').get('rewardValue')
|
||
print(f"当前用户等级{current_level}级")
|
||
print(f"距下一级还需{need_exp}成长值")
|
||
self.income(level, reward_id, reward_type, reward_value)
|
||
|
||
# 每日营收
|
||
def income(self, level, reward_id, reward_type, reward_value):
|
||
url = f'https://m3.dmsp.ccb.com/api/businessCenter/mainVenue/receiveLevelReward?zhc_token={self.zhc_token}'
|
||
payload = {"level": level, "rewardId": reward_id, "levelRewardType": reward_type}
|
||
return_data = self.send_request(url, headers = self.base_header, data = payload, method = 'POST')
|
||
self.sleep()
|
||
if return_data['code'] != 200:
|
||
print(return_data['message'])
|
||
return
|
||
print(f"今日营收: {reward_value}cc豆")
|
||
|
||
# 签到
|
||
def sign_in(self):
|
||
signin_url = f'https://m3.dmsp.ccb.com/api/businessCenter/taskCenter/signin?zhc_token={self.zhc_token}'
|
||
signin_payload = {"taskId": 96}
|
||
return_data = self.send_request(url = signin_url, headers = self.base_header, data = signin_payload,
|
||
method = 'POST')
|
||
self.sleep()
|
||
if return_data['code'] != 200:
|
||
print(return_data['message'])
|
||
return
|
||
print(return_data['message'])
|
||
|
||
# 获取浏览任务列表
|
||
def getlist(self):
|
||
list_url = f'https://m3.dmsp.ccb.com/api/businessCenter/taskCenter/getTaskList?zhc_token={self.zhc_token}'
|
||
payload = {"publishChannels": "03", "regionId": self.user_region} # 440300
|
||
|
||
return_data = self.send_request(url = list_url, headers = self.base_header, data = payload, method = 'POST')
|
||
self.sleep()
|
||
|
||
if return_data['code'] != 200:
|
||
print(return_data['message'])
|
||
return
|
||
|
||
task_list = return_data['data'].get('浏览任务')
|
||
|
||
for value in task_list:
|
||
complete_status = value['taskDetail'].get('completeStatus')
|
||
|
||
if complete_status == '02':
|
||
print(f"--已完成: {value['taskName']}")
|
||
else:
|
||
task_id = value['id']
|
||
task_name = value['taskName']
|
||
print(f'---去完成: {task_name}')
|
||
self.execute_task(task_id)
|
||
|
||
def execute_task(self, task_id):
|
||
browse_url = f'https://m3.dmsp.ccb.com/api/businessCenter/taskCenter/browseTask?zhc_token={self.zhc_token}'
|
||
receive_url = f'https://m3.dmsp.ccb.com/api/businessCenter/taskCenter/receiveReward?zhc_token={self.zhc_token}'
|
||
payload = {"taskId": task_id, "browseSec": 1}
|
||
|
||
browse_data = self.send_request(browse_url, headers = self.base_header, data = payload, method = 'POST')
|
||
self.sleep()
|
||
|
||
if browse_data['code'] != 200:
|
||
print(browse_data['message'])
|
||
return
|
||
print(browse_data['message'])
|
||
|
||
receive_data = self.send_request(receive_url, headers = self.base_header, data = payload, method = 'POST')
|
||
self.sleep()
|
||
if receive_data['code'] != 200:
|
||
print(receive_data['message'])
|
||
return
|
||
print(receive_data['message'])
|
||
|
||
# 获取答题state
|
||
def answer_state(self):
|
||
url = f'https://m3.dmsp.ccb.com/api/businessCenter/zhcUserDayAnswer/getAnswerStatus?zhc_token={self.zhc_token}'
|
||
return_data = self.send_request(url, headers = self.base_header)
|
||
if return_data['code'] == 200:
|
||
if return_data['data'].get('answerState') == 'Y':
|
||
return print(return_data['message'])
|
||
else:
|
||
# 获取今日题目
|
||
print('获取今日题目')
|
||
self.get_question()
|
||
else:
|
||
return print(return_data['message'])
|
||
|
||
# 获取题目
|
||
def get_question(self):
|
||
url = f'https://m3.dmsp.ccb.com/api/businessCenter/zhcUserDayAnswer/queryQuestionToday?zhc_token={self.zhc_token}'
|
||
return_data = self.send_request(url, headers = self.base_header)
|
||
self.sleep()
|
||
if return_data['code'] != 200:
|
||
print(return_data['message'])
|
||
return
|
||
question_id = return_data['data'].get('questionId')
|
||
remark = return_data['data'].get('remark')
|
||
answer_list = return_data['data'].get('answerList')
|
||
if remark:
|
||
# 匹配答案
|
||
print('开始匹配正确答案')
|
||
pattern = r"[,。?!“”、]"
|
||
remark_cleaned = re.sub(pattern, "", remark)
|
||
|
||
max_match_count = 0
|
||
right_answer_id = None
|
||
for answer in answer_list:
|
||
answer_id = answer["id"]
|
||
answer_result = answer["answerResult"]
|
||
answer_cleaned = re.sub(pattern, "", answer_result)
|
||
|
||
match_count = 0
|
||
for word in answer_cleaned:
|
||
if word in remark_cleaned:
|
||
match_count += 1
|
||
remark_cleaned = remark_cleaned.replace(word, "", 1)
|
||
|
||
if match_count > max_match_count:
|
||
max_match_count = match_count
|
||
right_answer_id = answer_id
|
||
print("匹配成功,开始答题")
|
||
self.answer(question_id, right_answer_id)
|
||
else:
|
||
print('暂无提示随机答题')
|
||
right_answer_id = random.choice(answer_list)['id']
|
||
self.answer(question_id, right_answer_id)
|
||
|
||
# 答题
|
||
def answer(self, question_id, answer_ids):
|
||
url = f'https://m3.dmsp.ccb.com/api/businessCenter/zhcUserDayAnswer/userAnswerQuestion?zhc_token={self.zhc_token}'
|
||
payload = {"questionId": question_id, "answerIds": answer_ids}
|
||
return_data = self.send_request(url, headers = self.base_header, data = payload, method = 'POST')
|
||
self.sleep()
|
||
if return_data['code'] != 200:
|
||
print(return_data['message'])
|
||
return
|
||
print(return_data['message'])
|
||
|
||
# ---------下面是精彩专区任务--------
|
||
def get_csrftoken(self):
|
||
url1 = 'https://event.ccbft.com/api/flow/nf/shortLink/redirect/ccb_gjb?CCB_Chnl=6000110'
|
||
url2 = 'https://fission-events.ccbft.com/a/224/kmenz5Zd?CCB_Chnl=6000110'
|
||
payload1 = '{{"appId":"wxd513efdbf26b5744","shortId":"jd9H3uCkzHaQBn8aeq5NWQ","archId":"ccb_gjb","channelId":"wx","ifWxFirst":false,"wxUUID":"{}"}}'.format(
|
||
self.wx_uuid)
|
||
|
||
headers = {
|
||
'Host': 'fission-events.ccbft.com',
|
||
'pragma': 'no-cache',
|
||
'cache-control': 'no-cache',
|
||
'upgrade-insecure-requests': '1',
|
||
'user-agent': app_ua,
|
||
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
|
||
'x-requested-with': 'com.ccb.longjiLife',
|
||
'sec-fetch-site': 'same-site',
|
||
'sec-fetch-mode': 'navigate',
|
||
'sec-fetch-dest': 'document',
|
||
'referer': 'https://event.ccbft.com/',
|
||
'accept-encoding': 'gzip, deflate',
|
||
'accept-language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',
|
||
'cookie': self.zq_cookie
|
||
}
|
||
return_data = requests.post(url1, headers = self.token_headers, data = payload1).json()
|
||
if return_data['code'] != 200:
|
||
return print(return_data['message'])
|
||
|
||
redirect_url = return_data['data'].get('redirectUrl')
|
||
requests.get(url = redirect_url, headers = headers)
|
||
|
||
try:
|
||
res = requests.get(url = url2, headers = headers)
|
||
data = res.text
|
||
csrf_token, authorization = self.extract_csrf_and_auth(data)
|
||
|
||
if csrf_token and authorization:
|
||
self.bus_headers['x-csrf-token'] = csrf_token
|
||
self.bus_headers['authorization'] = f'Bearer {authorization}'
|
||
self.sleep()
|
||
|
||
print('\n----代发专区----')
|
||
# self.game_id()
|
||
print('\n----养老专区----')
|
||
self.turn()
|
||
print('\n----跨境专区----')
|
||
self.border_draw()
|
||
print('\n----商户专区----')
|
||
self.shoplist()
|
||
print('\n----消保专区----\n---登山游戏----')
|
||
self.fire()
|
||
print('\n---抓娃娃游戏----')
|
||
self.get_doll()
|
||
print('\n---投篮球游戏----')
|
||
self.do_basket()
|
||
else:
|
||
print('CSRF token or Authorization not found.')
|
||
except requests.RequestException as e:
|
||
print(f"请求异常: {e}")
|
||
|
||
def extract_csrf_and_auth(self, data):
|
||
csrf_token_pattern = r'<meta\s+name=csrf-token\s+content="([^"]+)">'
|
||
authorization_pattern = r'<meta\s+name=Authorization\s+content="([^"]+)">'
|
||
csrf_token_match = re.search(csrf_token_pattern, data)
|
||
authorization_match = re.search(authorization_pattern, data)
|
||
if csrf_token_match and authorization_match:
|
||
return csrf_token_match.group(1), authorization_match.group(1)
|
||
|
||
return None, None
|
||
|
||
# 代发专区
|
||
|
||
# 养老专区新
|
||
def turn(self):
|
||
index_url = 'https://fission-events.ccbft.com/a/224/5P87Md3y/index?CCB_Chnl=2030005'
|
||
tasklist_url = 'https://fission-events.ccbft.com/activity/dmspmileage/getindexdata/224/5P87Md3y'
|
||
go_url = 'https://fission-events.ccbft.com/activity/dmspmileage/go/224/5P87Md3y'
|
||
|
||
requests.get(url = index_url, headers = self.bus_headers)
|
||
tasks_data = self.send_request(tasklist_url, headers = self.bus_headers)
|
||
|
||
if tasks_data['status'] != 'success':
|
||
return print(tasks_data['message'])
|
||
|
||
task_list = tasks_data.get('data', {}).get('acttask', {}).get('limit_time')
|
||
|
||
for task in task_list:
|
||
ident = task.get('ident')
|
||
title = task.get('title')
|
||
state = task.get('state')
|
||
reward = task.get('reward')
|
||
|
||
if state == 1:
|
||
print(f'--已完成: {title}')
|
||
else:
|
||
print(f'---去完成: {title}')
|
||
dotask_url = 'https://fission-events.ccbft.com/activity/dmspmileage/taskgo/224/5P87Md3y'
|
||
do_payload = {"type": "limit_time", "ident": ident}
|
||
do_data = self.send_request(dotask_url, headers = self.bus_headers, data = do_payload, method = 'POST')
|
||
|
||
if do_data['status'] != 'success':
|
||
return print(do_data['message'])
|
||
print(f'--浏览成功获得: {reward} 里程')
|
||
self.sleep()
|
||
|
||
self.sleep()
|
||
query_data = self.send_request(tasklist_url, headers = self.bus_headers)
|
||
surplus = query_data.get('data', {}).get('mileage').get('surplus')
|
||
rewards = query_data.get('data', {}).get('map', {}).get('config').get('node')
|
||
if surplus != '0':
|
||
go_data = self.send_request(go_url, headers = self.bus_headers, method = 'POST')
|
||
|
||
mileage_go = go_data.get('data', {}).get('mileage_go', '')
|
||
user_node = go_data.get('data', {}).get('user_node_value')
|
||
print(f'前进: {mileage_go}里程, 当前: {user_node}里程')
|
||
|
||
for reward in rewards:
|
||
value = reward.get('value')
|
||
state = reward.get('state')
|
||
if value == 0 or state != 3:
|
||
continue
|
||
|
||
getreward_url = 'https://fission-events.ccbft.com/activity/dmspmileage/draw/224/5P87Md3y'
|
||
reward_payload = {"value": value}
|
||
rewrd_data = self.send_request(getreward_url, headers = self.bus_headers, data = reward_payload,
|
||
method = 'POST')
|
||
if rewrd_data['status'] != 'success':
|
||
return print(rewrd_data['message'])
|
||
prizename = rewrd_data.get('data', {}).get('prizename')
|
||
print(f'领取 {value}里程奖励: {prizename}')
|
||
|
||
# 跨境专区新
|
||
def border_draw(self):
|
||
index_url = 'https://fission-events.ccbft.com/a/224/1m0xM2mx/index?CCB_Chnl=6000117'
|
||
query_url = 'https://fission-events.ccbft.com/Component/draw/getUserExtInfo/224/1m0xM2mx'
|
||
draw_url = 'https://fission-events.ccbft.com/Component/draw/commonDrawPrize/224/1m0xM2mx'
|
||
requests.get(url = index_url, headers = self.bus_headers)
|
||
query_data = self.send_request(query_url, headers = self.bus_headers)
|
||
if query_data['status'] != 'success':
|
||
return print(query_data['message'])
|
||
remain = query_data['data'].get('remain_num')
|
||
if remain == '0':
|
||
return print('--当前剩余抽奖次数为0')
|
||
self.sleep()
|
||
draw_data = self.send_request(draw_url, headers = self.bus_headers, method = 'POST')
|
||
if draw_data['status'] != 'success':
|
||
print(draw_data['message'])
|
||
return
|
||
print(f"--{draw_data['message']}---{draw_data['data'].get('prizename')}")
|
||
|
||
# 商户专区新
|
||
def shoplist(self):
|
||
index_url = 'https://fission-events.ccbft.com/a/224/8ZWXBM3w/index?CCB_Chnl=6000115'
|
||
task_url = 'https://fission-events.ccbft.com/Component/task/lists/224/8ZWXBM3w'
|
||
requests.get(url = index_url, headers = self.bus_headers)
|
||
tasks_data = self.send_request(task_url, headers = self.bus_headers)
|
||
self.sleep()
|
||
if tasks_data['status'] != 'success':
|
||
print(tasks_data['message'])
|
||
return
|
||
task_list = tasks_data['data'].get('userTask')
|
||
for value in task_list:
|
||
complete_status = value['finish']
|
||
if complete_status == 1:
|
||
print('--已完成该任务,继续浏览下一个任务')
|
||
continue
|
||
task_id = value['id']
|
||
do_url = 'https://fission-events.ccbft.com/Component/task/do/224/8ZWXBM3w'
|
||
payload = {"id": task_id}
|
||
do_data = self.send_request(do_url, headers = self.bus_headers, data = payload, method = 'POST')
|
||
if do_data['status'] != 'success':
|
||
print(do_data['message'])
|
||
return
|
||
print('--浏览完成')
|
||
time.sleep(3)
|
||
|
||
print('--已完成全部任务,去掷骰子')
|
||
time.sleep(3)
|
||
self.throw()
|
||
|
||
def throw(self):
|
||
query_url = 'https://fission-events.ccbft.com/activity/dmspshzq/getIndex/224/8ZWXBM3w'
|
||
query_data = self.send_request(query_url, headers = self.bus_headers)
|
||
if query_data['status'] != 'success':
|
||
print(query_data['message'])
|
||
return
|
||
remain_num = query_data['data'].get('remain_num')
|
||
if remain_num == '0':
|
||
return print('当前没有骰子了')
|
||
self.sleep()
|
||
num = int(remain_num)
|
||
draw_url = 'https://fission-events.ccbft.com/activity/dmspshzq/drawPrize/224/8ZWXBM3w'
|
||
payload = {}
|
||
prizes = []
|
||
for _ in range(num):
|
||
draw_data = self.send_request(draw_url, headers = self.bus_headers, data = payload, method = 'POST')
|
||
if draw_data['status'] != 'success':
|
||
print(draw_data['message'])
|
||
return
|
||
add_step = draw_data['data'].get('add_step')
|
||
current_step = draw_data['data'].get('current_step')
|
||
prize_name = draw_data['data'].get('prize_name')
|
||
prizes.append(f"前进步数:{add_step},当前步数:{current_step}\n获得奖励:{prize_name}")
|
||
time.sleep(3)
|
||
|
||
if prizes:
|
||
print('\n'.join(prizes))
|
||
|
||
# 消保专区新
|
||
def fire(self):
|
||
num_url = 'https://fission-events.ccbft.com/activity/dmspxbmountain/getUserInfo/224/jmXN4Q3d'
|
||
num_data = self.send_request(num_url, headers = self.bus_headers)
|
||
self.sleep()
|
||
if num_data.get('status') != 'success':
|
||
print(num_data.get('message'))
|
||
return
|
||
remain_num = num_data['data'].get('remain_num', 0)
|
||
num = int(remain_num)
|
||
if num == 0:
|
||
print('当前剩余游戏次数为0')
|
||
return
|
||
id_url = 'https://fission-events.ccbft.com/activity/dmspxbmountain/startChallenge/224/jmXN4Q3d'
|
||
draw_url = 'https://fission-events.ccbft.com/Component/draw/commonDrawPrize/224/jmXN4Q3d'
|
||
payload = {}
|
||
for _ in range(num):
|
||
id_data = self.send_request(id_url, headers = self.bus_headers, data = payload, method = 'POST')
|
||
if id_data.get('status') != 'success':
|
||
print(id_data.get('message'))
|
||
return
|
||
game_id = id_data.get('data')
|
||
print('获取成功,开始登山游戏')
|
||
time.sleep(20)
|
||
game_url = 'https://fission-events.ccbft.com/activity/dmspxbmountain/doChallenge/224/jmXN4Q3d'
|
||
payload_game = {"l_id": game_id, "stage": 13, "score": 200}
|
||
msg_data = self.send_request(game_url, headers = self.bus_headers, data = payload_game,
|
||
method = 'POST')
|
||
if msg_data.get('status') != 'success':
|
||
print(msg_data.get('message'))
|
||
return
|
||
draw_payload = {}
|
||
draw_data = self.send_request(draw_url, headers = self.bus_headers, data = draw_payload,
|
||
method = 'POST')
|
||
if draw_data.get('status') != 'success':
|
||
print(draw_data.get('message'))
|
||
return
|
||
mes = draw_data.get('message')
|
||
prizename = draw_data.get('data', {}).get('prizename', '')
|
||
print(f'{mes} {prizename}')
|
||
time.sleep(5)
|
||
|
||
# 抓娃娃
|
||
def get_doll(self):
|
||
if doll_flag == 0:
|
||
print('已关闭抓娃娃游戏')
|
||
return
|
||
query_url = 'https://fission-events.ccbft.com/Component/draw/getUserCCB/224/xPOLkama'
|
||
draw_url = 'https://fission-events.ccbft.com/Component/draw/dmspCommonCcbDrawPrize/224/xPOLkama'
|
||
|
||
query_data = self.send_request(query_url, headers = self.bus_headers)
|
||
draw_num = query_data.get('data', {}).get('user_day_draw_num', 0)
|
||
num = 10 - int(draw_num)
|
||
num2 = 10 - doll_draw
|
||
print(f'--当前剩余游戏次数: {num}')
|
||
|
||
while num > num2:
|
||
draw_payload = {}
|
||
draw_data = self.send_request(draw_url, headers = self.bus_headers, data = draw_payload, method = 'POST')
|
||
if draw_data.get('status') != 'success':
|
||
print(draw_data.get('message'))
|
||
break
|
||
msg = draw_data.get('message')
|
||
prizename = draw_data.get('data', {}).get('prizename', '')
|
||
print(f'{msg} {prizename}')
|
||
time.sleep(5)
|
||
num -= 1
|
||
|
||
# 投篮球
|
||
def do_basket(self):
|
||
if basket_flag == 0:
|
||
print('已关闭投篮球游戏')
|
||
return
|
||
index_url = 'https://fission-events.ccbft.com/a/224/eZgpye3y/index?CCB_Chnl=1000181'
|
||
query_url = 'https://fission-events.ccbft.com/activity/dmspdunk/user/224/eZgpye3y'
|
||
requests.get(url = index_url, headers = self.bus_headers)
|
||
query_data = self.send_request(query_url, headers = self.bus_headers)
|
||
remain_daily = query_data.get('data', {}).get('remain_daily_times')
|
||
num = 5 - basket_draw
|
||
print(f'--当前剩余游戏次数: {remain_daily}')
|
||
self.sleep()
|
||
|
||
while remain_daily > num:
|
||
id_url = 'https://fission-events.ccbft.com/activity/dmspdunk/start/224/eZgpye3y'
|
||
id_data = self.send_request(id_url, headers = self.bus_headers, method = 'POST')
|
||
|
||
if id_data.get('status') != 'success':
|
||
print(id_data.get('message'))
|
||
break
|
||
game_id = id_data.get('data', {}).get('id')
|
||
time.sleep(5)
|
||
activity_url = f'https://fission-events.ccbft.com/activity/dmspdunk/scene/224/eZgpye3y?id={game_id}'
|
||
activity_data = self.send_request(activity_url, headers = self.bus_headers)
|
||
remain_times = activity_data.get('data', {}).get('remain_times')
|
||
basket_num = int(remain_times) # 篮球数量
|
||
while basket_num > 0:
|
||
dogame_url = 'https://fission-events.ccbft.com/activity/dmspdunk/shot/224/eZgpye3y'
|
||
payload = {'id': game_id}
|
||
dogeme_data = self.send_request(dogame_url, headers = self.bus_headers, data = payload, method = 'POST')
|
||
if dogeme_data.get('status') != 'success':
|
||
print(dogeme_data.get('message'))
|
||
continue
|
||
win_times = dogeme_data.get('data', {}).get('win_times') # 投中数量
|
||
got_ccb = dogeme_data.get('data', {}).get('got_ccb') # 获得cc豆
|
||
print(f'当前投中篮球数量: {win_times}')
|
||
|
||
if basket_num == 1:
|
||
print(f'游戏结束,获得cc豆数量: {got_ccb}')
|
||
time.sleep(2.5)
|
||
basket_num -= 1
|
||
remain_daily -= 1
|
||
|
||
# 查询cc豆及过期cc豆时间
|
||
def get_user_ccd(self):
|
||
url_get_ccd = f'https://m3.dmsp.ccb.com/api/businessCenter/user/getUserCCD?zhc_token={self.zhc_token}'
|
||
url_get_expired_ccd = f'https://m3.dmsp.ccb.com/api/businessCenter/user/getUserCCDExpired?zhc_token={self.zhc_token}'
|
||
|
||
try:
|
||
return_data1 = self.send_request(url_get_ccd, headers = self.base_header, data = {},
|
||
method = 'POST')
|
||
self.sleep()
|
||
return_data2 = self.send_request(url_get_expired_ccd, headers = self.base_header,
|
||
data = {}, method = 'POST')
|
||
if return_data1['code'] != 200:
|
||
raise Exception(return_data1['message'])
|
||
elif return_data2['code'] != 200:
|
||
raise Exception(return_data2['message'])
|
||
count1 = return_data1['data'].get('userCCBeanInfo').get('count')
|
||
count2 = return_data2['data'].get('userCCBeanExpiredInfo').get('count')
|
||
expire_date_str = return_data2['data'].get('userCCBeanExpiredInfo').get('expireDate')
|
||
if expire_date_str:
|
||
expire_date = datetime.fromisoformat(expire_date_str)
|
||
formatted_date = expire_date.strftime('%Y-%m-%d %H:%M:%S')
|
||
print(f'\n当前cc豆:{count1},有{count2} cc豆将于{formatted_date}过期')
|
||
else:
|
||
print("expire_date_str is empty")
|
||
|
||
except Exception as e:
|
||
print(str(e))
|
||
|
||
|
||
if __name__ == "__main__":
|
||
cookies = user_cookie.split("@")
|
||
msg = f"建行cc豆共获取到{len(cookies)}个账号"
|
||
print(msg)
|
||
|
||
for i, cookie in enumerate(cookies, start = 1):
|
||
print(f"\n======== ▷ 第 {i} 个账号 ◁ ========")
|
||
CCD(cookie).run()
|
||
print("\n随机等待5-10s进行下一个账号")
|
||
time.sleep(random.randint(5, 10))
|