[Asm] 纯文本查看 复制代码
# 获取抽奖大厅分类列表
# {"availableQuota":"20000.00","cateConfs":[{"indexTabConfVos":[{"paramStr":"{\"materialId\": \"6708\"}","title":"推荐"}],"title":"推荐"},{"indexTabConfVos":[{"paramStr":"{\"materialId\": \"3756\"}","title":"百货"}],"title":"百货"},{"indexTabConfVos":[{"paramStr":"{\"materialId\": \"3761\"}","title":"美食"}],"title":"美食"},{"indexTabConfVos":[{"paramStr":"{\"queryWord\": \"手机\"}","title":"手机"}],"title":"手机"},{"indexTabConfVos":[{"paramStr":"{\"queryWord\": \"电脑\"}","title":"电脑"}],"title":"电脑"},{"indexTabConfVos":[{"paramStr":"{\"materialId\": \"3759\"}","title":"家电"}],"title":"家电"},{"indexTabConfVos":[{"paramStr":"{\"materialId\": \"3767\"}","title":"美衣"}],"title":"美衣"},{"indexTabConfVos":[{"paramStr":"{\"materialId\": \"3764\"}","title":"男装"}],"title":"男装"},{"indexTabConfVos":[{"paramStr":"{\"queryWord\": \"饰品\"}","title":"饰品"}],"title":"饰品"},{"indexTabConfVos":[{"paramStr":"{\"materialId\": \"3763\"}","title":"美妆"}],"title":"美妆"},{"indexTabConfVos":[{"paramStr":"{\"queryWord\": \"家纺\"}","title":"家纺"}],"title":"家纺"},{"indexTabConfVos":[{"paramStr":"{\"materialId\": \"3758\"}","title":"家居"}],"title":"家居"},{"indexTabConfVos":[{"paramStr":"{\"materialId\": \"3766\"}","title":"运动"}],"title":"运动"},{"indexTabConfVos":[{"paramStr":"{\"materialId\": \"3760\"}","title":"母婴"}],"title":"母婴"},{"indexTabConfVos":[{"paramStr":"{\"materialId\": \"3765\"}","title":"内衣"}],"title":"内衣"},{"indexTabConfVos":[{"paramStr":"{\"materialId\": \"3762\"}","title":"鞋包"}],"title":"鞋包"},{"indexTabConfVos":[{"paramStr":"{\"queryWord\": \"车饰\"}","title":"车品"}],"title":"车品"}],"categories":[{"materialId":"6708","name":"推荐"},{"favoritesId":"2020738001","materialId":"31539","name":"豪礼"},{"materialId":"3756","name":"热门"},{"materialId":"3761","name":"美食"},{"materialId":"3763","name":"美妆"},{"materialId":"3759","name":"家电"},{"materialId":"3767","name":"美衣"},{"materialId":"3760","name":"母婴"},{"materialId":"3758","name":"家居"},{"materialId":"3762","name":"鞋包"},{"materialId":"3765","name":"内衣"},{"materialId":"3764","name":"男装"},{"materialId":"3766","name":"运动"}],"continueSignNum":"0","duplicateActivityVos":[],"everyLoginQuota":false,"idem":true,"itemVoList":[{"activityId":"2021080500821414400","afterButtonText":"已参与","basePrice":0,"beforeButtonText":"免费抽奖","expireFlag":false,"itemId":"624225931498","itemNum":0,"itemType":"TBK_GOODS","lotteryPersonText":"累计70.12万人参与抽奖","luckDogText":"已有1人中奖","needPropNum":0,"participateCount":701169,"pictUrl":"https://img.alicdn.com/i3/654143820/O1CN01QMTSrq1e5bfK...
def alipay_mobile_aggrbillinfo_user_sign_list(s):
operation_type = 'alipay.mobile.aggrbillinfo.user.sign.list'
base_info = json.loads(s.exports.get_rpc_base_info())
request_data = json.dumps([{
'apdid': base_info['apdid'],
'clientKey': base_info['clientKey'],
'clientVersion': base_info['clientVersion'],
'model': base_info['model'],
'platform': base_info['platform'],
'token': base_info['token'],
'userId': base_info['userId'],
'utdid': base_info['utdid'],
}], separators=(',', ':'))
ts = get_ts()
sign = alipay_sign(s, operation_type, request_data, ts)
# print(sign)
headers = alipay_headers(s, base_info, operation_type, ts, sign)
return alipay_request(headers, request_data)
# cateConfs 字段下为各分类信息
def collect_lottery_items_info(s, cate_confs, limit_quota, depth):
# 收集分类参数
titles = list()
param_strs = list()
print('开始收集商品分类信息...')
for cate in cate_confs:
if 'indexTabConfVos' in cate:
for tab in cate['indexTabConfVos']:
if 'title' in tab and 'paramStr' in tab:
titles.append(tab['title'])
param_strs.append(tab['paramStr'])
# 收集商品信息
items = dict()
print('开始收集商品信息...')
for i in range(0, len(param_strs)):
page_size = 20 # 每次获取 20 个商品
max_lottery_pages = 5 # 每个分类获取 5 页数据
for page in range(1, max_lottery_pages + 1):
print('正在获取分类', titles[i], '下第', page, '/', max_lottery_pages, '页商品信息,已获取到', len(items), '件商品信息...')
# mall_list = alipay_mobile_aggrbillinfo_mall_list(s, page, page_size, param_strs[i], 0)
mall_list = alipay_mobile_aggrbillinfo_mall_list(s, page, page_size, param_strs[i], random.randint(0, 300))
if mall_list is None:
break
# 商品类型,可以修改 sign_list['cateConfs'] 实现只对某些类型的商品进行抽奖
sign_list = alipay_mobile_aggrbillinfo_user_sign_list(s)
if 'cateConfs' in sign_list:
# 开始抽奖
lottery_times = 0
while lottery_times < max_lottery_times:
# 准备足够羊毛并获取羊毛信息
available_quota, limit_quota = prepare_wool(s)
# 收取羊毛、使用卡片之后仍不足以符合抽奖需求
if item_list is None or len(item_list) <= 0:
if available_quota < limit_quota:
print('可用羊毛只有', available_quota, '不够抽奖,请过段时间再来...')
break
elif available_quota < item_list[0]['salePrice']:
print('可用羊毛只有', available_quota, '不够抽奖,请过段时间再来...')
break
depth = 0
retried = False
while True:
item = None
# 获取商品列表
if item_list is None or len(item_list) <= 0:
item_list = collect_lottery_items_info(s, sign_list['cateConfs'], limit_quota, depth)
if len(item_list) < 100:
depth += 1
max_lottery_times += 100