mirror of https://github.com/KingRan/KR.git
189 lines
8.5 KiB
Python
189 lines
8.5 KiB
Python
|
#!/usr/bin/env python3
|
|||
|
# -*- coding: utf-8 -*
|
|||
|
"""
|
|||
|
领京豆-早起福利,每天8点前访问领取额外京豆奖励
|
|||
|
2021-07-05 修改增加错误重试
|
|||
|
"""
|
|||
|
|
|||
|
cookies = ''
|
|||
|
|
|||
|
# 建议调整一下的参数
|
|||
|
# UA 可自定义你的,注意格式
|
|||
|
UserAgent = 'jdappiPhone10.0.413.7ca6eb91a888be488f194b9d9216cf711dd1b221anetwork/wifiADID/8679C062-A41A-4A25-88F1-50A7A3EEF34Amodel/iPhone8,1addressid/3723896896appBuild/167707jdSupportDarkMode/0Mozilla/5.0 (iPhone CPU iPhone OS 13_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148supportJDSHWK/1'
|
|||
|
|
|||
|
import os, re
|
|||
|
try:
|
|||
|
import requests
|
|||
|
except Exception as e:
|
|||
|
print(e, "\n缺少requests 模块,请执行命令安装:python3 -m pip install requests")
|
|||
|
exit(3)
|
|||
|
from urllib.parse import unquote
|
|||
|
import json
|
|||
|
import time
|
|||
|
|
|||
|
requests.packages.urllib3.disable_warnings()
|
|||
|
|
|||
|
ss = requests.session()
|
|||
|
|
|||
|
pwd = os.path.dirname(os.path.abspath(__file__)) + os.sep
|
|||
|
t = time.time()
|
|||
|
|
|||
|
|
|||
|
class getJDCookie(object):
|
|||
|
# 适配各种平台环境ck
|
|||
|
def getckfile(self):
|
|||
|
if os.path.exists(pwd + 'JDCookies.txt'):
|
|||
|
return pwd + 'JDCookies.txt'
|
|||
|
elif os.path.exists('/ql/config/env.sh'):
|
|||
|
print("当前环境青龙面板新版")
|
|||
|
return '/ql/config/env.sh'
|
|||
|
elif os.path.exists('/ql/config/cookie.sh'):
|
|||
|
print("当前环境青龙面板旧版")
|
|||
|
return '/ql/config/env.sh'
|
|||
|
elif os.path.exists('/jd/config/config.sh'):
|
|||
|
print("当前环境V4")
|
|||
|
return '/jd/config/config.sh'
|
|||
|
elif os.path.exists(pwd + 'JDCookies.txt'):
|
|||
|
return pwd + 'JDCookies.txt'
|
|||
|
return pwd + 'JDCookies.txt'
|
|||
|
|
|||
|
# 获取cookie
|
|||
|
def getCookie(self):
|
|||
|
global cookies
|
|||
|
ckfile = self.getckfile()
|
|||
|
try:
|
|||
|
if os.path.exists(ckfile):
|
|||
|
with open(ckfile, "r", encoding="utf-8") as f:
|
|||
|
cks = f.read()
|
|||
|
f.close()
|
|||
|
if 'pt_key=' in cks and 'pt_pin=' in cks:
|
|||
|
r = re.compile(r"pt_key=.*?pt_pin=.*?;", re.M | re.S | re.I)
|
|||
|
cks = r.findall(cks)
|
|||
|
if len(cks) > 0:
|
|||
|
if 'JDCookies.txt' in ckfile:
|
|||
|
print("当前获取使用 JDCookies.txt 的cookie")
|
|||
|
cookies = ''
|
|||
|
for i in cks:
|
|||
|
cookies += i
|
|||
|
return
|
|||
|
else:
|
|||
|
with open(pwd + 'JDCookies.txt', "w", encoding="utf-8") as f:
|
|||
|
cks = "#多账号换行,以下示例:(通过正则获取此文件的ck,理论上可以自定义名字标记ck,也可以随意摆放ck)\n账号1【Curtinlv】cookie1;\n账号2【TopStyle】cookie2;"
|
|||
|
f.write(cks)
|
|||
|
f.close()
|
|||
|
if "JD_COOKIE" in os.environ:
|
|||
|
if len(os.environ["JD_COOKIE"]) > 10:
|
|||
|
cookies = os.environ["JD_COOKIE"]
|
|||
|
print("已获取并使用Env环境 Cookie")
|
|||
|
except Exception as e:
|
|||
|
print(f"【getCookie Error】{e}")
|
|||
|
|
|||
|
# 检测cookie格式是否正确
|
|||
|
def getUserInfo(self, ck, pinName, userNum):
|
|||
|
url = 'https://me-api.jd.com/user_new/info/GetJDUserInfoUnion?orgFlag=JD_PinGou_New&callSource=mainorder&channel=4&isHomewhite=0&sceneval=2&sceneval=2&callback=GetJDUserInfoUnion'
|
|||
|
headers = {
|
|||
|
'Cookie': ck,
|
|||
|
'Accept': '*/*',
|
|||
|
'Connection': 'close',
|
|||
|
'Referer': 'https://home.m.jd.com/myJd/home.action',
|
|||
|
'Accept-Encoding': 'gzip, deflate, br',
|
|||
|
'Host': 'me-api.jd.com',
|
|||
|
'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.2 Mobile/15E148 Safari/604.1',
|
|||
|
'Accept-Language': 'zh-cn'
|
|||
|
}
|
|||
|
try:
|
|||
|
resp = requests.get(url=url, verify=False, headers=headers, timeout=60).text
|
|||
|
r = re.compile(r'GetJDUserInfoUnion.*?\((.*?)\)')
|
|||
|
result = r.findall(resp)
|
|||
|
userInfo = json.loads(result[0])
|
|||
|
nickname = userInfo['data']['userInfo']['baseInfo']['nickname']
|
|||
|
return ck, nickname
|
|||
|
except Exception:
|
|||
|
context = f"账号{userNum}【{pinName}】Cookie 已失效!请重新获取。"
|
|||
|
print(context)
|
|||
|
return ck, False
|
|||
|
|
|||
|
def iscookie(self):
|
|||
|
"""
|
|||
|
:return: cookiesList,userNameList,pinNameList
|
|||
|
"""
|
|||
|
cookiesList = []
|
|||
|
userNameList = []
|
|||
|
pinNameList = []
|
|||
|
if 'pt_key=' in cookies and 'pt_pin=' in cookies:
|
|||
|
r = re.compile(r"pt_key=.*?pt_pin=.*?;", re.M | re.S | re.I)
|
|||
|
result = r.findall(cookies)
|
|||
|
if len(result) >= 1:
|
|||
|
print("您已配置{}个账号".format(len(result)))
|
|||
|
u = 1
|
|||
|
for i in result:
|
|||
|
r = re.compile(r"pt_pin=(.*?);")
|
|||
|
pinName = r.findall(i)
|
|||
|
pinName = unquote(pinName[0])
|
|||
|
# 获取账号名
|
|||
|
ck, nickname = self.getUserInfo(i, pinName, u)
|
|||
|
if nickname != False:
|
|||
|
cookiesList.append(ck)
|
|||
|
userNameList.append(nickname)
|
|||
|
pinNameList.append(pinName)
|
|||
|
else:
|
|||
|
u += 1
|
|||
|
continue
|
|||
|
u += 1
|
|||
|
if len(cookiesList) > 0 and len(userNameList) > 0:
|
|||
|
return cookiesList, userNameList, pinNameList
|
|||
|
else:
|
|||
|
print("没有可用Cookie,已退出")
|
|||
|
exit(3)
|
|||
|
else:
|
|||
|
print("cookie 格式错误!...本次操作已退出")
|
|||
|
exit(4)
|
|||
|
else:
|
|||
|
print("cookie 格式错误!...本次操作已退出")
|
|||
|
exit(4)
|
|||
|
|
|||
|
|
|||
|
getCk = getJDCookie()
|
|||
|
getCk.getCookie()
|
|||
|
|
|||
|
|
|||
|
def start():
|
|||
|
print("### 领京豆-早起福利 ###")
|
|||
|
global cookiesList, userNameList, pinNameList
|
|||
|
cookiesList, userNameList, pinNameList = getCk.iscookie()
|
|||
|
for ck in cookiesList:
|
|||
|
url = 'https://api.m.jd.com/client.action?functionId=morningGetBean&area=22_1930_50948_52157&body=%7B%22rnVersion%22%3A%224.7%22%2C%22fp%22%3A%22-1%22%2C%22eid%22%3A%22%22%2C%22shshshfp%22%3A%22-1%22%2C%22userAgent%22%3A%22-1%22%2C%22shshshfpa%22%3A%22-1%22%2C%22referUrl%22%3A%22-1%22%2C%22jda%22%3A%22-1%22%7D&build=167724&client=apple&clientVersion=10.0.6&d_brand=apple&d_model=iPhone12%2C8&eid=eidI1aaf8122bas5nupxDQcTRriWjt7Slv2RSJ7qcn6zrB99mPt31yO9nye2dnwJ/OW%2BUUpYt6I0VSTk7xGpxEHp6sM62VYWXroGATSgQLrUZ4QHLjQw&isBackground=N&joycious=60&lang=zh_CN&networkType=wifi&networklibtype=JDNetworkBaseAF&openudid=32280b23f8a48084816d8a6c577c6573c162c174&osVersion=14.4&partner=apple&rfs=0000&scope=01&screen=750%2A1334&sign=0c19e5962cea97520c1ef9a2e67dda60&st=1625354180413&sv=112&uemps=0-0&uts=0f31TVRjBSsqndu4/jgUPz6uymy50MQJSPYvHJMKdY9TUw/AQc1o/DLA/rOTDwEjG4Ar9s7IY4H6IPf3pAz7rkIVtEeW7XkXSOXGvEtHspPvqFlAueK%2B9dfB7ZbI91M9YYXBBk66bejZnH/W/xDy/aPsq2X3k4dUMOkS4j5GHKOGQO3o2U1rhx5O70ZrLaRm7Jy/DxCjm%2BdyfXX8v8rwKw%3D%3D&uuid=hjudwgohxzVu96krv/T6Hg%3D%3D&wifiBssid=c99b216a4acd3bce759e369eaeeafd7'
|
|||
|
header = {
|
|||
|
'Cookie': ck,
|
|||
|
'Accept': '*/*',
|
|||
|
'Connection': 'keep-alive',
|
|||
|
'Accept-Encoding': 'gzip, deflate, br',
|
|||
|
'User-Agent': 'jdapp;iPhone;10.0.6;14.1;99c79220e330f7bfeff44d53f29b7e43017dc898;network/wifi;model/iPhone10,1;addressid/138664467;appBuild/167724;jdSupportDarkMode/0;Mozilla/5.0 (iPhone; CPU iPhone OS 14_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/',
|
|||
|
'Accept-Language': 'zh-Hans-CN;q=1',
|
|||
|
'Host': 'api.m.jd.com'
|
|||
|
}
|
|||
|
maxTryNum = 20
|
|||
|
tries=1
|
|||
|
print(f"账号:{userNameList[cookiesList.index(ck)]}")
|
|||
|
for tries in range(maxTryNum):
|
|||
|
try:
|
|||
|
resp = requests.get(url=url, headers=header, verify=False, timeout=30).json()
|
|||
|
print(resp['data']['bizMsg'])
|
|||
|
if int(resp['data']['awardResultFlag']) == 1:
|
|||
|
print(f"获得{resp['data']['beanNum']}京豆")
|
|||
|
else:
|
|||
|
print("任务失败,可能已过时间或者已经领取过!")
|
|||
|
break
|
|||
|
except:
|
|||
|
if tries < (maxTryNum - 1):
|
|||
|
continue
|
|||
|
else:
|
|||
|
print("重试了20次仍然无法获取返回数据, 任务失败!")
|
|||
|
break
|
|||
|
|
|||
|
|
|||
|
print("运行结束")
|
|||
|
|
|||
|
|
|||
|
if __name__ == '__main__':
|
|||
|
start()
|