#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ File: jd_dpcj.py(店铺抽奖-JK) Author: HarbourJ Date: 2022/10/15 23:00 TG: https://t.me/HarbourToulu TgChat: https://t.me/HarbourChat cron: 1 1 1 1 1 1 new Env('店铺抽奖-JK'); ActivityEntry:https://shop.m.jd.com/shop/lottery?shopId=xxxxx&venderId=xxxxx Description: 变量:export DPCJID="shopId1&shopId2" #变量为店铺🆔 """ import requests, time, re, os, sys, json from datetime import datetime from sendNotify import * from urllib.parse import quote_plus, unquote_plus import warnings warnings.filterwarnings("ignore", category=DeprecationWarning) from functools import partial print = partial(print, flush=True) try: from jd_sign import * except ImportError as e: print(e) if "No module" in str(e): print("请先运行Faker库依赖一键安装脚本(jd_check_dependent.py),安装jd_sign.so依赖") sys.exit() try: from jdCookie import get_cookies getCk = get_cookies() except: print("请先下载依赖脚本,\n下载链接:https://raw.githubusercontent.com/HarbourJ/HarbourToulu/main/jdCookie.py") sys.exit(3) dpcj = os.environ.get("DPCJID") if os.environ.get("DPCJID") else "" if not dpcj: print("⚠️未发现有效店铺签到活动变量DPCJID,退出程序!") sys.exit() def check(ua, ck): try: url = 'https://me-api.jd.com/user_new/info/GetJDUserInfoUnion' header = { "Host": "me-api.jd.com", "Accept": "*/*", "Connection": "keep-alive", "Cookie": ck, "User-Agent": ua, "Accept-Language": "zh-cn", "Referer": "https://home.m.jd.com/myJd/newhome.action?sceneval=2&ufc=&", "Accept-Encoding": "gzip, deflate", } result = requests.get(url=url, headers=header, timeout=None).text codestate = json.loads(result) if codestate['retcode'] == '1001': msg = "⚠️当前ck已失效,请检查" return {'code': 1001, 'data': msg} elif codestate['retcode'] == '0' and 'userInfo' in codestate['data']: nickName = codestate['data']['userInfo']['baseInfo']['nickname'] return {'code': 200, 'name': nickName, 'ck': ck} except Exception as e: return {'code': 0, 'data': e} def get_time(): time_now = round(time.time() * 1000) return time_now def getSignInfo(ua, ck, shopId, venderId): url = f"https://api.m.jd.com/client.action?functionId=whx_getSignInfo&body=%7B%22shopId%22%3A%22{shopId}%22%2C%22venderId%22%3A%22{venderId}%22%2C%22source%22%3A%22m-shop%22%7D&t=1665848303470&appid=shop_view&clientVersion=11.0.0&client=wh5&area=1_88_2888_8&uuid=16587341419872043913507" headers = { 'accept': '*/*', 'accept-encoding': 'gzip, deflate, br', 'accept-language': 'zh-CN,zh;q=0.9', 'cookie': ck, 'origin': 'https://shop.m.jd.com', 'referer': 'https://shop.m.jd.com/', 'user-agent': ua } response = requests.request("GET", url, headers=headers) res = response.json() return res def sign(ua, ck, shopId, venderId): url = f"https://api.m.jd.com/client.action?functionId=whx_sign&body=%7B%22shopId%22%3A%22{shopId}%22%2C%22venderId%22%3A%22{venderId}%22%2C%22source%22%3A%22m-shop%22%7D&t=1665847166130&appid=shop_view&clientVersion=11.0.0&client=wh5&area=1_88_2888_8&uuid=16587341419872043913507" headers = { 'accept': '*/*', 'accept-encoding': 'gzip, deflate, br', 'accept-language': 'zh-CN,zh;q=0.9', 'cookie': ck, 'origin': 'https://shop.m.jd.com', 'referer': 'https://shop.m.jd.com/', 'user-agent': ua } response = requests.request("GET", url, headers=headers) res = response.json() return res def get_venderId(ua, ck, shopId): url = f'https://api.m.jd.com/client.action?functionId=whx_getMShopOutlineInfo&body=%7B%22shopId%22%3A%22{shopId}%22%2C%22source%22%3A%22m-shop%22%7D&appid=shop_view&clientVersion=11.0.0&client=wh5' headers = { 'accept': '*/*', 'accept-encoding': 'gzip, deflate, br', 'accept-language': 'zh-CN,zh;q=0.9', 'origin': 'https://shop.m.jd.com', 'referer': 'https://shop.m.jd.com/', 'user-agent': ua, 'cookie': ck } response = requests.request("GET", url, headers=headers) res = response.json() try: if res['success']: venderId = res['data']['shopInfo']['venderId'] return venderId else: return shopId except: return if __name__ == "__main__": global msg msg = '' shopIds = dpcj.split('&') print(f"✅成功获取{len(shopIds)}个DPCJ🆔变量") try: cks = getCk if not cks: sys.exit() except: print("未获取到有效COOKIE,退出程序!") sys.exit() num = 0 for cookie in cks: num += 1 if num % 9 == 0: print("⏰等待3s,休息一下") time.sleep(3) 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()) result = check(ua, cookie) if result['code'] != 200: print(f"‼️{result['data']}") continue signRewards = [] for shopId in shopIds: print(f"{shopId}") venderId = get_venderId(ua, cookie, shopId) time.sleep(0.2) if not venderId: continue signInfo = getSignInfo(ua, cookie, shopId, venderId) time.sleep(0.2) try: if signInfo['isSuccess']: try: signInfo_ = signInfo['result']['result']['signInfo'] except: print(f"\t⛈店铺抽奖已过期") continue if signInfo_['isSign'] == 2: print(f"\t⛈店铺已抽奖") else: toSign = sign(ua, cookie, shopId, venderId) if toSign['isSuccess']: if toSign['result']['result']['isWin']: signReward = toSign['result']['result']['signReward']['name'] print(f"\t🎉{signReward}") if "东券" in signReward or "购原价" in signReward: continue signRewards.append(signReward) else: print("\t💨💨💨") except: continue # time.sleep(0.3) if signRewards: price = ','.join(signRewards) msg += f'【账号{num}】{pt_pin} 🎉{price}\n' time.sleep(0.5) title = "🗣消息提醒:店铺抽奖-JK" msg = f"⏰{str(datetime.now())[:19]}\n" + msg send(title, msg)