async def create_tuan(self, session): """ :return: """ tuan_info = await self.query_tuan_info(session) if tuan_info['isOpenTuan'] != 2: path = 'dreamfactory/tuan/CreateTuan' params = { 'activeId': self.active_id, 'isOpenApp': 1, '_stk': '_time,activeId,isOpenApp' } data = await self.request(session, path, params) if not data or data['ret'] != 0: println('{}, 开团失败!'.format(self.account)) return '' println('{}, 开团成功, 团ID:{}!'.format(self.account, data['tuanId'])) tuan_id = data['tuanId'] else: tuan_id = tuan_info['tuanId'] println('{}, 团ID:{}'.format(self.account, tuan_id)) Code.insert_code(code_key=CODE_JX_FACTORY_TUAN, code_val=tuan_id, sort=self.sort, account=self.account) return tuan_id
async def run(self): """ :return: """ async with aiohttp.ClientSession(cookies=self.cookies, headers=self.headers) as session: self.farm_info = await self.init_for_farm(session=session) if not self.farm_info: println('{}, 无法获取农场数据, 退出程序!'.format(self.account)) return Code.insert_code(code_key=CODE_JD_FARM, code_val=self.farm_info['shareCode'], account=self.account, sort=self.sort) println('{}, 助力码:{}'.format(self.account, self.farm_info['shareCode'])) await self.do_daily_task(session) # 每日任务 await self.do_ten_water(session) # 浇水十次 await self.get_first_water_award(session) # 领取首次浇水奖励 await self.get_ten_water_award(session) # 领取十次浇水奖励 await self.get_water_friend_award(session) # 领取给好友浇水的奖励 await self.click_duck(session) # 点鸭子任务 await self.do_ten_water_again(session) # 再次浇水 await self.got_water(session) # 领水滴 await self.notify_result(session) # 结果通知
async def do_tasks(self, session, data): """ 做任务 :param session: :param data: 首页数据 :return: """ println('{}, 开始做任务...'.format(self.account)) for task in data['result']['taskVos']: task_type = task['taskType'] task_name = task['taskName'] task_status = task['status'] if task_status == 2: println('{}, 任务:《{}》今日已完成!'.format(self.account, task_name)) continue if task_type == 13: await self.sign(session, task) elif task_type == 14: code = task['assistTaskDetailVo']['taskToken'] println('{}, 助力码:{}'.format(self.account, code)) from db.model import Code Code.insert_code(code_key=CODE_SMASH_GOLDEN_EGG, account=self.account, code_val=code) elif task_type == 21: println('{}, 跳过任务: 《{}》!'.format(self.account, task_name)) continue else: await self.do_task(session, task)
async def do_tasks(self, session): """ :param session: :return: """ res = await self.request(session, 'healthyDay_getHomeData', { "appId": "1EFRXxg", "taskToken": "", "channelId": 1 }) if res['code'] != 0 or res['data']['bizCode'] != 0: println('{}, 获取任务列表失败!'.format(self.account)) return data = res['data']['result'] task_list = data['taskVos'] for task in task_list: task_name, task_type = task['taskName'], task['taskType'] if task_type == 14: # 邀请好友助力 code = task['assistTaskDetailVo']['taskToken'] println('{}, 助力码:{}'.format(self.account, code)) Code.insert_code(code_key=CODE_FLASH_SALE_BOX, code_val=code, account=self.account, sort=self.sort) continue await self.do_task(session, task)
async def run(self): """ :return: """ await self.get_encrypt() async with aiohttp.ClientSession(cookies=self.cookies, headers=self.headers) as session: if not await self.init(session): println('{}, 无法初始化, 退出程序!'.format(self.account)) return if self.share_code: println('{}, 助力码:{}'.format(self.account, self.share_code)) Code.insert_code(code_key=CODE_JX_PASTURE, code_val=self.share_code, sort=self.sort, account=self.account) await self.get_daily_food(session) await self.sign(session) # 每日签到 await self.get_gold_from_bull(session) # 收牛牛金币 await self.buy_food(session) # 购买白菜 await self.feed(session) # 喂食 await self.mowing(session, max_times=20) # 割草20次 await self.sweep_chicken_legs(session, max_times=20) # 扫鸡腿20次 await self.do_tasks(session) # 做任务领奖励 await self.notify(session) # 通知
async def get_share_code(self, session): """ 获取助力码 :return: """ res = await self.get(session, 'signin/carveUp/carveUpInfo', { "groupId": "", "type": 2 }) if res.get('code') != '0': println('{}, 获取组队数据失败!'.format(self.account)) return if 'groupId' not in res['result']: println('{}, 开启队伍!'.format(self.account)) res = await self.get( session, 'signin/carveUp/openCarveUp', { "nickName": "", "nickHeadUrl": "", "wcUnionId": "", "openId": "", "formId": "", "type": 2, "traceId": int(time.time() * 1000) }) code = res['result']['groupId'] println('{}, 助力码:{}'.format(self.account, code)) Code.insert_code(code_key=CODE_DJ_BEAN_MANOR, code_val=code, account=self.account, sort=self.sort)
async def init(self, session): """ 初始化 :return: """ println('{}, 正在初始化数据...'.format(self.account)) data = await self.request(session, 'initPetTown') if data['resultCode'] != '0': println('{}, 无法获取活动首页数据, {}!'.format(self.account, data['message'])) return False if data['userStatus'] == 0: println('{}, 萌宠活动未开启, 请手动去京东APP开启活动入口:我的->游戏与互动->查看更多开启!'.format(self.account)) if 'goodsInfo' not in data: println('{}, 暂未选购商品!'.format(self.account)) self.message += '【商品状态】暂未选择商品!\n' self.share_code = data['shareCode'] self.invite_code = data['inviteCode'] println('{}的互助码为:{}'.format(self.account, self.share_code)) println('{}的邀请码为:{}'.format(self.account, self.invite_code)) if self.share_code: # 保存助力码 Code.insert_code(code_key=CODE_CUT_PET, code_val=self.share_code, account=self.account, sort=self.sort) if data['petStatus'] == 5: println('{}, 已可兑换商品!'.format(self.account)) self.message += '【商品状态】已可兑换商品\n' if data['petStatus'] == 6: println('{}, 已领取红包, 但未继续领养新的物品!'.format(self.account)) self.message += '【商品状态】暂未领取新的物品!' return True
async def get_share_code(self, session): """ :return: """ println('{}, 正在获取助力码!'.format(self.account)) data = await self._get_index_data(session) if not data: println('{}, 无法获取助力码!'.format(self.account)) return await asyncio.sleep(1) await self.request(session, 'signGroupHit', {'activeType': data['activityType']}) await asyncio.sleep(1) data = await self._get_index_data(session) if not data: println('{}, 无法获取助力码!'.format(self.account)) return code = data['shareCode'] + '@' + data['groupCode'] Code.insert_code(code_key=CODE_JD_GRAB_BEAN, code_val=code, account=self.account, sort=self.sort) println('{}, 助力码: {}'.format(self.account, code)) return code
async def get_task_list(self, session): """ 获取任务列表 :param session: :return: """ data = await self.request(session, 'jdfactory_getTaskDetail') if not data or data['bizCode'] != 0: println('{}, 无法获取任务列表!'.format(self.account)) return task_list = data['result']['taskVos'] for task in task_list: if task['taskType'] == 14: # 互助码 self.code = task['assistTaskDetailVo']['taskToken'] Code.insert_code(code_key=CODE_JD_FACTORY, code_val=self.code, account=self.account, sort=self.sort) println('{}, 助力码:{}'.format(self.account, self.code)) task_list.remove(task) break return task_list
async def do_tasks(self, session): """ 获取任务列表 :param session: :return: """ data = await self.request( session, 'superBrandTaskList', { "source": "secondfloor", "activityId": self.activity_id, "assistInfoFlag": 1 }) if data.get('code') != 0: println('{}, 获取任务列表数据失败!'.format(self.account)) return None task_list = data['result']['taskList'] for task in task_list: if '助力' in task['assignmentName'] or '邀请' in task['assignmentName']: code_val = task['encryptAssignmentId'] + '@' + task['ext'][ 'assistTaskDetail']['itemId'] println('{}, 助力码:{}'.format(self.account, code_val)) Code.insert_code(code_key=CODE_JD_SUPER_BRAND, code_val=code_val, sort=self.sort, account=self.account) continue if not task['ext']: item_id = 'null' else: if 'followShop' in task['ext']: item_id = task['ext']['followShop'][0]['itemId'] elif 'assistTaskDetail' in task['ext']: item_id = task['ext']['assistTaskDetail']['itemId'] elif 'brandMemberList' in task['ext']: item_id = task['ext']['brandMemberList'][0]['itemId'] else: item_id = 'null' body = { "source": "secondfloor", "activityId": self.activity_id, "encryptProjectId": self.encrypt_project_id, "encryptAssignmentId": task['encryptAssignmentId'], "assignmentType": task['assignmentType'], "completionFlag": 1, "itemId": item_id, "actionType": 0 } res = await self.request(session, 'superBrandDoTask', body) println('{}, 任务:{}, {}'.format(self.account, task['assignmentName'], res.get('msg')))
async def get_share_code(self, task): """ 获取助力码 :param task: :return: """ code = task['assistTaskDetailVo']['taskToken'] println('{}, 助力码:{}!'.format(self.account, code)) Code.insert_code(code_key=self.code_key, code_val=code, account=self.account, sort=self.sort)
async def get_share_code(self, session): """ 获取助力码 :param session: :return: """ res = await self.request(session, 'jdhealth_getTaskDetail', {"buildingId": "", "taskId": 6, "channelId": 1}) if res.get('bizCode', ERRCODE_DEFAULT) != 0: println('{}, 无法获取助力码!'.format(self.account)) return code = res['result']['taskVos'][0]['assistTaskDetailVo']['taskToken'] println('{}, 助力码:{}'.format(self.account, code)) Code.insert_code(code_key=CODE_JD_HEALTH, code_val=code, account=self.account, sort=self.sort)
async def get_share_code(self, session): """ :return: """ res = await self.request(session, {"apiMapping": "/active/shareUrl"}) if res.get('code') != 200: return code = res.get('data') println('{}, 助力码:{}'.format(self.account, code)) Code.insert_code(code_key=CODE_5G_BOX, code_val=code, sort=self.sort, account=self.account)
async def get_share_code(self, task): """ 获取助力码 """ body = { 'taskId': task['taskId'], 'uniqueId': task['uniqueId'], 'assistTargetPin': self.dj_pin, } code = json.dumps(body) Code.insert_code(code_key=CODE_DJ_FRUIT, code_val=code, account=self.account, sort=self.sort) println('{}, 助力码:{}'.format(self.account, code)) return code
async def get_share_code(self, session): """ 获取助力码 :return: """ data = await self.post(session=session, function_id='plantBeanIndex') if not data or data['code'] != '0' or 'errorMessage' in data: println('{}, 获取助力码失败:{}'.format(self.account, data.get('errorMessage', '未知'))) return None share_url = furl(data['data']['jwordShareInfo']['shareUrl']) code = share_url.args.get('plantUuid', '') println('{} 助力码:{}'.format(self.account, code)) Code.insert_code(code_key=CODE_PLANTING_BEAN, code_val=code, account=self.account, sort=self.sort) return code
async def do_tasks(self, session): """ 做任务 :return: """ res = await self.request(session, '/luckdraw/queryMissionList', [{ "userNo": "$cooMrdGatewayUid$", "activity_code": self.activity_code }]) if not res.get('success'): println('{}, 获取任务列表失败!'.format(self.account)) return task_list = res['content']['missionList'] for task in task_list: if task['status'] == 10: println('{}, 今日完成任务:{}!'.format(self.account, task['title'])) continue if task['status'] == 11: for no in task['getRewardNos']: body = [{ "activity_code": self.activity_code, "userNo": "$cooMrdGatewayUid$", "getCode": no }] res = await self.request(session, '/luckDraw/getDrawChance', body) if res.get('success'): println('{}, 成功领取一次抽奖机会!'.format(self.account)) break continue if '邀请' in task['title']: # 邀请好友 code = task['missionNo'] println('{}, 助力码:{}'.format(self.account, code)) Code.insert_code(code_val=code, code_key=CODE_KEY, sort=self.sort, account=self.account) continue for i in range(task['completeNum'], task['totalNum']): body = [{ "activity_code": self.activity_code, "userNo": "$cooMrdGatewayUid$", "missionNo": task['missionNo'], "params": task['params'] }] res = await self.request(session, '/luckDraw/completeMission', body) if res.get('success'): println('{}, 完成任务:{}-{}'.format(self.account, task['title'], i + 1)) await asyncio.sleep(1)
async def help_friend(self, session): """ 帮好友打工 :param session: :return: """ path = 'dreamfactory/friend/AssistFriend' body = { 'zone': 'dream_factory', 'sharepin': '', '_stk': '_time,sharepin,zone' } item_list = Code.get_code_list(CODE_JX_FACTORY_WORK) item_list.extend(get_code_list(CODE_JX_FACTORY_WORK)) for item in item_list: account, code = item.get('account'), item.get('code') if account == self.account: continue body['sharepin'] = code res = await self.request(session, path, body) if res.get('ret', -1) != 0: println('{}, 无法助力好友:{}, {}'.format(self.account, account, res.get('msg', '原因未知'))) if res.get('ret', -1) in [11009, 11005]: break else: println('{}, 成功助力好友:{}!'.format(self.account, account)) await asyncio.sleep(1)
async def help_friend(self, session): """ 助力好友 :param session: :return: """ item_list = Code.get_code_list(CODE_JD_FACTORY) item_list.extend(get_code_list(CODE_JD_FACTORY)) for item in item_list: friend_account, friend_code = item.get('account'), item.get('code') if friend_account == self.account: continue params = { "taskToken": friend_code, } data = await self.request(session, 'jdfactory_collectScore', params) println('{}, 助力好友{}, {}'.format(self.account, friend_account, data['bizMsg'])) if data['bizCode'] in [-1001, -7]: # 活动火爆=黑号, 助力次数用完 break await asyncio.sleep(1)
async def run_help(self): """ 执行助力 :return: """ async with aiohttp.ClientSession( headers=self.headers, cookies=self.cookies, json_serialize=ujson.dumps) as session: code_list = Code.get_code_list(code_key=CODE_AMUSEMENT_POST) code_list.extend(get_code_list(CODE_AMUSEMENT_POST)) if not code_list: return for code in code_list: friend_account = code.get('account') friend_code = code.get('code') if friend_account == self.account: continue res = await self.request(session, 'MangHeApi/helpFriend', [{ "userNo": "$cooMrdGatewayUid$", "missionNo": friend_code }]) success = res.get('success', False) if success: println('{}, 成功助力好友:{}!'.format(self.account, friend_account)) else: println('{}, 无法助力好友:{}!'.format(self.account, friend_account))
async def help_friend(self, session): """ :param session: :return: """ path = 'dreamfactory/userinfo/GetUserInfo' body = { 'zone': 'dream_factory', 'pin': '', 'sharePin': '', 'shareType': 2, 'materialTuanPin': '', 'materialTuanId': '', 'source': '', '_stk': '_time,materialTuanId,materialTuanPin,pin,sharePin,shareType,source,zone' } item_list = Code.get_code_list(CODE_JX_FACTORY_WORK) item_list.extend(get_code_list(CODE_JX_FACTORY_WORK)) for item in item_list: account, code = item.get('account'), item.get('code') if account == self.account: continue body['sharePin'] = code res = await self.request(session, path, body) msg = res.get('assistCondition', dict()).get('assistConditionMsg', '未知') println('{}, 助力好友:{}, {}'.format(self.account, account, msg))
async def help_friend(self, session): """ :param session: :return: """ session.headers.add( 'Referer', 'https://h5.m.jd.com/babelDiy/Zeus/GzY6gTjVg1zqnQRnmWfMKC4PsT1/index.html' ) item_list = Code.get_code_list(code_key=CODE_JD_CASH) item_list.extend(get_code_list(CODE_JD_CASH)) for item in item_list: friend_account, friend_code = item.get('account'), item.get('code') if friend_account == self.account: continue invite_code, share_date = friend_code.split('@') data = await self.request(session, 'cash_mob_assist', { "inviteCode": invite_code, "shareDate": share_date, "source": 2 }) if data['code'] != 0 or data['data']['bizCode'] != 0: println('{}, 助力好友:{}失败, {}!'.format(self.account, invite_code, data['data']['bizMsg'])) if data['data']['bizCode'] in [206, 188]: # 助力次数用完/活动太火爆了 break else: println('{}, 助力好友:{}成功!'.format(self.account, invite_code)) await asyncio.sleep(2.5)
async def join_tuan(self, session): """ 参团 :param session: :return: """ item_list = Code.get_code_list(CODE_JX_FACTORY_TUAN) item_list.extend(CODE_JX_FACTORY_TUAN) path = 'dreamfactory/tuan/JoinTuan' for item in item_list: account, code = item.get('account'), item.get('code') if account == self.account: continue params = { 'activeId': self.active_id, 'tuanId': code, '_stk': '_time,activeId,tuanId' } data = await self.request(session, path, params) if not data: println('{}, 无法参与好友:{}的团!'.format(self.account, account)) return if data['ret'] in [10208, 0]: println('{}, 已成功参与好友:{}的团!'.format(self.account, account)) else: println('{}, 无法参与好友:{}的团, {}'.format(self.account, account, data['msg'])) if data['ret'] in [10206, 10003]: break await asyncio.sleep(1)
async def run_help(self): """ 助力入口 :return: """ async with aiohttp.ClientSession(cookies=self.cookies, headers=self.headers) as session: is_success = await self.login(session) if not is_success: println('{}, 登录失败, 退出程序...'.format(self.account)) return item_list = Code.get_code_list(CODE_MONEY_TREE) item_list.extend(get_code_list(CODE_MONEY_TREE)) for item in item_list: friend_account, friend_code = item.get('account'), item.get('code') if friend_account == self.account: continue params = { "sharePin": friend_account, "shareType": "1", "channelLV": "", "source": 0, "riskDeviceParam": "{}" } data = await self.request(session, 'login', params) if data['code'] == '200': println('{}, 正在帮好友:{}打工!'.format(self.account, friend_account)) else: println('{}, 无法为好友:{}打工!'.format(self.account, friend_account))
async def get_share_code(self, session): """ 获取助力码 :return: """ body = {"apiMapping": "/khc/task/getSupport"} res = await self.request(session, 'carnivalcity_jd_prod', body) if res.get('code') != 200: println('{}, 无法获取助力码!'.format(self.account)) return share_code = res.get('data', dict()).get('shareId') Code.insert_code(code_key=CODE_JD_CARNIVAL_CITY, code_val=share_code, sort=self.sort, account=self.account) println('{}, 助力码:{}'.format(self.account, share_code))
async def run_help(self): """ :return: """ await self.get_encrypt() async with aiohttp.ClientSession(cookies=self.cookies, headers=self.headers) as session: if not await self.init(session): println('{}, 无法初始化, 退出程序!'.format(self.account)) return item_list = Code.get_code_list(code_key=CODE_JX_PASTURE) item_list.extend(get_code_list(CODE_JX_PASTURE)) for item in item_list: account, code = item.get('account'), item.get('code') if account == self.account: continue res = await self.request(session, '/jxmc/operservice/EnrollFriend', { 'sharekey': code, '_stk': 'channel,sceneid,sharekey' }) if res.get('ret') == 0: println('{}, 成功助力好友:{}'.format(self.account, account)) else: println('{}, 助力好友:{}失败, {}'.format(self.account, account, res.get('message'))) await asyncio.sleep(3)
async def run_help(self): """ 助力 :return: """ async with aiohttp.ClientSession(cookies=self.cookies, headers=self.headers) as session: item_list = Code.get_code_list(code_key=CODE_FLASH_SALE_BOX) item_list.extend(get_code_list(CODE_FLASH_SALE_BOX)) for item in item_list: friend_account, friend_code = item['account'], item['code'] if friend_account == self.account: return body = { "appId": "1EFRXxg", "taskToken": friend_code, "taskId": 6, "actionType": 0 } res = await self.request(session, 'harmony_collectScore', body) if res['code'] != 0: println('{}, 助力好友:{}失败!'.format(self.account, friend_account)) break if res['data']['bizCode'] != 0: println('{}, 助力好友:{}失败, {}!'.format( self.account, friend_account, res['data']['bizMsg'])) if res['data']['bizCode'] in [108]: break else: println('{}, 助力好友:{}成功!'.format(self.account, friend_account)) await asyncio.sleep(1)
async def run_help(self): """ 助力入口 :return: """ async with aiohttp.ClientSession(headers=self.headers, cookies=self.cookies) as session: item_list = Code.get_code_list(CODE_SMASH_GOLDEN_EGG) for item in item_list: friend_account, friend_code = item.get('account'), item.get( 'code') if self.account == friend_account: continue body = { "appId": "1EFRQwA", "taskToken": friend_account, "taskId": 6, "actionType": 0 } res = await self.request(session, 'harmony_collectScore', body) if res['bizCode'] != 0: println('{}, 助力好友:{}失败, {}'.format(self.account, friend_account, res.get('bizMsg'))) if res['bizCode'] == 105: break else: println('{}, 成功助力好友:{}!'.format(self.account, friend_account)) await asyncio.sleep(1)
def post_code_list(code_key): """ 提交助力码 :return: """ code_list = [] item_list = Code.get_codes(code_key) for item in item_list: code_list.append({ 'account': item.account, 'code_key': item.code_key, 'code_val': item.code_val, }) if len(code_list) < 1: return url = 'https://jd-share-code.vercel.app/api/' params = {'items': code_list, 'os': os.getenv('HOSTNAME', '')} params['sign'] = sign(params) try: response = requests.post(url, json=params, verify=False, timeout=10) if response.json().get('code') == 0: println('成功提交助力码!') else: println('提交助力码失败!') except Exception as e: println('提交助力码失败, {}'.format(e.args))
async def lottery_help_friend(self, session): """ 天天抽奖助力好友 :param session: :return: """ println('{}, 开始天天抽奖--好友助力--每人每天只有三次助力机会!'.format(self.account)) item_list = Code.get_code_list(CODE_JD_FARM) item_list.extend(get_code_list(CODE_JD_FARM)) for item in item_list: friend_account, friend_code = item.get('account'), item.get('code') if friend_account == self.account: continue res = await self.request( session, 'initForFarm', { "imageUrl": "", "nickName": "", "shareCode": friend_code + '-3', "babelChannel": "3" }) if res['helpResult']['code'] == '0': println('{}, 天天抽奖-成功助力用户:《{}》 !'.format( self.account, friend_account)) elif res['helpResult']['code'] == '11': println('{}, 天天抽奖-无法重复助力用户:《{}》!'.format( self.account, friend_account)) elif res['helpResult']['code'] == '13': println('{}, 天天抽奖-助力用户:《{}》失败, 助力次数已用完!'.format( self.account, friend_account)) break else: println('{}, 天天抽奖助力用户:《{}》失败, 原因未知!'.format( self.account, friend_account)) println('{}, 完成天天抽奖--好友助力!'.format(self.account))
async def run_help(self): """ 助力入口 :return: """ async with aiohttp.ClientSession(cookies=self.cookies, headers=self.headers) as session: item_list = Code.get_code_list(self.code_key) item_list.extend(get_code_list(self.code_key)) for item in item_list: friend_account, friend_code = item.get('account'), item.get( 'code') if friend_account == self.account: continue res = await self.request( session, 'harmony_collectScore', { "appId": self.appid, "taskToken": friend_code, "taskId": 4, "actionType": 1, }) if res.get('bizCode', -1) != 0: println('{}, 助力好友:{}失败, {}'.format(self.account, friend_account, res['bizMsg'])) if res['bizCode'] == 108: # 助力已上限 break else: println('{}, 成功助力好友:{}!'.format(self.account, friend_account)) await asyncio.sleep(1)