更新 叮叮联盟_api.py
This commit is contained in:
parent
6f8ae3b1df
commit
70670de652
@ -1,5 +1,5 @@
|
|||||||
# --------------------------------注释区--------------------------------
|
# --------------------------------注释区--------------------------------
|
||||||
# 入口:http://nmub7w.jlnrj.cn?mid=1786918&r=OKgDUXIa&e=1730731520
|
# 入口:http://ghpuy2w5.imedq.cn?mid=1786918&r=6uv9umK5&e=1731916630
|
||||||
#
|
#
|
||||||
# 需抓取数据:
|
# 需抓取数据:
|
||||||
# * 填写穿透出来的api接口
|
# * 填写穿透出来的api接口
|
||||||
@ -8,6 +8,16 @@
|
|||||||
#
|
#
|
||||||
# 变量名:yuanshen_api
|
# 变量名:yuanshen_api
|
||||||
#
|
#
|
||||||
|
# 如需自动提现 填写wxpusher的apptoken到 yuanshen_apptoken
|
||||||
|
# 使用接受推送的微信号关注你自己的主题填写uid到 yuanshen_wxpusheruid
|
||||||
|
# uid 可以在wxpusher微信公众号 下方我的-我的uid找到
|
||||||
|
# 不需可不填
|
||||||
|
#
|
||||||
|
# !!!!因自己填写错误导致口令被盗或丢失一概不负责!!!
|
||||||
|
# !!!!因自己填写错误导致口令被盗或丢失一概不负责!!!
|
||||||
|
# !!!!因自己填写错误导致口令被盗或丢失一概不负责!!!
|
||||||
|
# !!!!因自己填写错误导致口令被盗或丢失一概不负责!!!
|
||||||
|
# !!!!因自己填写错误导致口令被盗或丢失一概不负责!!!
|
||||||
# --------------------------------祈求区--------------------------------
|
# --------------------------------祈求区--------------------------------
|
||||||
# _ooOoo_
|
# _ooOoo_
|
||||||
# o8888888o
|
# o8888888o
|
||||||
@ -32,6 +42,7 @@
|
|||||||
# 佛祖保佑 永无BUG
|
# 佛祖保佑 永无BUG
|
||||||
# 佛祖镇楼 BUG辟邪
|
# 佛祖镇楼 BUG辟邪
|
||||||
# --------------------------------代码区--------------------------------
|
# --------------------------------代码区--------------------------------
|
||||||
|
from functools import wraps
|
||||||
import requests
|
import requests
|
||||||
import time
|
import time
|
||||||
import os
|
import os
|
||||||
@ -48,11 +59,11 @@ from datetime import datetime,timedelta
|
|||||||
import re
|
import re
|
||||||
logging.basicConfig(level=logging.INFO, format='[%(levelname)s] ===> %(message)s')
|
logging.basicConfig(level=logging.INFO, format='[%(levelname)s] ===> %(message)s')
|
||||||
code = "叮叮联盟_api版"
|
code = "叮叮联盟_api版"
|
||||||
ver = "1.6"
|
ver = "1.8"
|
||||||
envname = "yuanshen_api"
|
envname = "yuanshen_api"
|
||||||
|
|
||||||
debug = False #debug模式 开启即从脚本内部获取环境变量
|
debug = False #debug模式 开启即从脚本内部获取环境变量
|
||||||
debugcookie = "" #debug模式cookie
|
debugcookie = "127.0.0.1:5000" #debug模式cookie
|
||||||
|
|
||||||
is_bulletin = False #公告开关
|
is_bulletin = False #公告开关
|
||||||
is_toulu = False #偷撸公告开关
|
is_toulu = False #偷撸公告开关
|
||||||
@ -71,7 +82,27 @@ def get_sm():
|
|||||||
except:
|
except:
|
||||||
logging.error("联网获取检测文章列表失败!")
|
logging.error("联网获取检测文章列表失败!")
|
||||||
bizlist = []
|
bizlist = []
|
||||||
|
def retry(exceptions = Exception, tries=5, delay=2, backoff=2):
|
||||||
|
"""
|
||||||
|
简单的重试 module,如果重试失败则抛出错误。
|
||||||
|
"""
|
||||||
|
def decorator(func):
|
||||||
|
@wraps(func)
|
||||||
|
def wrapper(*args, **kwargs):
|
||||||
|
# 每次调用时初始化独立的重试计数和延迟时间
|
||||||
|
_tries, _delay = tries, delay
|
||||||
|
while _tries > 1:
|
||||||
|
try:
|
||||||
|
return func(*args, **kwargs)
|
||||||
|
except exceptions as e:
|
||||||
|
print(f"发生错误:[{e}], Retrying in {_delay} seconds ...")
|
||||||
|
time.sleep(_delay)
|
||||||
|
_tries -= 1
|
||||||
|
_delay *= backoff
|
||||||
|
# 最后一次尝试
|
||||||
|
return func(*args, **kwargs)
|
||||||
|
return wrapper
|
||||||
|
return decorator
|
||||||
class env():
|
class env():
|
||||||
"""
|
"""
|
||||||
env模块,获取cookie并转成列表,统计时间,提示脚本开始结束,检测一些配置,try except异常处理
|
env模块,获取cookie并转成列表,统计时间,提示脚本开始结束,检测一些配置,try except异常处理
|
||||||
@ -248,23 +279,53 @@ class yuanshen:
|
|||||||
self.bz = cookie['wxname']
|
self.bz = cookie['wxname']
|
||||||
logging.info(f'[{self.bz}]开始运行')
|
logging.info(f'[{self.bz}]开始运行')
|
||||||
|
|
||||||
|
def get_f(self):
|
||||||
|
if os.path.exists(f'ddlm.json'):
|
||||||
|
j = json.load(open('ddlm.json','r'))
|
||||||
|
for i in j:
|
||||||
|
if i['Wxid'] == self.Wxid:
|
||||||
|
return i['f']
|
||||||
|
return None
|
||||||
|
else:
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
def login(self):
|
def login(self):
|
||||||
|
f = self.get_f()
|
||||||
|
if not f:
|
||||||
|
f = env().random_str(charset='1234567abcdef',length=32, to_lower=True)
|
||||||
|
if os.path.exists('ddlm.json'):
|
||||||
|
with open('ddlm.json', 'r', encoding='utf-8') as file:
|
||||||
|
d = json.load(file)
|
||||||
|
else:
|
||||||
|
d = []
|
||||||
|
|
||||||
|
d.append({'Wxid': self.Wxid, 'f': f})
|
||||||
|
|
||||||
|
with open('ddlm.json', 'w', encoding='utf-8') as file:
|
||||||
|
json.dump(d, file, indent=4)
|
||||||
|
|
||||||
headers = {
|
headers = {
|
||||||
'User-Agent': ua,
|
"Host": "api.jiudingliliang.com",
|
||||||
# 'Accept-Encoding': 'gzip, deflate, br, zstd',
|
"Connection": "keep-alive",
|
||||||
'Content-Type': 'application/json',
|
"Content-Length": "28",
|
||||||
'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Android WebView";v="126"',
|
"F-RTYFGHVBN": "",
|
||||||
'sec-ch-ua-mobile': '?1',
|
"Authorization": "Bearer",
|
||||||
'Authorization': 'Bearer',
|
"sec-ch-ua-platform": "\"Android\"",
|
||||||
'F-RTYFGHVBN': '0cb5cc12b50dddc84c3066433e88194f',
|
"sec-ch-ua": "\"Chromium\";v=\"130\", \"Android WebView\";v=\"130\", \"Not?A_Brand\";v=\"99\"",
|
||||||
'sec-ch-ua-platform': '"Android"',
|
"sec-ch-ua-mobile": "?1",
|
||||||
'Origin': 'http://bsdspbkbbt.r8it3o.cn',
|
"User-Agent": "Mozilla/5.0 (Linux; Android 14; 23113RKC6C Build/UKQ1.230804.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/130.0.6723.73 Mobile Safari/537.36 XWEB/1300057 MMWEBSDK/20240301 MMWEBID/4020 MicroMessenger/8.0.48.2580(0x28003035) WeChat/arm64 Weixin Android Tablet NetType/WIFI Language/zh_CN ABI/arm64",
|
||||||
'X-Requested-With': 'com.tencent.mm',
|
"X-NIUBILITY-Y": "",
|
||||||
'Sec-Fetch-Site': 'cross-site',
|
"Content-Type": "application/json",
|
||||||
'Sec-Fetch-Mode': 'cors',
|
"Accept": "*/*",
|
||||||
'Sec-Fetch-Dest': 'empty',
|
"Origin": "http://9henipq.ewr919.top",
|
||||||
'Referer': 'http://bsdspbkbbt.r8it3o.cn/',
|
"X-Requested-With": "com.tencent.mm",
|
||||||
'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',
|
"Sec-Fetch-Site": "cross-site",
|
||||||
|
"Sec-Fetch-Mode": "cors",
|
||||||
|
"Sec-Fetch-Dest": "empty",
|
||||||
|
"Referer": "http://9henipq.ewr919.top/",
|
||||||
|
"Accept-Encoding": "gzip, deflate, br, zstd",
|
||||||
|
"Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -279,44 +340,67 @@ class yuanshen:
|
|||||||
url = requests.post(self.apiurl+'/loginbyweb',json=data).json()['url']
|
url = requests.post(self.apiurl+'/loginbyweb',json=data).json()['url']
|
||||||
#print(url)
|
#print(url)
|
||||||
|
|
||||||
|
|
||||||
h = {
|
h = {
|
||||||
'User-Agent': ua,
|
"sec-ch-ua": "\"Chromium\";v=\"130\", \"Android WebView\";v=\"130\", \"Not?A_Brand\";v=\"99\"",
|
||||||
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/wxpic,image/tpg,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
|
"sec-ch-ua-mobile": "?1",
|
||||||
# 'Accept-Encoding': 'gzip, deflate, br, zstd',
|
"sec-ch-ua-platform": "\"Android\"",
|
||||||
'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Android WebView";v="126"',
|
"upgrade-insecure-requests": "1",
|
||||||
'sec-ch-ua-mobile': '?1',
|
"user-agent": ua,
|
||||||
'sec-ch-ua-platform': '"Android"',
|
"accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/wxpic,image/tpg,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
|
||||||
'upgrade-insecure-requests': '1',
|
"x-requested-with": "com.tencent.mm",
|
||||||
'x-requested-with': 'com.tencent.mm',
|
"sec-fetch-site": "none",
|
||||||
'sec-fetch-site': 'none',
|
"sec-fetch-mode": "navigate",
|
||||||
'sec-fetch-mode': 'navigate',
|
"sec-fetch-user": "?1",
|
||||||
'sec-fetch-user': '?1',
|
"sec-fetch-dest": "document",
|
||||||
'sec-fetch-dest': 'document',
|
"accept-encoding": "gzip, deflate, br, zstd",
|
||||||
'accept-language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',
|
"accept-language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7",
|
||||||
'priority': 'u=0, i',
|
"priority": "u=0, i"
|
||||||
}
|
}
|
||||||
r = requests.get(url,headers=h,allow_redirects=False)
|
r = requests.get(url,headers=h,allow_redirects=False)
|
||||||
#print(r.headers)
|
#print(r.headers)
|
||||||
token = r.headers['Location'].split('token=')[1]
|
token = r.headers['Location'].split('token=')[1]
|
||||||
self.h = {
|
domain = urlparse(r.headers['Location']).netloc
|
||||||
|
h = {
|
||||||
'User-Agent': ua,
|
'User-Agent': ua,
|
||||||
# 'Accept-Encoding': 'gzip, deflate, br, zstd',
|
# 'Accept-Encoding': 'gzip, deflate, br, zstd',
|
||||||
'Content-Type': 'application/json',
|
'Content-Type': 'application/json',
|
||||||
'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Android WebView";v="126"',
|
'F-RTYFGHVBN':'',
|
||||||
'sec-ch-ua-mobile': '?1',
|
|
||||||
'Authorization': f'Bearer {token}',
|
'Authorization': f'Bearer {token}',
|
||||||
'X-NIUBILITY-Y': '',
|
|
||||||
'F-RTYFGHVBN': env().random_str(length=32,to_lower=True),
|
|
||||||
'sec-ch-ua-platform': '"Android"',
|
'sec-ch-ua-platform': '"Android"',
|
||||||
'Origin': 'http://rdecfgw.cecua.cn',
|
'sec-ch-ua': '"Chromium";v="130", "Android WebView";v="130", "Not?A_Brand";v="99"',
|
||||||
|
'sec-ch-ua-mobile': '?1',
|
||||||
|
'Origin': f'http://{domain}',
|
||||||
'X-Requested-With': 'com.tencent.mm',
|
'X-Requested-With': 'com.tencent.mm',
|
||||||
'Sec-Fetch-Site': 'cross-site',
|
'Sec-Fetch-Site': 'cross-site',
|
||||||
'Sec-Fetch-Mode': 'cors',
|
'Sec-Fetch-Mode': 'cors',
|
||||||
'Sec-Fetch-Dest': 'empty',
|
'Sec-Fetch-Dest': 'empty',
|
||||||
'Referer': 'http://rdecfgw.cecua.cn/',
|
'Referer': f'http://{domain}/',
|
||||||
|
'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',
|
||||||
|
}
|
||||||
|
r = requests.post('https://api.jiudingliliang.com/domain/use',headers=h).json()
|
||||||
|
print(r)
|
||||||
|
data = {
|
||||||
|
'scene': 'INDEX',
|
||||||
|
}
|
||||||
|
url = 'https://api.jiudingliliang.com/domain/pool'
|
||||||
|
r = requests.post(url,json=data,headers=h).json()
|
||||||
|
doamin2 = r["result"]["host"]
|
||||||
|
self.h = {
|
||||||
|
'User-Agent': 'Mozilla/5.0 (Linux; Android 14; 23113RKC6C Build/UKQ1.230804.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/130.0.6723.73 Mobile Safari/537.36 XWEB/1300057 MMWEBSDK/20240301 MMWEBID/4020 MicroMessenger/8.0.48.2580(0x28003035) WeChat/arm64 Weixin Android Tablet NetType/WIFI Language/zh_CN ABI/arm64',
|
||||||
|
'F-RTYFGHVBN': f,
|
||||||
|
'Authorization': f'Bearer {token}',
|
||||||
|
'sec-ch-ua-platform': '"Android"',
|
||||||
|
'sec-ch-ua': '"Chromium";v="130", "Android WebView";v="130", "Not?A_Brand";v="99"',
|
||||||
|
'sec-ch-ua-mobile': '?1',
|
||||||
|
'Origin': f'{doamin2}',
|
||||||
|
'X-Requested-With': 'com.tencent.mm',
|
||||||
|
'Sec-Fetch-Site': 'cross-site',
|
||||||
|
'Sec-Fetch-Mode': 'cors',
|
||||||
|
'Sec-Fetch-Dest': 'empty',
|
||||||
|
'Referer': f'{doamin2}/',
|
||||||
'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',
|
'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',
|
||||||
}
|
}
|
||||||
|
|
||||||
r = requests.post('https://api.jiudingliliang.com/user/info',json={},headers=self.h).json()
|
r = requests.post('https://api.jiudingliliang.com/user/info',json={},headers=self.h).json()
|
||||||
if r['code'] == 10000:
|
if r['code'] == 10000:
|
||||||
logging.info(f'登录成功')
|
logging.info(f'登录成功')
|
||||||
@ -324,7 +408,7 @@ class yuanshen:
|
|||||||
logging.info(f'登录成功')
|
logging.info(f'登录成功')
|
||||||
else:
|
else:
|
||||||
logging.info(f'获取阅读入口失败[{r}]')
|
logging.info(f'获取阅读入口失败[{r}]')
|
||||||
|
@retry()
|
||||||
def get_readtime(self,url):
|
def get_readtime(self,url):
|
||||||
h = {
|
h = {
|
||||||
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
|
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
|
||||||
@ -354,6 +438,7 @@ class yuanshen:
|
|||||||
return False,date_string
|
return False,date_string
|
||||||
else:
|
else:
|
||||||
return True,date_string
|
return True,date_string
|
||||||
|
@retry()
|
||||||
def getread(self):
|
def getread(self):
|
||||||
url = 'https://api.jiudingliliang.com/task/read-batch'
|
url = 'https://api.jiudingliliang.com/task/read-batch'
|
||||||
data = {"u": 1}
|
data = {"u": 1}
|
||||||
@ -400,7 +485,7 @@ class yuanshen:
|
|||||||
data = {"url":self.read_url}
|
data = {"url":self.read_url}
|
||||||
r = requests.post(url,json=data).json()
|
r = requests.post(url,json=data).json()
|
||||||
logging.info(f"遇到检测文章:推送结果[{r}]")
|
logging.info(f"遇到检测文章:推送结果[{r}]")
|
||||||
|
@retry()
|
||||||
def read(self):
|
def read(self):
|
||||||
#print(self.k)
|
#print(self.k)
|
||||||
|
|
||||||
@ -441,7 +526,7 @@ class yuanshen:
|
|||||||
return True
|
return True
|
||||||
else:
|
else:
|
||||||
logging.error(f'阅读失败[{r}]')
|
logging.error(f'阅读失败[{r}]')
|
||||||
|
@retry()
|
||||||
def userinfo(self):
|
def userinfo(self):
|
||||||
url = 'https://api.jiudingliliang.com/user/info'
|
url = 'https://api.jiudingliliang.com/user/info'
|
||||||
r = requests.post(url,json={},headers=self.h).json()
|
r = requests.post(url,json={},headers=self.h).json()
|
||||||
@ -452,23 +537,44 @@ class yuanshen:
|
|||||||
url = 'https://api.jiudingliliang.com/user/withdraw'
|
url = 'https://api.jiudingliliang.com/user/withdraw'
|
||||||
r = requests.post(url,headers=self.h,json={}).json()
|
r = requests.post(url,headers=self.h,json={}).json()
|
||||||
|
|
||||||
# if r['code'] == 10000:
|
if r['code'] == 10000:
|
||||||
# lessmoney = r["result"]["transfer"][0]["m"]
|
if appToken and uid:
|
||||||
# if m >= lessmoney:
|
lessmoney = r["result"]["transfer"][0]["m"]
|
||||||
# url = 'https://api.jiudingliliang.com/user/transfer'
|
if m >= lessmoney:
|
||||||
# data = {'amount':lessmoney}
|
url = 'https://api.jiudingliliang.com/user/transfer'
|
||||||
# r = requests.post(url,json=data,headers=self.h).json()
|
data = {'amount':lessmoney, 'type':'alipay'}
|
||||||
# if r['code'] == 10000:
|
r = requests.post(url,json=data,headers=self.h).json()
|
||||||
# logging.info(f'提现成功')
|
logging.info(r)
|
||||||
# else:
|
if r['code'] == 10000:
|
||||||
# logging.error(f'提现失败[{r}]')
|
logging.info(f'提现成功[{r}]')
|
||||||
# else:
|
kl = r["result"]["alipay_kl"]
|
||||||
# logging.info(f'余额不足,跳过提现')
|
data = {
|
||||||
|
"appToken":appToken,
|
||||||
|
"content":f'叮叮联盟提现成功,口令[{kl}]',
|
||||||
|
"summary":f'叮叮联盟提现成功,口令[{kl}]',
|
||||||
|
"contentType":1,
|
||||||
|
"uids":[
|
||||||
|
uid
|
||||||
|
],
|
||||||
|
"verifyPayType":0
|
||||||
|
}
|
||||||
|
r = requests.post('https://wxpusher.zjiecode.com/api/send/message',json=data).json()
|
||||||
|
if r['code'] == 1000:
|
||||||
|
logging.info('通知已发送')
|
||||||
|
else:
|
||||||
|
logging.error('通知发送失败')
|
||||||
|
else:
|
||||||
|
logging.error(f'提现失败[{r}]')
|
||||||
|
else:
|
||||||
|
logging.info(f'余额不足,跳过提现')
|
||||||
|
else:
|
||||||
|
logging.info(f'未设置wxpusher信息,跳过提现')
|
||||||
else:
|
else:
|
||||||
logging.error(f'获取用户信息失败[{r}]')
|
logging.error(f'获取用户信息失败[{r}]')
|
||||||
|
|
||||||
|
|
||||||
def main(self):
|
def main(self):
|
||||||
|
try:
|
||||||
self.login()
|
self.login()
|
||||||
if self.getread():
|
if self.getread():
|
||||||
print('='*30)
|
print('='*30)
|
||||||
@ -478,15 +584,25 @@ class yuanshen:
|
|||||||
logging.error('获取阅读入口失败')
|
logging.error('获取阅读入口失败')
|
||||||
|
|
||||||
self.userinfo()
|
self.userinfo()
|
||||||
|
except Exception as e:
|
||||||
|
logging.error(f'发生错误[{e}]')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
ua = os.getenv("yuanshen_useragent")
|
ua = os.getenv("yuanshen_useragent")
|
||||||
#ua = 'Mozilla/5.0 (Linux; Android 14; 23113RKC6C Build/UKQ1.230804.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/126.0.6478.188 Mobile Safari/537.36 XWEB/1260183 MMWEBSDK/20240301 MMWEBID/98 MicroMessenger/8.0.48.2580(0x28003035) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64'
|
|
||||||
if not ua:
|
if not ua:
|
||||||
logging.info("不填ua玩你妹妹\n"*999)
|
logging.info("不填ua玩你妹妹\n"*999)
|
||||||
exit()
|
exit()
|
||||||
|
appToken = ''
|
||||||
|
topicIds = ''
|
||||||
|
if not appToken or not topicIds:
|
||||||
|
appToken = os.getenv('yuanshen_apptoken')
|
||||||
|
uid = os.getenv('yuanshen_wxpusheruid')
|
||||||
|
if not appToken or not uid:
|
||||||
|
logging.error("❌你还没有设置推送,请设置环境变量:yuanshen_wxpusheruid 和 yuanshen_apptoken")
|
||||||
|
appToken = None
|
||||||
|
uid = None
|
||||||
env().main()
|
env().main()
|
||||||
|
|
||||||
Loading…
Reference in New Issue
Block a user