mirror of
				https://github.com/shufflewzc/faker2.git
				synced 2025-10-31 12:02:44 +08:00 
			
		
		
		
	update
This commit is contained in:
		
							parent
							
								
									cdb821e7d9
								
							
						
					
					
						commit
						9c52e11f8e
					
				
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										120
									
								
								jd_shopCollectGift.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										120
									
								
								jd_shopCollectGift.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,120 @@ | ||||
| #!/usr/bin/env python3 | ||||
| # -*- coding: utf-8 -*- | ||||
| 
 | ||||
| """ | ||||
| File: jd_shopCollectGift.py(一键领取京豆-店铺会员礼包) | ||||
| Author: HarbourJ | ||||
| Date: 2022/9/2 12:00 | ||||
| TG: https://t.me/HarbourToulu | ||||
| TgChat: https://t.me/HarbourSailing | ||||
| cron: 1 1 1 1 1 1 | ||||
| new Env('一键领取京豆-店铺会员礼包'); | ||||
| ActivityEntry: https://shop.m.jd.com/shop/home?shopId=1000003443 | ||||
| Description: 部分账号开卡后无法自动领取开卡奖励,不自动开卡,仅领取已开卡的会员礼包 | ||||
|              变量export jd_shopCollectGiftId="1000003443" 变量为店铺venderId | ||||
| """ | ||||
| 
 | ||||
| import requests, sys, os, re, time | ||||
| from datetime import datetime | ||||
| from functools import partial | ||||
| print = partial(print, flush=True) | ||||
| import warnings | ||||
| warnings.filterwarnings("ignore", category=DeprecationWarning) | ||||
| from urllib.parse import quote_plus, unquote_plus | ||||
| 
 | ||||
| from jd_sign import * | ||||
| try: | ||||
|     from jdCookie import get_cookies | ||||
|     getCk = get_cookies() | ||||
| except: | ||||
|     print("请先下载依赖脚本,\n下载链接: https://raw.githubusercontent.com/HarbourJ/HarbourToulu/main/jdCookie.py") | ||||
|     sys.exit(3) | ||||
| 
 | ||||
| venderId = os.environ.get("jd_shopCollectGiftId") if os.environ.get("jd_shopCollectGiftId") else "" | ||||
| 
 | ||||
| if not venderId: | ||||
|     print("⚠️未发现有效活动变量,退出程序!") | ||||
|     sys.exit() | ||||
| 
 | ||||
| def collectGift(venderId, activityId, activityType, cookie): | ||||
|     url = f"https://api.m.jd.com/client.action?appid=jd_shop_member&functionId=collectGift&body=%7B%22venderId%22%3A%22{venderId}%22%2C%22activityId%22%3A{activityId}%2C%22activityType%22%3A{activityType}%7D&clientVersion=9.2.0&client=H5&uuid=88888" | ||||
|     headers = { | ||||
|         'Host': 'api.m.jd.com', | ||||
|         'Accept': '*/*', | ||||
|         'Connection': 'keep-alive', | ||||
|         'Cookie': cookie, | ||||
|         'User-Agent': ua, | ||||
|         'Accept-Language': 'zh-CN,zh-Hans;q=0.9', | ||||
|         'Referer': 'https://shopmember.m.jd.com/', | ||||
|         'Accept-Encoding': 'gzip, deflate, br' | ||||
|     } | ||||
|     response = requests.request("GET", url, headers=headers) | ||||
|     res = response.json() | ||||
|     if res['success']: | ||||
|         return res['message'] | ||||
|     else: | ||||
|         print(res) | ||||
| 
 | ||||
| def getFansDetail(venderId, cookie): | ||||
|     url = f"https://api.m.jd.com/client.action?appid=jd_shop_member&functionId=getFansFuseMemberDetail&clientVersion=9.2.0&client=H5&uuid=88888&body=%7B%22venderId%22%3A%22{venderId}%22%2C%22channel%22%3A406%2C%22queryVersion%22%3A%2210.5.2%22%7D" | ||||
|     headers = { | ||||
|         'Host': 'api.m.jd.com', | ||||
|         'Accept': '*/*', | ||||
|         'Connection': 'keep-alive', | ||||
|         'Cookie': cookie, | ||||
|         'User-Agent': ua, | ||||
|         'Accept-Language': 'zh-CN,zh-Hans;q=0.9', | ||||
|         'Referer': 'https://shopmember.m.jd.com/', | ||||
|         'Accept-Encoding': 'gzip, deflate, br' | ||||
|     } | ||||
|     response = requests.request("GET", url, headers=headers) | ||||
|     res = response.json() | ||||
|     if res['success']: | ||||
|         brandName = res['data'][0]['cardInfo']['brandName'] | ||||
|         if 'newGiftList' in str(res) and res['data'][0]['newGiftList']: | ||||
|             activityId = res['data'][0]['newGiftList'][0]['activityId'] | ||||
|             activityType = res['data'][0]['newGiftList'][0]['activityType'] | ||||
|             prizeTypeName = res['data'][0]['newGiftList'][0]['prizeTypeName'] | ||||
|             discount = res['data'][0]['newGiftList'][0]['discount'] | ||||
|             return activityId, activityType, discount, prizeTypeName, brandName | ||||
|         else: | ||||
|             print(f"{brandName} 未发现店铺礼包💨") | ||||
| 
 | ||||
| if __name__ == '__main__': | ||||
|     try: | ||||
|         cks = getCk | ||||
|         if not cks: | ||||
|             sys.exit() | ||||
|     except: | ||||
|         print("未获取到有效COOKIE,退出程序!") | ||||
|         sys.exit() | ||||
|     num = 0 | ||||
|     for cookie in cks[:]: | ||||
|         num += 1 | ||||
|         global ua | ||||
|         ua = userAgent() | ||||
|         try: | ||||
|             pt_pin = re.compile(r'pt_pin=(.*?);').findall(cookie)[0] | ||||
|             pt_pin = unquote_plus(pt_pin) | ||||
|         except IndexError: | ||||
|             pt_pin = f'用户{num}' | ||||
|         print(f'\n******开始【京东账号{num}】{pt_pin} *********\n') | ||||
|         print(datetime.now()) | ||||
| 
 | ||||
|         try: | ||||
|             getFD = getFansDetail(venderId, cookie) | ||||
|             if getFD: | ||||
|                 activityId = getFD[0] | ||||
|                 activityType = getFD[1] | ||||
|                 discount = getFD[2] | ||||
|                 prizeTypeName = getFD[3] | ||||
|                 brandName = getFD[4] | ||||
|                 cg = collectGift(venderId, activityId, activityType, cookie) | ||||
|                 if cg: | ||||
|                     if "领取成功" in cg: | ||||
|                         print(f"🎉🎉🎉{brandName} {discount}{prizeTypeName} {cg}") | ||||
|                     else: | ||||
|                         print(brandName, cg) | ||||
|         except: | ||||
|             continue | ||||
|         time.sleep(0.5) | ||||
							
								
								
									
										659
									
								
								jd_shopLeague_opencard.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										659
									
								
								jd_shopLeague_opencard.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,659 @@ | ||||
| #!/usr/bin/env python3 | ||||
| # -*- coding: utf-8 -*- | ||||
| 
 | ||||
| """ | ||||
| File: jd_shopLeague_opencard.py(通用开卡-shopLeague系列) | ||||
| Author: HarbourJ | ||||
| Date: 2022/8/12 20:37 | ||||
| TG: https://t.me/HarbourToulu | ||||
| TgChat: https://t.me/HarbourSailing | ||||
| cron: 1 1 1 1 1 1 | ||||
| new Env('通用开卡-shopLeague系列'); | ||||
| ActivityEntry: https://lzdz1-isv.isvjd.com/dingzhi/shop/league/activity?activityId=dzd16c3e4a819a0e14026da9shop | ||||
| Description: dingzhi/shop/league系列通用开卡脚本(通常情况下,开一张卡5,最高获得220豆,邀请成功获得20豆)。 | ||||
|             本地sign算法+redis缓存Token+代理ip(自行配置,实测可行) | ||||
|             变量: export jd_shopLeagueId="2b870a1a7450xxxxxxxxxxxxx" 变量值需要传入活动id | ||||
| """ | ||||
| 
 | ||||
| import time | ||||
| import requests | ||||
| import sys | ||||
| import re | ||||
| import os | ||||
| from datetime import datetime | ||||
| import json | ||||
| import random | ||||
| from urllib.parse import quote_plus, unquote_plus | ||||
| from functools import partial | ||||
| print = partial(print, flush=True) | ||||
| import warnings | ||||
| warnings.filterwarnings("ignore", category=DeprecationWarning) | ||||
| 
 | ||||
| from jd_sign import * | ||||
| try: | ||||
|     from jdCookie import get_cookies | ||||
|     getCk = get_cookies() | ||||
| except: | ||||
|     print("请先下载依赖脚本,\n下载链接: https://raw.githubusercontent.com/HarbourJ/HarbourToulu/main/jdCookie.py") | ||||
|     sys.exit(3) | ||||
| 
 | ||||
| redis_url = os.environ.get("redis_url") if os.environ.get("redis_url") else "172.17.0.1" | ||||
| redis_pwd = os.environ.get("redis_pwd") if os.environ.get("redis_pwd") else "" | ||||
| jd_shopLeagueId = os.environ.get("jd_shopLeagueId") if os.environ.get("jd_shopLeagueId") else "" | ||||
| inviterUuid = os.environ.get("jd_shopLeague_uuid") if os.environ.get("jd_shopLeague_uuid") else "" | ||||
| 
 | ||||
| if not jd_shopLeagueId: | ||||
|     print("⚠️未发现有效活动变量,退出程序!") | ||||
|     sys.exit() | ||||
| # 获取远程remote-redis活动ID | ||||
| if "lzdz1_remote" in jd_shopLeagueId: | ||||
|     jd_jd_shopLeagueId_remote = remote_redis(jd_shopLeagueId) | ||||
|     jd_shopLeagueId = jd_jd_shopLeagueId_remote | ||||
| else: | ||||
|     if not jd_shopLeagueId: | ||||
|         print("⚠️活动变量错误,退出程序!") | ||||
|         sys.exit() | ||||
| 
 | ||||
| activityId = jd_shopLeagueId.split('&')[0] | ||||
| activity_url = f"https://lzdz1-isv.isvjcloud.com/dingzhi/shop/league/activity/5929859?activityId={activityId}&shareUuid={inviterUuid}" | ||||
| print(f"【🛳活动入口】https://lzdz1-isv.isvjcloud.com/dingzhi/shop/league/activity/5929859?activityId={activityId}") | ||||
| 
 | ||||
| def redis_conn(): | ||||
|     try: | ||||
|         import redis | ||||
|         try: | ||||
|             pool = redis.ConnectionPool(host=redis_url, port=6379, decode_responses=True, socket_connect_timeout=5, password=redis_pwd) | ||||
|             r = redis.Redis(connection_pool=pool) | ||||
|             r.get('conn_test') | ||||
|             print('✅redis连接成功') | ||||
|             return r | ||||
|         except: | ||||
|             print("⚠️redis连接异常") | ||||
|     except: | ||||
|         print("⚠️缺少redis依赖,请运行pip3 install redis") | ||||
|         sys.exit() | ||||
| 
 | ||||
| def getToken(ck, r=None): | ||||
|     host = f'{activityUrl.split("com/")[0]}com' | ||||
|     try: | ||||
|         # redis缓存Token 活动域名+pt_pin | ||||
|         pt_pin = unquote_plus(re.compile(r'pt_pin=(.*?);').findall(ck)[0]) | ||||
|     except: | ||||
|         # redis缓存Token 活动域名+ck前7位(获取pin失败) | ||||
|         pt_pin = ck[:8] | ||||
|     try: | ||||
|         if r is not None: | ||||
|             Token = r.get(f'{activityUrl.split("https://")[1].split("-")[0]}_{pt_pin}') | ||||
|             # print("Token过期时间", r.ttl(f'{activityUrl.split("https://")[1].split("-")[0]}_{pt_pin}')) | ||||
|             if Token is not None: | ||||
|                 # print(f"♻️获取缓存Token->: {Token}") | ||||
|                 print(f"♻️获取缓存Token") | ||||
|                 return Token | ||||
|             else: | ||||
|                 print("🈳去设置Token缓存") | ||||
|                 s.headers = { | ||||
|                     'Connection': 'keep-alive', | ||||
|                     'Accept-Encoding': 'gzip, deflate, br', | ||||
|                     'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', | ||||
|                     'User-Agent': '', | ||||
|                     'Cookie': ck, | ||||
|                     'Host': 'api.m.jd.com', | ||||
|                     'Referer': '', | ||||
|                     'Accept-Language': 'zh-Hans-CN;q=1 en-CN;q=0.9', | ||||
|                     'Accept': '*/*' | ||||
|                 } | ||||
|                 sign_txt = sign({"url": f"{host}", "id": ""}, 'isvObfuscator') | ||||
|                 # print(sign_txt) | ||||
|                 f = s.post('https://api.m.jd.com/client.action', verify=False, timeout=30) | ||||
|                 if f.status_code != 200: | ||||
|                     print(f.status_code) | ||||
|                     return | ||||
|                 else: | ||||
|                     if "参数异常" in f.text: | ||||
|                         return | ||||
|                 Token_new = f.json()['token'] | ||||
|                 # print(f"Token->: {Token_new}") | ||||
|                 if r.set(f'{activityUrl.split("https://")[1].split("-")[0]}_{pt_pin}', Token_new, ex=1800): | ||||
|                     print("✅Token缓存设置成功") | ||||
|                 else: | ||||
|                     print("❌Token缓存设置失败") | ||||
|                 return Token_new | ||||
|         else: | ||||
|             s.headers = { | ||||
|                 'Connection': 'keep-alive', | ||||
|                 'Accept-Encoding': 'gzip, deflate, br', | ||||
|                 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', | ||||
|                 'User-Agent': '', | ||||
|                 'Cookie': ck, | ||||
|                 'Host': 'api.m.jd.com', | ||||
|                 'Referer': '', | ||||
|                 'Accept-Language': 'zh-Hans-CN;q=1 en-CN;q=0.9', | ||||
|                 'Accept': '*/*' | ||||
|             } | ||||
|             sign_txt = sign({"url": f"{host}", "id": ""}, 'isvObfuscator') | ||||
|             # print(sign_txt) | ||||
|             f = s.post('https://api.m.jd.com/client.action', verify=False, timeout=30) | ||||
|             if f.status_code != 200: | ||||
|                 print(f.status_code) | ||||
|                 return | ||||
|             else: | ||||
|                 if "参数异常" in f.text: | ||||
|                     return | ||||
|             Token = f.json()['token'] | ||||
|             print(f"Token->: {Token}") | ||||
|             return Token | ||||
|     except: | ||||
|         return | ||||
| 
 | ||||
| def getJdTime(): | ||||
|     jdTime = int(round(time.time() * 1000)) | ||||
|     return jdTime | ||||
| 
 | ||||
| def randomString(e, flag=False): | ||||
|     t = "0123456789abcdef" | ||||
|     if flag: t = t.upper() | ||||
|     n = [random.choice(t) for _ in range(e)] | ||||
|     return ''.join(n) | ||||
| 
 | ||||
| def refresh_cookies(res): | ||||
|     if res.cookies: | ||||
|         cookies = res.cookies.get_dict() | ||||
|         set_cookie = [(set_cookie + "=" + cookies[set_cookie]) for set_cookie in cookies] | ||||
|         global activityCookie | ||||
|         activityCookieMid = [i for i in activityCookie.split(';') if i != ''] | ||||
|         for i in activityCookieMid: | ||||
|             for x in set_cookie: | ||||
|                 if i.split('=')[0] == x.split('=')[0]: | ||||
|                     if i.split('=')[1] != x.split('=')[1]: | ||||
|                         activityCookieMid.remove(i) | ||||
|         activityCookie = ''.join(sorted([(set_cookie + ";") for set_cookie in list(set(activityCookieMid + set_cookie))])) | ||||
| 
 | ||||
| def getActivity(): | ||||
|     url = activityUrl | ||||
|     headers = { | ||||
|         'Host': 'lzdz1-isv.isvjcloud.com', | ||||
|         'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', | ||||
|         'User-Agent': ua, | ||||
|         'Accept-Language': 'zh-CN,zh-Hans;q=0.9', | ||||
|         'Accept-Encoding': 'gzip, deflate, br', | ||||
|         'Connection': 'keep-alive', | ||||
|         'Referer': activityUrl | ||||
|     } | ||||
|     response = requests.request("GET", url, headers=headers) | ||||
|     if response.status_code == 200: | ||||
|         if response.cookies: | ||||
|             cookies = response.cookies.get_dict() | ||||
|             set_cookies = [(set_cookie + "=" + cookies[set_cookie]) for set_cookie in cookies] | ||||
|             set_cookie = ''.join(sorted([(set_cookie + ";") for set_cookie in set_cookies])) | ||||
|         return set_cookie | ||||
|     else: | ||||
|         print(response.status_code, "⚠️ip疑似黑了,休息一会再来撸~") | ||||
|         sys.exit() | ||||
| 
 | ||||
| def getSystemConfigForNew(): | ||||
|     url = "https://lzdz1-isv.isvjcloud.com/wxCommonInfo/getSystemConfigForNew" | ||||
|     payload = f'activityId={activityId}&activityType=99' | ||||
|     headers = { | ||||
|         'Host': 'lzdz1-isv.isvjcloud.com', | ||||
|         'Accept': 'application/json', | ||||
|         'X-Requested-With': 'XMLHttpRequest', | ||||
|         'Accept-Language': 'zh-CN,zh-Hans;q=0.9', | ||||
|         'Accept-Encoding': 'gzip, deflate, br', | ||||
|         'Content-Type': 'application/x-www-form-urlencoded', | ||||
|         'Origin': 'https://lzdz1-isv.isvjcloud.com', | ||||
|         'User-Agent': ua, | ||||
|         'Connection': 'keep-alive', | ||||
|         'Referer': activityUrl, | ||||
|         'Cookie': activityCookie | ||||
|     } | ||||
|     response = requests.request("POST", url, headers=headers, data=payload) | ||||
|     refresh_cookies(response) | ||||
| 
 | ||||
| def getSimpleActInfoVo(): | ||||
|     url = "https://lzdz1-isv.isvjcloud.com/dz/common/getSimpleActInfoVo" | ||||
|     payload = f"activityId={activityId}" | ||||
|     headers = { | ||||
|         'Host': 'lzdz1-isv.isvjcloud.com', | ||||
|         'Accept': 'application/json', | ||||
|         'X-Requested-With': 'XMLHttpRequest', | ||||
|         'Accept-Language': 'zh-CN,zh-Hans;q=0.9', | ||||
|         'Accept-Encoding': 'gzip, deflate, br', | ||||
|         'Content-Type': 'application/x-www-form-urlencoded', | ||||
|         'Origin': 'https://lzdz1-isv.isvjcloud.com', | ||||
|         'User-Agent': ua, | ||||
|         'Connection': 'keep-alive', | ||||
|         'Referer': activityUrl, | ||||
|         'Cookie': activityCookie | ||||
|     } | ||||
|     response = requests.request("POST", url, headers=headers, data=payload) | ||||
|     refresh_cookies(response) | ||||
|     res = response.json() | ||||
|     if res['result']: | ||||
|         return res['data'] | ||||
|     else: | ||||
|         print(res['errorMessage']) | ||||
| 
 | ||||
| def getMyPing(index, venderId): | ||||
|     url = "https://lzdz1-isv.isvjcloud.com/customer/getMyPing" | ||||
|     payload = f"userId={venderId}&token={token}&fromType=APP" | ||||
|     headers = { | ||||
|         'Host': 'lzdz1-isv.isvjcloud.com', | ||||
|         'Accept': 'application/json', | ||||
|         'X-Requested-With': 'XMLHttpRequest', | ||||
|         'Accept-Language': 'zh-CN,zh-Hans;q=0.9', | ||||
|         'Accept-Encoding': 'gzip, deflate, br', | ||||
|         'Content-Type': 'application/x-www-form-urlencoded', | ||||
|         'Origin': 'https://lzdz1-isv.isvjcloud.com', | ||||
|         'User-Agent': ua, | ||||
|         'Connection': 'keep-alive', | ||||
|         'Referer': activityUrl, | ||||
|         'Cookie': activityCookie | ||||
|     } | ||||
|     response = requests.request("POST", url, headers=headers, data=payload) | ||||
|     refresh_cookies(response) | ||||
|     res = response.json() | ||||
|     if res['result']: | ||||
|         return res['data']['nickname'], res['data']['secretPin'] | ||||
|     else: | ||||
|         print(f"⚠️{res['errorMessage']}") | ||||
|         if index == 1 and "火爆" in res['errorMessage']: | ||||
|             print(f"\t⛈车头黑,退出本程序!") | ||||
|             sys.exit() | ||||
| 
 | ||||
| def accessLogWithAD(venderId, pin): | ||||
|     url = "https://lzdz1-isv.isvjcloud.com/common/accessLogWithAD" | ||||
|     payload = f"venderId={venderId}&code=99&pin={quote_plus(pin)}&activityId={activityId}&pageUrl={quote_plus(activityUrl)}&subType=app&adSource=null" | ||||
|     headers = { | ||||
|         'Host': 'lzdz1-isv.isvjcloud.com', | ||||
|         'Accept': 'application/json', | ||||
|         'X-Requested-With': 'XMLHttpRequest', | ||||
|         'Accept-Language': 'zh-CN,zh-Hans;q=0.9', | ||||
|         'Accept-Encoding': 'gzip, deflate, br', | ||||
|         'Content-Type': 'application/x-www-form-urlencoded', | ||||
|         'Origin': 'https://lzdz1-isv.isvjcloud.com', | ||||
|         'User-Agent': ua, | ||||
|         'Connection': 'keep-alive', | ||||
|         'Referer': activityUrl, | ||||
|         'Cookie': activityCookie | ||||
|     } | ||||
|     response = requests.request("POST", url, headers=headers, data=payload) | ||||
|     refresh_cookies(response) | ||||
| 
 | ||||
| def getSystime(): | ||||
|     url = "https://lzdz1-isv.isvjcloud.com/common/getSystime" | ||||
|     headers = { | ||||
|         'Host': 'lzdz1-isv.isvjcloud.com', | ||||
|         'Origin': 'https://lzdz1-isv.isvjcloud.com', | ||||
|         'Accept-Encoding': 'gzip, deflate, br', | ||||
|         'Cookie': activityCookie, | ||||
|         'Content-Length': '0', | ||||
|         'Connection': 'keep-alive', | ||||
|         'Accept': 'application/json', | ||||
|         'User-Agent': ua, | ||||
|         'Referer': activityUrl, | ||||
|         'Accept-Language': 'zh-CN,zh-Hans;q=0.9', | ||||
|         'X-Requested-With': 'XMLHttpRequest' | ||||
|     } | ||||
|     response = requests.request("POST", url, headers=headers) | ||||
|     refresh_cookies(response) | ||||
| 
 | ||||
| def getUserInfo(pin): | ||||
|     url = "https://lzdz1-isv.isvjcloud.com/wxActionCommon/getUserInfo" | ||||
|     payload = f"pin={quote_plus(pin)}" | ||||
|     headers = { | ||||
|         'Host': 'lzdz1-isv.isvjcloud.com', | ||||
|         'Accept': 'application/json', | ||||
|         'X-Requested-With': 'XMLHttpRequest', | ||||
|         'Accept-Language': 'zh-CN,zh-Hans;q=0.9', | ||||
|         'Accept-Encoding': 'gzip, deflate, br', | ||||
|         'Content-Type': 'application/x-www-form-urlencoded', | ||||
|         'Origin': 'https://lzdz1-isv.isvjcloud.com', | ||||
|         'User-Agent': ua, | ||||
|         'Connection': 'keep-alive', | ||||
|         'Referer': activityUrl, | ||||
|         'Cookie': activityCookie | ||||
|     } | ||||
|     response = requests.request("POST", url, headers=headers, data=payload) | ||||
|     refresh_cookies(response) | ||||
|     res = response.json() | ||||
|     if res['result']: | ||||
|         return res['data']['nickname'], res['data']['yunMidImageUrl'], res['data']['pin'] | ||||
|     else: | ||||
|         print(res['errorMessage']) | ||||
| 
 | ||||
| def activityContent(pin, pinImg, nickname): | ||||
|     url = "https://lzdz1-isv.isvjcloud.com/dingzhi/shop/league/activityContent" | ||||
|     try: | ||||
|         yunMidImageUrl = quote_plus(pinImg) | ||||
|     except: | ||||
|         yunMidImageUrl = quote_plus("https://img10.360buyimg.com/imgzone/jfs/t1/21383/2/6633/3879/5c5138d8E0967ccf2/91da57c5e2166005.jpg") | ||||
|     payload = f"activityId={activityId}&pin={quote_plus(pin)}&pinImg={yunMidImageUrl}&nick={quote_plus(nickname)}&cjyxPin=&cjhyPin=&shareUuid={shareUuid}" | ||||
|     headers = { | ||||
|         'Host': 'lzdz1-isv.isvjcloud.com', | ||||
|         'Accept': 'application/json', | ||||
|         'X-Requested-With': 'XMLHttpRequest', | ||||
|         'Accept-Language': 'zh-CN,zh-Hans;q=0.9', | ||||
|         'Accept-Encoding': 'gzip, deflate, br', | ||||
|         'Content-Type': 'application/x-www-form-urlencoded', | ||||
|         'Origin': 'https://lzdz1-isv.isvjcloud.com', | ||||
|         'User-Agent': ua, | ||||
|         'Connection': 'keep-alive', | ||||
|         'Referer': activityUrl, | ||||
|         'Cookie': f'IsvToken={token};{activityCookie}' | ||||
|     } | ||||
|     response = requests.request("POST", url, headers=headers, data=payload) | ||||
|     refresh_cookies(response) | ||||
|     res = response.json() | ||||
|     if res['result']: | ||||
|         return res['data'] | ||||
|     else: | ||||
|         print(res['errorMessage']) | ||||
|         if "活动已结束" in res['errorMessage']: | ||||
|             sys.exit() | ||||
| 
 | ||||
| def drawContent(pin): | ||||
|     url = "https://lzdz1-isv.isvjcloud.com/dingzhi/taskact/common/drawContent" | ||||
|     payload = f"activityId={activityId}&pin={quote_plus(pin)}" | ||||
|     headers = { | ||||
|         'Host': 'lzdz1-isv.isvjcloud.com', | ||||
|         'Accept': 'application/json', | ||||
|         'X-Requested-With': 'XMLHttpRequest', | ||||
|         'Accept-Language': 'zh-CN,zh-Hans;q=0.9', | ||||
|         'Accept-Encoding': 'gzip, deflate, br', | ||||
|         'Content-Type': 'application/x-www-form-urlencoded', | ||||
|         'Origin': 'https://lzdz1-isv.isvjcloud.com', | ||||
|         'User-Agent': ua, | ||||
|         'Connection': 'keep-alive', | ||||
|         'Referer': activityUrl, | ||||
|         'Cookie': activityCookie | ||||
|     } | ||||
|     requests.request("POST", url, headers=headers, data=payload) | ||||
| 
 | ||||
| def checkOpenCard(shareUuid, actorUuid): | ||||
|     url = "https://lzdz1-isv.isvjcloud.com/dingzhi/shop/league/checkOpenCard" | ||||
|     payload = f"activityId={activityId}&pin={quote_plus(pin)}&shareUuid={shareUuid}&actorUuid={actorUuid}" | ||||
|     headers = { | ||||
|         'Host': 'lzdz1-isv.isvjcloud.com', | ||||
|         'Accept': 'application/json', | ||||
|         'X-Requested-With': 'XMLHttpRequest', | ||||
|         'Accept-Language': 'zh-CN,zh-Hans;q=0.9', | ||||
|         'Accept-Encoding': 'gzip, deflate, br', | ||||
|         'Content-Type': 'application/x-www-form-urlencoded', | ||||
|         'Origin': 'https://lzdz1-isv.isvjcloud.com', | ||||
|         'User-Agent': ua, | ||||
|         'Connection': 'keep-alive', | ||||
|         'Referer': activityUrl, | ||||
|         'Cookie': activityCookie | ||||
|     } | ||||
|     response = requests.request("POST", url, headers=headers, data=payload) | ||||
|     # refresh_cookies(response) | ||||
|     res = response.json() | ||||
|     if res['result']: | ||||
|         return res['data'] | ||||
|     else: | ||||
|         print(res['errorMessage']) | ||||
|         if "活动已结束" in res['errorMessage']: | ||||
|             sys.exit() | ||||
| 
 | ||||
| def getDrawRecordHasCoupon(pin, actorUuid): | ||||
|     url = "https://lzdz1-isv.isvjcloud.com/dingzhi/taskact/common/getDrawRecordHasCoupon" | ||||
|     payload = f"activityId={activityId}&pin={quote_plus(pin)}&actorUuid={actorUuid}" | ||||
|     headers = { | ||||
|         'Host': 'lzdz1-isv.isvjcloud.com', | ||||
|         'Accept': 'application/json', | ||||
|         'X-Requested-With': 'XMLHttpRequest', | ||||
|         'Accept-Language': 'zh-CN,zh-Hans;q=0.9', | ||||
|         'Accept-Encoding': 'gzip, deflate, br', | ||||
|         'Content-Type': 'application/x-www-form-urlencoded', | ||||
|         'Origin': 'https://lzdz1-isv.isvjcloud.com', | ||||
|         'User-Agent': ua, | ||||
|         'Connection': 'keep-alive', | ||||
|         'Referer': activityUrl, | ||||
|         'Cookie': activityCookie | ||||
|     } | ||||
|     requests.request("POST", url, headers=headers, data=payload) | ||||
| 
 | ||||
| def getShareRecord(actorUuid): | ||||
|     url = "https://lzdz1-isv.isvjcloud.com/dingzhi/taskact/common/getShareRecord" | ||||
|     payload = f"activityId={activityId}&actorUuid={actorUuid}" | ||||
|     headers = { | ||||
|         'Host': 'lzdz1-isv.isvjcloud.com', | ||||
|         'Accept': 'application/json', | ||||
|         'X-Requested-With': 'XMLHttpRequest', | ||||
|         'Accept-Language': 'zh-CN,zh-Hans;q=0.9', | ||||
|         'Accept-Encoding': 'gzip, deflate, br', | ||||
|         'Content-Type': 'application/x-www-form-urlencoded', | ||||
|         'Origin': 'https://lzdz1-isv.isvjcloud.com', | ||||
|         'User-Agent': ua, | ||||
|         'Connection': 'keep-alive', | ||||
|         'Referer': activityUrl, | ||||
|         'Cookie': activityCookie | ||||
|     } | ||||
|     response = requests.request("POST", url, headers=headers, data=payload) | ||||
|     res = response.json() | ||||
|     if res['result']: | ||||
|         return res['data'] | ||||
|     else: | ||||
|         print(res['errorMessage']) | ||||
| 
 | ||||
| def saveTask(actorUuid, shareUuid, pin, taskType, taskValue): | ||||
|     url = "https://lzdz1-isv.isvjcloud.com/dingzhi/shop/league/saveTask" | ||||
|     payload = f"activityId={activityId}&actorUuid={actorUuid}&pin={quote_plus(pin)}&shareUuid={shareUuid}&taskType={taskType}&taskValue={taskValue}&taskUuid=" | ||||
|     headers = { | ||||
|         'Host': 'lzdz1-isv.isvjcloud.com', | ||||
|         'Accept': 'application/json', | ||||
|         'X-Requested-With': 'XMLHttpRequest', | ||||
|         'Accept-Language': 'zh-CN,zh-Hans;q=0.9', | ||||
|         'Accept-Encoding': 'gzip, deflate, br', | ||||
|         'Content-Type': 'application/x-www-form-urlencoded', | ||||
|         'Origin': 'https://lzdz1-isv.isvjcloud.com', | ||||
|         'User-Agent': ua, | ||||
|         'Connection': 'keep-alive', | ||||
|         'Referer': activityUrl, | ||||
|         'Cookie': activityCookie | ||||
|     } | ||||
|     response = requests.request("POST", url, headers=headers, data=payload) | ||||
|     res = response.json() | ||||
|     if res['result']: | ||||
|         print(res['data']) | ||||
|         return res['data'] | ||||
|     else: | ||||
|         print(res['errorMessage']) | ||||
| 
 | ||||
| def bindWithVender(cookie, venderId): | ||||
|     try: | ||||
|         shopcard_url0 = f"https://lzdz1-isv.isvjcloud.com/dingzhi/shop/league/activity/7854908?activityId={activityId}&shareUuid={shareUuid}" | ||||
|         shopcard_url = f"https://shopmember.m.jd.com/shopcard/?venderId={venderId}&channel=401&returnUrl={quote_plus(shopcard_url0)}" | ||||
|         body = {"venderId": venderId, "bindByVerifyCodeFlag": 1,"registerExtend": {},"writeChildFlag":0, "channel": 401} | ||||
|         url = f'https://api.m.jd.com/client.action?appid=jd_shop_member&functionId=bindWithVender&body={json.dumps(body)}&client=H5&clientVersion=9.2.0&uuid=88888&h5st=20220614102046318%3B7327310984571307%3Bef79a%3Btk02wa31b1c7718neoZNHBp75rw4pE%2Fw7fXko2SdFCd1vIeWy005pEHdm0lw2CimWpaw3qc9il8r9xVLHp%2Bhzmo%2B4swg%3Bdd9526fc08234276b392435c8623f4a737e07d4503fab90bf2cd98d2a3a778ac%3B3.0%3B1655173246318' | ||||
|         headers = { | ||||
|             'Host': 'api.m.jd.com', | ||||
|             'Cookie': cookie, | ||||
|             'Accept-Encoding': 'gzip, deflate, br', | ||||
|             'Connection': 'keep-alive', | ||||
|             'Accept': '*/*', | ||||
|             'User-Agent': ua, | ||||
|             'Referer': shopcard_url | ||||
|         } | ||||
|         response = requests.get(url=url, headers=headers, timeout=30).text | ||||
|         res = json.loads(response) | ||||
|         if res['success']: | ||||
|             return res['message'] | ||||
|     except Exception as e: | ||||
|         print(e) | ||||
| 
 | ||||
| def getShopOpenCardInfo(cookie, venderId): | ||||
|     shopcard_url0 = f"https://lzdz1-isv.isvjcloud.com/dingzhi/shop/league/activity/7854908?activityId={activityId}&shareUuid={shareUuid}" | ||||
|     shopcard_url = f"https://shopmember.m.jd.com/shopcard/?venderId={venderId}&channel=401&returnUrl={quote_plus(shopcard_url0)}" | ||||
|     try: | ||||
|         body = {"venderId": str(venderId), "channel": "401"} | ||||
|         url = f'https://api.m.jd.com/client.action?appid=jd_shop_member&functionId=getShopOpenCardInfo&body={json.dumps(body)}&client=H5&clientVersion=9.2.0&uuid=88888' | ||||
|         headers = { | ||||
|             'Host': 'api.m.jd.com', | ||||
|             'Accept': '*/*', | ||||
|             'Connection': 'keep-alive', | ||||
|             'Cookie': cookie, | ||||
|             'User-Agent': ua, | ||||
|             'Accept-Language': 'zh-cn', | ||||
|             'Referer': shopcard_url, | ||||
|             'Accept-Encoding': 'gzip, deflate' | ||||
|         } | ||||
|         response = requests.get(url=url, headers=headers, timeout=5).text | ||||
|         res = json.loads(response) | ||||
|         if res['success']: | ||||
|             venderCardName = res['result']['shopMemberCardInfo']['venderCardName'] | ||||
|             return venderCardName | ||||
|         else: | ||||
|             return venderId | ||||
|     except: | ||||
|         return venderId | ||||
| 
 | ||||
| 
 | ||||
| if __name__ == '__main__': | ||||
|     r = redis_conn() | ||||
|     try: | ||||
|         cks = getCk | ||||
|         if not cks: | ||||
|             sys.exit() | ||||
|     except: | ||||
|         print("未获取到有效COOKIE,退出程序!") | ||||
|         sys.exit() | ||||
|     global shareUuid, inviteSuccNum, activityUrl, firstCk | ||||
|     inviteSuccNum = 0 | ||||
|     if len(cks) == 1: | ||||
|         shareUuid = inviterUuid | ||||
|         activityUrl = activity_url | ||||
|     else: | ||||
|         shareUuid = remote_redis(f"lzdz1_{activityId}", 2) | ||||
|         activityUrl = f"https://lzdz1-isv.isvjcloud.com/dingzhi/shop/league/activity/5929859?activityId={activityId}&shareUuid={shareUuid}" | ||||
|     num = 0 | ||||
|     for cookie in cks[:]: | ||||
|         num += 1 | ||||
|         if num == 1: | ||||
|             firstCk = cookie | ||||
|         if num % 8 == 0: | ||||
|             print("⏰等待10s,休息一下") | ||||
|             time.sleep(10) | ||||
|         global ua, activityCookie, token | ||||
|         ua = userAgent() | ||||
|         try: | ||||
|             pt_pin = re.compile(r'pt_pin=(.*?);').findall(cookie)[0] | ||||
|             pt_pin = unquote_plus(pt_pin) | ||||
|         except IndexError: | ||||
|             pt_pin = f'用户{num}' | ||||
|         print(f'\n******开始【京东账号{num}】{pt_pin} *********\n') | ||||
|         print(datetime.now()) | ||||
| 
 | ||||
|         token = getToken(cookie, r) | ||||
|         if token is None: | ||||
|             if num == 1: | ||||
|                 print(f"⚠️车头获取Token失败,退出本程序!") | ||||
|                 sys.exit() | ||||
|             print(f"⚠️获取Token失败!⏰等待3s") | ||||
|             time.sleep(3) | ||||
|             continue | ||||
|         time.sleep(0.5) | ||||
|         activityCookie = getActivity() | ||||
|         time.sleep(0.5) | ||||
|         getSystemConfigForNew() | ||||
|         time.sleep(0.3) | ||||
|         getSimAct = getSimpleActInfoVo() | ||||
|         if getSimAct: | ||||
|             venderId = getSimAct['venderId'] | ||||
|         else: | ||||
|             venderId = "1000010825" | ||||
|         time.sleep(0.2) | ||||
|         getPin = getMyPing(num, venderId) | ||||
|         if getPin is not None: | ||||
|             nickname = getPin[0] | ||||
|             secretPin = getPin[1] | ||||
|             time.sleep(0.5) | ||||
|             accessLogWithAD(venderId, secretPin) | ||||
|             time.sleep(0.5) | ||||
|             userInfo = getUserInfo(secretPin) | ||||
|             time.sleep(0.8) | ||||
|             nickname = userInfo[0] | ||||
|             yunMidImageUrl = userInfo[1] | ||||
|             pin = userInfo[2] | ||||
|             actContent = activityContent(pin, yunMidImageUrl, nickname) | ||||
|             if not actContent: | ||||
|                 if num == 1: | ||||
|                     print("⚠️无法获取车头邀请码,退出本程序!") | ||||
|                     sys.exit() | ||||
|                 continue | ||||
|             hasEnd = actContent['hasEnd'] | ||||
|             if hasEnd: | ||||
|                 print("活动已结束,下次早点来~") | ||||
|                 sys.exit() | ||||
|             print(f"✅开启【{actContent['activityName']}】活动\n") | ||||
| 
 | ||||
|             actorUuid = actContent['actorUuid'] | ||||
|             followShop = actContent['followShop']['allStatus'] | ||||
|             addSku = actContent['addSku']['allStatus'] | ||||
|             print(f"邀请码->: {actorUuid}") | ||||
|             print(f"准备助力->: {shareUuid}") | ||||
|             time.sleep(0.5) | ||||
|             drawContent(pin) | ||||
|             time.sleep(0.5) | ||||
|             checkOC = checkOpenCard(shareUuid, actorUuid) | ||||
|             allOpenCard = checkOC['allOpenCard'] | ||||
|             assistStatus = checkOC['assistStatus'] | ||||
|             beanNum = checkOC['beanNum'] | ||||
|             cardList = checkOC['cardList'] | ||||
|             if allOpenCard: | ||||
|                 print("已完成全部开卡任务") | ||||
|                 if assistStatus == 0: | ||||
|                     print("已经助力过你~") | ||||
|                 elif assistStatus == 3: | ||||
|                     print("已助力过其他好友~") | ||||
|                 elif assistStatus == 1: | ||||
|                     print("已完成开卡关注任务,未助力过好友~") | ||||
|                     assStat = True | ||||
|                 else: | ||||
|                     # print('assistStatus:', assistState0) | ||||
|                     assStat = True | ||||
|             else: | ||||
|                 print("现在去开卡") | ||||
|                 openCardLists = [(int(i['value']), i['name']) for i in cardList if i['status'] == 0] | ||||
|                 for shop in openCardLists: | ||||
|                     print(f"去开卡 {shop[1]} {shop[0]}") | ||||
|                     venderId = shop[0] | ||||
|                     venderCardName = shop[1] | ||||
|                     getShopOpenCardInfo(cookie, venderId) | ||||
|                     open_result = bindWithVender(cookie, venderId) | ||||
|                     if open_result is not None: | ||||
|                         if "火爆" in open_result or "失败" in open_result: | ||||
|                             time.sleep(1.5) | ||||
|                             print("\t尝试重新入会 第1次") | ||||
|                             open_result = bindWithVender(cookie, venderId) | ||||
|                             if "火爆" in open_result or "失败" in open_result: | ||||
|                                 time.sleep(1.5) | ||||
|                                 print("\t尝试重新入会 第2次") | ||||
|                                 open_result = bindWithVender(cookie, venderId) | ||||
|                         if "火爆" in open_result or "失败" in open_result: | ||||
|                             print(f"\t⛈⛈{venderCardName} {open_result}") | ||||
|                             assStat = False | ||||
|                         else: | ||||
|                             print(f"\t🎉🎉{venderCardName} {open_result}") | ||||
|                             assStat = True | ||||
|                     time.sleep(1.5) | ||||
|             activityContent(pin, yunMidImageUrl, nickname) | ||||
|             time.sleep(0.5) | ||||
|             drawContent(pin) | ||||
|             print("现在去一键关注店铺") | ||||
|             saveTask(actorUuid, shareUuid, pin, 1, 1) | ||||
|             time.sleep(0.5) | ||||
|             print("现在去一键加购") | ||||
|             saveTask(actorUuid, shareUuid, pin, 2, 2) | ||||
|             time.sleep(0.5) | ||||
|             getSR = getShareRecord(actorUuid) | ||||
|             if num == 1: | ||||
|                 if getSR: | ||||
|                     print(f"🎉🎉🎉已经邀请{len(getSR)}人") | ||||
|             if num == 1: | ||||
|                 print(f"后面账号全部助力 {actorUuid}") | ||||
|             if num == 1: | ||||
|                 shareUuid = actorUuid | ||||
|                 activityUrl = f"https://lzdz1-isv.isvjcloud.com/dingzhi/shop/league/activity/5929859?activityId={activityId}&shareUuid={shareUuid}" | ||||
| 
 | ||||
|         time.sleep(3) | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Faker
						Faker