上传文件至 /

This commit is contained in:
chickliu 2024-11-14 01:23:08 +08:00
commit 3ff503dd7b
5 changed files with 1758 additions and 0 deletions

52
91阅读_1.6.py Normal file

File diff suppressed because one or more lines are too long

492
叮叮联盟_api_1.6.py Normal file
View File

@ -0,0 +1,492 @@
# --------------------------------注释区--------------------------------
# 入口:http://nmub7w.jlnrj.cn?mid=1786918&r=OKgDUXIa&e=1730731520
#
# 需抓取数据:
# * 填写穿透出来的api接口
#
# 抓取请求头中的user-agent填入yuanshen_useragent 无论多少个号都只填一个即可!!!!
#
# 变量名:yuanshen_api
#
# --------------------------------祈求区--------------------------------
# _ooOoo_
# o8888888o
# 88" . "88
# (| -_- |)
# O\ = /O
# ____/`---'\____
# . ' \\| |// `.
# / \\||| : |||// \
# / _||||| -:- |||||- \
# | | \\\ - /// | |
# | \_| ''\---/'' | |
# \ .-\__ `-` ___/-. /
# ___`. .' /--.--\ `. . __
# ."" '< `.___\_<|>_/___.' >'"".
# | | : `- \`.;`\ _ /`;.`/ - ` : | |
# \ \ `-. \_ __\ /__ _/ .-` / /
# ======`-.____`-.___\_____/___.-`____.-'======
# `=---='
#
# .............................................
# 佛祖保佑 永无BUG
# 佛祖镇楼 BUG辟邪
# --------------------------------代码区--------------------------------
import requests
import time
import os
import json
import hashlib
import random
import logging
from urllib.parse import urlparse, parse_qs,quote,unquote
import sys
import string
from base64 import b64encode
import uuid
from datetime import datetime,timedelta
import re
logging.basicConfig(level=logging.INFO, format='[%(levelname)s] ===> %(message)s')
code = "叮叮联盟_api版"
ver = "1.6"
envname = "yuanshen_api"
debug = False #debug模式 开启即从脚本内部获取环境变量
debugcookie = "" #debug模式cookie
is_bulletin = False #公告开关
is_toulu = False #偷撸公告开关
is_with_sleep = False #是否开启随机延时
def get_sm():
global bizlist
try:
url = "https://api.huaji.asia/read_api/biz_ddlm.txt"
r = requests.get(url)
if r.status_code == 200:
logging.info(f"联网获取检测文章列表成功")
bizlist = r.text.split(",")
else:
logging.error("联网获取检测文章列表失败!")
bizlist = []
except:
logging.error("联网获取检测文章列表失败!")
bizlist = []
class env():
"""
env模块,获取cookie并转成列表,统计时间,提示脚本开始结束,检测一些配置,try except异常处理
:param args: 传递给env的参数
:param kwargs: 传递给env的关键字参数
:return: Null
Powered by huaji
"""
def __init__(self, *args, **kwargs):
self.cookie = None
self.env_ver = '1.5' #版本号
self.split_chars = ['@', '&', '\n'] #分隔符
self.identifiers = ['Powered By Huaji', 'QQ Group:901898186', 'yuanshen'] #标识符
def check_file(self):
file_path = __file__
try:
with open(file_path, 'r', encoding='utf-8') as file:
content = file.read()
results = {}
# 批量检查每个标识符
for identifier in self.identifiers:
if identifier in content:
results[identifier] = True
else:
results[identifier] = False
logging.error(f"文件可能被恶意篡改,请勿修改文件内容")
all_identifiers_present = all(results.values())
if not all_identifiers_present:
logging.error(f"文件可能被恶意篡改,请勿修改文件内容")
self.force_exit()
except Exception as e:
print(f"读取文件时发生错误: {e}")
self.force_exit()
def split_cookies(self):
"""根据多个分隔符分割cookie"""
for sep in self.split_chars:
if sep in self.cookie:
return self.cookie.split(sep)
return [self.cookie]
def scmain(self):
get_sm()
apiurl = 'http://' + self.cookies[0]
r = requests.get(apiurl + '/getallwx').json()
for i, cookie in enumerate(r, 1):
print(f"--------开始第{i}个账号--------")
main = yuanshen(cookie,apiurl)
main.main()
print(f"--------第{i}个账号执行完毕--------")
def force_exit(self,code=0):
exit()
print("Warning: 篡改你妈")
os._exit(code) # 强制退出程序
sys.exit(code) # 正常退出
import ctypes
while True:
ctypes.string_at(114514)
ctypes.string_at(1919810)
ctypes.string_at(666666)
print("Warning: 篡改你妈")
def run(self):
if not os.getenv(envname) and not debug:
logging.warning(f"请先设置环境变量[{envname}]")
self.force_exit()
self.cookie = os.getenv(envname, "")
if debug:
self.cookie = debugcookie
if is_bulletin:
try:
print(requests.get("https://gitee.com/HuaJiB/yuanshen34/raw/master/pubilc.txt").text, "\n\n\n")
except:
logging.error("网络异常,链接公告服务器失败(gitee),请检查网络")
self.force_exit()
if is_toulu:
try:
txt = '''
此为滑稽的偷撸本本 如你不在滑稽的小群却意外通过某种渠道获得了该脚本
请联系QQ3487934983 提供证据后 你将代替泄露人员获得该群位置
=======================================================
'''
print(txt*5)
except:
self.force_exit()
if is_with_sleep:
random_time = random.randint(10,60)
logging.info(f"随机延时[{random_time}]秒")
time.sleep(random_time)
self.cookies = self.split_cookies()
account_count = len(self.cookies)
logging.info(f"一共获取到{account_count}个账号")
print(f"=========🔔开始执行[{code}][{ver}]=========\n")
start_time = time.time()
if debug:
self.scmain()
else:
try:
self.scmain()
except Exception as e:
logging.error(f"脚本执行出错: {e}")
end_time = time.time()
execution_time = end_time - start_time
print(f"\n============🔔脚本[{code}]执行结束============")
print(f"本次脚本总运行时间: [{execution_time:.2f}] 秒")
self.force_exit()
def main(self):
self.check_file()
self.run()
def random_str(self,charset="all", length=8, to_upper=False,to_lower=False):
if charset == "all": #包含大小写字母和数字
chars = string.ascii_letters + string.digits
elif charset == "letters": #大小写字母
chars = string.ascii_letters
elif charset == "digits":
chars = string.digits
elif charset == "lowercase": #小写字母
chars = string.ascii_lowercase
elif charset == "uuid":
return str(uuid.uuid4())
elif charset == "uuid_str":
return str(uuid.uuid4()).replace("-", "")
elif charset != '' and charset is not None:
chars = charset
random_string = ''.join(random.choice(chars) for _ in range(length))
if to_upper:
return random_string.upper()
elif to_lower:
return random_string.lower()
else:
return random_string
def aes_encrypt(self,data):
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
from binascii import hexlify, unhexlify
key = self.key.encode('utf-8')
iv = self.iv.encode('utf-8')
cipher = AES.new(key, AES.MODE_CBC, iv)
padded_plaintext = pad(data.encode('utf-8'), AES.block_size)
ciphertext = cipher.encrypt(padded_plaintext)
encrypted_base64 = b64encode(ciphertext).decode('utf-8')
return encrypted_base64
class yuanshen:
def __init__(self,cookie,apiurl) -> None:
self.apiurl = apiurl
self.Wxid = cookie['Wxid']
self.bz = cookie['wxname']
logging.info(f'[{self.bz}]开始运行')
def login(self):
headers = {
'User-Agent': ua,
# 'Accept-Encoding': 'gzip, deflate, br, zstd',
'Content-Type': 'application/json',
'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Android WebView";v="126"',
'sec-ch-ua-mobile': '?1',
'Authorization': 'Bearer',
'F-RTYFGHVBN': '0cb5cc12b50dddc84c3066433e88194f',
'sec-ch-ua-platform': '"Android"',
'Origin': 'http://bsdspbkbbt.r8it3o.cn',
'X-Requested-With': 'com.tencent.mm',
'Sec-Fetch-Site': 'cross-site',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Dest': 'empty',
'Referer': 'http://bsdspbkbbt.r8it3o.cn/',
'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',
}
url = 'https://api.jiudingliliang.com/login/get-auth-url'
data = {"route":"","mid":"1786918"}
r = requests.post(url,json=data,headers=headers).json()
if r['code'] == 10000:
url = r['result']['url']
data = {'Wxid':self.Wxid,'url':url}
url = requests.post(self.apiurl+'/loginbyweb',json=data).json()['url']
#print(url)
h = {
'User-Agent': ua,
'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',
# 'Accept-Encoding': 'gzip, deflate, br, zstd',
'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Android WebView";v="126"',
'sec-ch-ua-mobile': '?1',
'sec-ch-ua-platform': '"Android"',
'upgrade-insecure-requests': '1',
'x-requested-with': 'com.tencent.mm',
'sec-fetch-site': 'none',
'sec-fetch-mode': 'navigate',
'sec-fetch-user': '?1',
'sec-fetch-dest': 'document',
'accept-language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',
'priority': 'u=0, i',
}
r = requests.get(url,headers=h,allow_redirects=False)
#print(r.headers)
token = r.headers['Location'].split('token=')[1]
self.h = {
'User-Agent': ua,
# 'Accept-Encoding': 'gzip, deflate, br, zstd',
'Content-Type': 'application/json',
'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Android WebView";v="126"',
'sec-ch-ua-mobile': '?1',
'Authorization': f'Bearer {token}',
'X-NIUBILITY-Y': '',
'F-RTYFGHVBN': env().random_str(length=32,to_lower=True),
'sec-ch-ua-platform': '"Android"',
'Origin': 'http://rdecfgw.cecua.cn',
'X-Requested-With': 'com.tencent.mm',
'Sec-Fetch-Site': 'cross-site',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Dest': 'empty',
'Referer': 'http://rdecfgw.cecua.cn/',
'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()
if r['code'] == 10000:
logging.info(f'登录成功')
self.h['X-NIUBILITY-Y'] = r["result"]["uok"]
logging.info(f'登录成功')
else:
logging.info(f'获取阅读入口失败[{r}]')
def get_readtime(self,url):
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-language': 'zh-CN,zh;q=0.9',
'cache-control': 'no-cache',
# 'cookie': 'RK=x93V1EQnnk; ptcz=70105284a73b47db6aa5f48a05337a8cd84e98de7bd26d75975059126646db21; pac_uid=0_ZkHRNfy6PMhrH; ua_id=SyF8Nc7qjhUZ6RH8AAAAAHO013VXlTF21GY7ajzLLgs=; _clck=19reoir|1|fpg|0; wxuin=27186344812218; eas_sid=x1Y7v2y759E6j1a811G6q158d0; qq_domain_video_guid_verify=08d525e64ffa56c3; _qimei_uuid42=18a1b130e12100363fb639c628b466967c0e1ac0aa; pgv_pvid=6915337851; _qimei_fingerprint=3c42962857167cc55475bb65b2331f0b; _qimei_h38=fded42463fb639c628b4669602000006018a1b; o_cookie=3487934983; _qimei_q32=ec50b72a0f5a646accacf4393f1271f2; _qimei_q36=9e46147a2ab8bee5904ab74e30001741890c; rewardsn=; wxtokenkey=777',
'pragma': 'no-cache',
'priority': 'u=0, i',
'sec-ch-ua': '"Chromium";v="130", "Google Chrome";v="130", "Not?A_Brand";v="99"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Windows"',
'sec-fetch-dest': 'document',
'sec-fetch-mode': 'navigate',
'sec-fetch-site': 'none',
'sec-fetch-user': '?1',
'upgrade-insecure-requests': '1',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36',
}
r = requests.get(url,headers=h).text
match = re.search(r"var createTime = '(.+?)';", r)
if match:
date_string = (match.group(1))
date = datetime.strptime(date_string, "%Y-%m-%d %H:%M")
half_year_ago = datetime.now() - timedelta(days=30)
if date > half_year_ago:
return False,date_string
else:
return True,date_string
def getread(self):
url = 'https://api.jiudingliliang.com/task/read-batch'
data = {"u": 1}
r = requests.post(url,json=data,headers=self.h).json()
if r['code'] == 10000:
logging.info(f'获取阅读入口成功')
print(r)
#http://agifh.liliangda.cn?route=/pages/read/read&bn=2409211329003132289067&token=p5wP0pTb9eMHHJjf1fy133qF8tiaE0_k7jJzJRBtBXc&k=15G8EuNiZKx4b9W9SjgmmVJL60Tm0e_SNCQtW5IVdFdpYVsSHoL_UHd9btHBIunG
j = urlparse(r["result"]["qrcode"]);
self.domain, p = j.netloc, parse_qs(j.query);
self.k = p.get('k')[0] if p.get('k') else ''
self.readh = {
"Host": "api.jiudingliliang.com",
"Connection": "keep-alive",
"Content-Length": "28",
"sec-ch-ua": "\"Not/A)Brand\";v=\"8\", \"Chromium\";v=\"126\", \"Android WebView\";v=\"126\"",
"sec-ch-ua-mobile": "?1",
"User-Agent":ua,
"Authorization": "Bearer",
"Content-Type": "application/json",
"X-NIUBILITY-Y": "",
"F-RTYFGHVBN":self.h['F-RTYFGHVBN'],
"sec-ch-ua-platform": "\"Android\"",
"Accept": "*/*",
"Origin": f"http://{self.domain}",
"X-Requested-With": "com.tencent.mm",
"Sec-Fetch-Site": "cross-site",
"Sec-Fetch-Mode": "cors",
"Sec-Fetch-Dest": "empty",
"Referer": f"http://{self.domain}/",
"Accept-Encoding": "gzip, deflate, br, zstd",
"Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7"
}
return True
else:
logging.error(f'获取阅读入口失败[{r}]')
return False
def tuisong(self):
# 发送消息到wxpusher
url = f"{self.apiurl}/zdgjc"
data = {"url":self.read_url}
r = requests.post(url,json=data).json()
logging.info(f"遇到检测文章:推送结果[{r}]")
def read(self):
#print(self.k)
data = {"k":self.k}
url = 'https://api.jiudingliliang.com/task/read-article'
r = requests.post(url,json=data,headers=self.readh).json()
if r['code'] == 10000:
self.read_url = r["result"]["articleUrl"]
va, date_string = self.get_readtime(self.read_url)
logging.info(f'获取文章成功[{self.read_url}],发布时间[{date_string}]')
j = urlparse(self.read_url.replace('\\',''))
biz = parse_qs(j.query).get('__biz', [''])[0] if '__biz' in parse_qs(j.query) else ''
if 'biz' not in self.read_url or biz in bizlist or va:
self.tuisong()
time.sleep(random.randint(20,25))
else:
time.sleep(random.randint(8,10))
k = r["result"]["k"]
else:
logging.error(f'获取文章失败[{r}]')
return False
url = 'https://api.jiudingliliang.com/task/read-article-completed'
data = {'k':k}
r = requests.post(url,json=data,headers=self.readh).json()
if r['code'] == 10000:
now = r["result"]["readingNumber"]
all = r["result"]["totalReading"]
logging.info(f'第[{now}/{all}]篇文章阅读成功')
if now == all:
logging.info("本轮阅读完成")
return False
self.k = r["result"]["k"]
return True
else:
logging.error(f'阅读失败[{r}]')
def userinfo(self):
url = 'https://api.jiudingliliang.com/user/info'
r = requests.post(url,json={},headers=self.h).json()
if r['code'] == 10000:
name = r["result"]["nickname"]
m = int(float(r["result"]["balanceCash"]))
logging.info(f'当前账号[{name}]余额[{m}]')
url = 'https://api.jiudingliliang.com/user/withdraw'
r = requests.post(url,headers=self.h,json={}).json()
# if r['code'] == 10000:
# lessmoney = r["result"]["transfer"][0]["m"]
# if m >= lessmoney:
# url = 'https://api.jiudingliliang.com/user/transfer'
# data = {'amount':lessmoney}
# r = requests.post(url,json=data,headers=self.h).json()
# if r['code'] == 10000:
# logging.info(f'提现成功')
# else:
# logging.error(f'提现失败[{r}]')
# else:
# logging.info(f'余额不足,跳过提现')
else:
logging.error(f'获取用户信息失败[{r}]')
def main(self):
self.login()
if self.getread():
print('='*30)
while self.read():
time.sleep(random.randint(0,1))
else:
logging.error('获取阅读入口失败')
self.userinfo()
if __name__ == '__main__':
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:
logging.info("不填ua玩你妹妹\n"*999)
exit()
env().main()

525
可乐_api_2.5.py Normal file
View File

@ -0,0 +1,525 @@
# --------------------------------注释区--------------------------------
# 入口:微信打开 http://280766611011953.av9j2ff3w1.cn/r?bwr=dim&jcz=l2g&pla=pjr&t5n=xfz&upuid=2807666&zrb=av8
# 走个头谢谢 不然没更新动力了呜呜呜
#
# 需抓取数据:
# * 填写自动过检的api接口 本地 内网ip:5000 非本地自行进行穿透
# * 登录多少个账号就跑多少个账号
#
#
# 变量名:yuanshen_api
withdrawal_money = 3000 # 提现金币数量 1000金币=0.1r
Quantity_limit = 180 # 阅读上限篇数 跑满(195篇左右)概率封号
fuck_list = [1,2,126] # 强制识别为检测文章并推送篇数 不懂默认 需要新加的话在后面用 英文逗号加篇数 新增自定义参数就行
max_threads = 1 #运行线程数 不懂默认
# --------------------------------一般不动区--------------------------------
# _ooOoo_
# o8888888o
# 88" . "88
# (| -_- |)
# O\ = /O
# ____/`---'\____
# . ' \\| |// `.
# / \\||| : |||// \
# / _||||| -:- |||||- \
# | | \\\ - /// | |
# | \_| ''\---/'' | |
# \ .-\__ `-` ___/-. /
# ___`. .' /--.--\ `. . __
# ."" '< `.___\_<|>_/___.' >'"".
# | | : `- \`.;`\ _ /`;.`/ - ` : | |
# \ \ `-. \_ __\ /__ _/ .-` / /
# ======`-.____`-.___\_____/___.-`____.-'======
# `=---='
#
# .............................................
# 佛祖保佑 永无BUG
# 佛祖镇楼 BUG辟邪
#佛曰:
# 写字楼里写字间,写字间里程序员;
# 程序人员写程序,又拿程序换酒钱。
# 酒醒只在网上坐,酒醉还来网下眠;
# 酒醉酒醒日复日,网上网下年复年。
# 但愿老死电脑间,不愿鞠躬老板前;
# 奔驰宝马贵者趣,公交自行程序员。
# 别人笑我忒疯癫,我笑自己命太贱;
# 不见满街漂亮妹,哪个归得程序员?
#
# --------------------------------代码区--------------------------------
import requests
import string
import uuid
from base64 import b64encode
import time
import os
from urllib.parse import urlparse, parse_qs,quote
import re
import random
import math
import logging
logging.basicConfig(level=logging.INFO, format='[%(levelname)s] ===> %(message)s')
code = "可乐阅读_api版"
ver = "3.2"
envname = "yuanshen_api"
debug = False #debug模式 开启即从脚本内部获取环境变量
debugcookie = "127.0.0.1:5000"
is_bulletin = False #公告开关
is_toulu = False #偷撸公告开关
is_with_sleep = False #是否开启随机延时
class env():
"""
env模块,获取cookie并转成列表,统计时间,提示脚本开始结束,检测一些配置,try except异常处理
:param args: 传递给env的参数
:param kwargs: 传递给env的关键字参数
:return: Null
Powered by huaji
"""
def __init__(self, *args, **kwargs):
self.cookie = None
self.env_ver = '1.5' #版本号
self.split_chars = ['@', '&', '\n'] #分隔符
self.identifiers = ['Powered By Huaji', 'QQ Group:901898186', 'yuanshen'] #标识符
def check_file(self):
file_path = __file__
try:
with open(file_path, 'r', encoding='utf-8') as file:
content = file.read()
results = {}
# 批量检查每个标识符
for identifier in self.identifiers:
if identifier in content:
results[identifier] = True
else:
results[identifier] = False
logging.error(f"文件可能被恶意篡改,请勿修改文件内容")
all_identifiers_present = all(results.values())
if not all_identifiers_present:
logging.error(f"文件可能被恶意篡改,请勿修改文件内容")
self.force_exit()
except Exception as e:
print(f"读取文件时发生错误: {e}")
self.force_exit()
def split_cookies(self):
"""根据多个分隔符分割cookie"""
for sep in self.split_chars:
if sep in self.cookie:
return self.cookie.split(sep)
return [self.cookie]
def scmain(self):
if 'https://' not in self.cookie and 'http://' not in self.cookie:
apiurl = 'http://' + self.cookies[0]
r = requests.get(apiurl + '/getallwx').json()
for i, cookie in enumerate(r, 1):
print(f"--------开始第{i}个账号--------")
main = yuanshen(cookie,apiurl)
main.main()
print(f"--------第{i}个账号执行完毕--------")
def force_exit(self,code=0):
exit()
print("Warning: 篡改你妈")
os._exit(code) # 强制退出程序
sys.exit(code) # 正常退出
import ctypes
while True:
ctypes.string_at(114514)
ctypes.string_at(1919810)
ctypes.string_at(666666)
print("Warning: 篡改你妈")
def run(self):
if not os.getenv(envname) and not debug:
logging.warning(f"请先设置环境变量[{envname}]")
self.force_exit()
self.cookie = os.getenv(envname, "")
if debug:
self.cookie = debugcookie
if is_bulletin:
try:
print(requests.get("https://gitee.com/HuaJiB/yuanshen34/raw/master/pubilc.txt").text, "\n\n\n")
except:
logging.error("网络异常,链接公告服务器失败(gitee),请检查网络")
self.force_exit()
if is_toulu:
try:
txt = '''
此为滑稽的偷撸本本 如你不在滑稽的小群却意外通过某种渠道获得了该脚本
请联系QQ3487934983 提供证据后 你将代替泄露人员获得该群位置
=======================================================
'''
print(txt*5)
except:
self.force_exit()
if is_with_sleep:
random_time = random.randint(10,60)
logging.info(f"随机延时[{random_time}]秒")
time.sleep(random_time)
self.cookies = self.split_cookies()
account_count = len(self.cookies)
logging.info(f"一共获取到{account_count}个账号")
print(f"=========🔔开始执行[{code}][{ver}]=========\n")
start_time = time.time()
if debug:
self.scmain()
else:
try:
self.scmain()
except Exception as e:
logging.error(f"脚本执行出错: {e}")
end_time = time.time()
execution_time = end_time - start_time
print(f"\n============🔔脚本[{code}]执行结束============")
print(f"本次脚本总运行时间: [{execution_time:.2f}] 秒")
self.force_exit()
def main(self):
self.check_file()
self.run()
def random_str(self,charset="all", length=8, to_upper=False,to_lower=False):
if charset == "all": #包含大小写字母和数字
chars = string.ascii_letters + string.digits
elif charset == "letters": #大小写字母
chars = string.ascii_letters
elif charset == "digits":
chars = string.digits
elif charset == "lowercase": #小写字母
chars = string.ascii_lowercase
elif charset == "uuid":
return str(uuid.uuid4())
elif charset == "uuid_str":
return str(uuid.uuid4()).replace("-", "")
elif charset != '' and charset is not None:
chars = charset
random_string = ''.join(random.choice(chars) for _ in range(length))
if to_upper:
return random_string.upper()
elif to_lower:
return random_string.lower()
else:
return random_string
def aes_encrypt(self,data):
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
from binascii import hexlify, unhexlify
key = self.key.encode('utf-8')
iv = self.iv.encode('utf-8')
cipher = AES.new(key, AES.MODE_CBC, iv)
padded_plaintext = pad(data.encode('utf-8'), AES.block_size)
ciphertext = cipher.encrypt(padded_plaintext)
encrypted_base64 = b64encode(ciphertext).decode('utf-8')
return encrypted_base64
class yuanshen:
def __init__(self,cookie,apiurl) -> None:
self.apiurl = apiurl
self.Wxid = cookie['Wxid']
self.bz = cookie['wxname']
logging.info(f'[{self.bz}]开始运行')
self.is_wx = True
self.is_zfb = False
self.fuck_list = fuck_list
self.biz_list = ['MzkwNTY1MzYxOQ==','MzA3NzMzNjMwMQ==']
def tuisong(self):
# 发送消息到wxpusher
url = f"{self.apiurl}/zdgjc"
data = {"url":self.readurl}
r = requests.post(url,json=data).json()
logging.info(f"遇到检测文章:推送结果[{r}]")
def getmain(self):
headers = {
"Host": "230640607122241.asfuoqa.cn",
"Connection": "keep-alive",
"Upgrade-Insecure-Requests": "1",
"User-Agent": user_agent,
"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",
"X-Requested-With": "com.tencent.mm",
"Accept-Encoding": "gzip, deflate",
"Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7"
}
url = 'http://230640607122241.asfuoqa.cn/r?upuid=2306406'
r = requests.get(url,headers=headers,allow_redirects=False)
if r.status_code == 302:
j = urlparse(r.headers['Location'])
self.mainurl = j.netloc
logging.info(f"获取主域名成功:[{self.mainurl}]")
self.headers = {
'User-Agent': user_agent,
'Accept': 'application/json, text/plain, */*',
# 'Accept-Encoding': 'gzip, deflate, br, zstd',
'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Android WebView";v="126"',
'X-Requested-With': 'XMLHttpRequest',
'udtauth12': self.cookie,
'sec-ch-ua-mobile': '?1',
'sec-ch-ua-platform': '"Android"',
'Origin': f'http://{self.mainurl}',
'Sec-Fetch-Site': 'cross-site',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Dest': 'empty',
'Referer': f'http://{self.mainurl}/',
'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',
}
self.mainurl = 'm.zzyi4cf7z8.cn'
else:
logging.error('获取主域名失败')
return False
return True
def getdomain(self):
url = f'http://{self.mainurl}/tuijian?url='
r = requests.get(url,headers=self.headers).json()
if r['code'] == 0:
self.today_num = int(r["data"]["infoView"]["num"])
try:
logging.info(r["data"]["infoView"]["msg"])
return False
except:
pass
time.sleep(3)
url = 'https://m.zzyi4cf7z8.cn/new/bbbbb'
try:
r = requests.get(url,headers=self.headers)
print(r.text)
self.domain = r.json()['jump']
except:
logging.error('获取域名失败 原因为ck失效或遭封了')
return False
j = urlparse(self.domain)
p = parse_qs(self.domain.split('?')[1])
self.iu = p.get('iu', [None])[0]
self.domain_url = j.netloc
logging.info(f"获取域名成功:[{self.domain_url}][{self.iu}]")
time.sleep(2)
h = {
"Host": self.domain_url,
"Connection": "keep-alive",
"Upgrade-Insecure-Requests": "1",
"User-Agent": user_agent,
"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",
"X-Requested-With": "com.tencent.mm",
"Accept-Encoding": "gzip, deflate",
"Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7"
}
r = requests.get(self.domain,headers=h,allow_redirects=False)
# print(r.text)
# match = re.search(r"var url = '(.*)'", r.text)
self.is_read_a = False
self.is_read_b = False
match = re.search(r"var url = '(.*)'", r.text)
if match:
self.canshu = match.group(1)
self.is_read_a = True
logging.info(f"取阅读参数A成功[{self.canshu}]")
self.readh2 = {
'User-Agent': user_agent,
# 'Accept-Encoding': 'gzip, deflate, br, zstd',
'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Android WebView";v="126"',
'X-Requested-With': 'XMLHttpRequest',
'sec-ch-ua-mobile': '?1',
'sec-ch-ua-platform': '"Android"',
'Origin': f'http://{self.domain_url}',
'Sec-Fetch-Site': 'cross-site',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Dest': 'empty',
'Referer': f'http://{self.domain_url}/',
'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',
}
return True
else:
logging.error("取阅读参数A失败")
if match:
match = re.search(r"var dr_url = '(.*)'", r.text)
self.canshu = match.group(1)
self.is_read_b = True
logging.info(f"取阅读参数B成功[{self.canshu}]")
self.readh2 = {
"Host": "m.zzyi4cf7z8.cn",
"Connection": "keep-alive",
"sec-ch-ua": "Chromium;v=122, Not(A:Brand;v=24, Android",
"X-Requested-With": "XMLHttpRequest",
"sec-ch-ua-mobile": "?1",
"User-Agent": user_agent,
"sec-ch-ua-platform": "Android",
"Accept": "*/*",
"Origin": f"http://{self.domain_url}",
"Sec-Fetch-Site": "cross-site",
"Sec-Fetch-Mode": "cors",
"Sec-Fetch-Dest": "empty",
"Referer": f"http://{self.domain_url}/",
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7"
}
return True
else:
logging.error("取阅读参数B失败")
return False
def read(self):
logging.info(f"今日已读:[{self.today_num}]篇文章")
jkey = None
time.sleep(random.randint(2,5))
while True:
if self.today_num >= Quantity_limit:
logging.info(f"今日已读数量已达设置上限")
return
self.today_num += 1
r = random.random()
if jkey is None:
if self.is_read_a:
url = f"{self.canshu}?iu={self.iu}&pageshow&r={r}"
elif self.is_read_b:
url = f"http://{self.domain_url}{self.canshu}?iu={self.iu}&t={r}"
else:
if self.is_read_a:
url = f"{self.canshu}?iu={self.iu}&pageshow&r={r}&jkey={jkey}"
elif self.is_read_b:
url = f"http://{self.domain_url}{self.canshu}?iu={self.iu}&t={r}&jkey={jkey}"
r = requests.get(url,headers=self.readh2).json()
try:
jkey = r["jkey"]
self.readurl = r['url']
if r['url'] is None or r['url'] == 'close':
logging.error(f"未返回有效文章url")
return
except:
logging.error(f"获取文章链接失败[{r}]")
break
logging.info(f"第[{self.today_num}]次获取文章成功:[{r['url']}]")
k = urlparse(self.readurl)
biz = parse_qs(k.query).get('__biz', [''])[0] if '__biz' in parse_qs(k.query) else ''
if biz in self.biz_list or self.today_num in self.fuck_list:
print('遇到检测文章推送ing....')
self.tuisong()
time.sleep(random.randint(20,26))
else:
time.sleep(random.randint(8,18))
def userinfo(self):
url = f'http://{self.mainurl}/tuijian?url='
r = requests.get(url,headers=self.headers).json()
if r['code'] == 0:
gold = float(r['data']['user']['score']) * 100
logging.info(f'今日已赚金币:[{float(r["data"]["infoView"]["score"])*100}]')
logging.info(f'当前账号剩余金币:[{gold}] = [{gold/10000}]元')
if gold >= withdrawal_money:
self.withdrawal()
else:
logging.info(f"金币余额不足[{withdrawal_money}] 不提现")
else:
logging.error(f"查询个人余额失败:[{r}]")
def withdrawal(self):
url = f'http://{self.mainurl}/withdrawal'
r = requests.get(url,headers=self.headers).json()
if r['code'] == 0:
score = math.floor(float(r['data']['user']['score']))
if self.is_wx:
data = {'amount':score,'type':'wx'}
elif self.is_zfb:
data = {'amount':score,'type':'ali','u_ali_account':self.alipay,'u_ali_real_name':self.alipayname}
url = f'http://{self.mainurl}/withdrawal/doWithdraw'
r = requests.post(url,data=data,headers=self.headers)
logging.info(f"提现结果:[{r.text}]")
def login(self):
h = {
"Host": "m.zzyi4cf7z8.cn",
"Connection": "keep-alive",
"sec-ch-ua": "\"Not/A)Brand\";v=\"8\", \"Chromium\";v=\"126\", \"Android WebView\";v=\"126\"",
"Accept": "application/json, text/plain, */*",
"X-Requested-With": "XMLHttpRequest",
#"udtauth12": "63e2zZogVUJV9DUya0ouQk9gXzSkwqy3tTNF2ycNMdf%2FyF5NfTVX5W7HfbxNSakX%2B7YCKBhq8lIxMS9G33sE%2B93v4bxUECwyk9J%2F4bAe0dJ1HYUtWvJoqAwRvpJmklIxajBH1HFpagDaIu0OtSAllTtyDhYlCAwpF5FGxeVTwcw",
"sec-ch-ua-mobile": "?1",
"User-Agent": user_agent,
"sec-ch-ua-platform": "\"Android\"",
"Origin": "http://klluodi-06.eos-ningbo-1.cmecloud.cn",
"Sec-Fetch-Site": "cross-site",
"Sec-Fetch-Mode": "cors",
"Sec-Fetch-Dest": "empty",
"Referer": "http://klluodi-06.eos-ningbo-1.cmecloud.cn/",
"Accept-Encoding": "gzip, deflate, br, zstd",
"Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7"
}
url = f'https://m.zzyi4cf7z8.cn/tuijian?url=fne%3D232%26g7g%3Ds0w%26lgn%3Dll7%26upuid%3D2807666%26wxl%3Dzy8%26x7f%3D76e%26t%3D1730983021&upuid=2807666'
r = requests.get(url,headers=h).json()
loginurl = r['url']
data = {'Wxid':self.Wxid,'url':loginurl}
url = requests.post(self.apiurl+'/loginbyweb',json=data).json()['url']
code = url.split('&code=')[1].split('&')[0]
print(code)
url = f'https://m.zzyi4cf7z8.cn/user/login3?code={code}'
r = requests.get(url,headers=h,allow_redirects=False)
self.cookie = r.headers['Set-Cookie'].split('udtauth12=')[1].split(';')[0]
print(self.cookie)
def main(self):
try:
self.login()
if not self.getmain():
return
time.sleep(random.randint(2,5))
if self.getdomain():
print("="*30)
self.read()
print("="*30)
self.userinfo()
except Exception as e:
logging.error(f"发生错误:{e}")
if __name__ == '__main__':
user_agent = os.getenv('yuanshen_useragent')
#user_agent = '63e2zZogVUJV9DUya0ouQk9gXzSkwqy3tTNF2ycNMdf%2FyF5NfTVX5W7HfbxNSakX%2B7YCKBhq8lIxMS9G33sE%2B93v4bxUECwyk9J%2F4bAe0dJ1HYUtWvJoqAwRvpJmklIxajBH1HFpagDaIu0OtSAllTtyDhYlCAwpF5FGxeVTwcw'
if not user_agent:
logging.error("❌你还没有设置user_agent,请设置环境变量:yuanshen_useragent")
exit()
env().main()

436
搜搜小亏_api_1.4.py Normal file
View File

@ -0,0 +1,436 @@
# --------------------------------注释区--------------------------------
# 入口:微信加
# http://share.shangjiabao.vip/#/pages/redirect/index?params=%7B%22type%22%3A4%2C%22id%22%3A34026%2C%22date%22%3A%2220241103%22%2C%22channel%22%3A%22A0000004%22%7D
#
# 需抓取数据:
# * 填写自动过检的api接口 本地 内网ip:5000 非本地自行进行穿透
# * 登录多少个账号就跑多少个账号
#
#
# 抓取请求头中的user-agent填入yuanshen_useragent 无论多少个号都只填一个即可!!!!
#
# 变量名:yuanshen_api
#
# --------------------------------祈求区--------------------------------
# _ooOoo_
# o8888888o
# 88" . "88
# (| -_- |)
# O\ = /O
# ____/`---'\____
# . ' \\| |// `.
# / \\||| : |||// \
# / _||||| -:- |||||- \
# | | \\\ - /// | |
# | \_| ''\---/'' | |
# \ .-\__ `-` ___/-. /
# ___`. .' /--.--\ `. . __
# ."" '< `.___\_<|>_/___.' >'"".
# | | : `- \`.;`\ _ /`;.`/ - ` : | |
# \ \ `-. \_ __\ /__ _/ .-` / /
# ======`-.____`-.___\_____/___.-`____.-'======
# `=---='
#
# .............................................
# 佛祖保佑 永无BUG
# 佛祖镇楼 BUG辟邪
# --------------------------------代码区--------------------------------
import requests
import time
import os
import json
import hashlib
import math
import random
import logging
import sys
import string
from base64 import b64encode
import base64
import uuid
import re
from datetime import datetime, timedelta
from urllib.parse import urlparse, parse_qs,quote,unquote
logging.basicConfig(level=logging.INFO, format='[%(levelname)s] ===> %(message)s')
code = "搜搜小亏_api版"
ver = "1.4"
envname = "yuanshen_api"
debug = False #debug模式 开启即从脚本内部获取环境变量
debugcookie = "" #debug模式cookie
is_bulletin = False #公告开关
is_toulu = False #偷撸公告开关
is_with_sleep = False #是否开启随机延时
class env():
"""
env模块,获取cookie并转成列表,统计时间,提示脚本开始结束,检测一些配置,try except异常处理
:param args: 传递给env的参数
:param kwargs: 传递给env的关键字参数
:return: Null
Powered by huaji
"""
def __init__(self, *args, **kwargs):
self.cookie = None
self.env_ver = '1.5'
self.split_chars = ['@', '&', '\n']
self.identifiers = ['Powered By Huaji', 'QQ Group:901898186', 'yuanshen']
def check_file(self):
file_path = __file__
try:
with open(file_path, 'r', encoding='utf-8') as file:
content = file.read()
results = {}
# 批量检查每个标识符
for identifier in self.identifiers:
if identifier in content:
results[identifier] = True
else:
results[identifier] = False
logging.error(f"文件可能被恶意篡改,请勿修改文件内容")
all_identifiers_present = all(results.values())
if not all_identifiers_present:
logging.error(f"文件可能被恶意篡改,请勿修改文件内容")
self.force_exit()
except Exception as e:
print(f"读取文件时发生错误: {e}")
self.force_exit()
def split_cookies(self):
"""根据多个分隔符分割cookie"""
for sep in self.split_chars:
if sep in self.cookie:
return self.cookie.split(sep)
return [self.cookie]
def scmain(self):
apiurl = 'http://' + self.cookies[0]
r = requests.get(apiurl + '/getallwx').json()
for i, cookie in enumerate(r, 1):
print(f"--------开始第{i}个账号--------")
main = yuanshen(cookie,apiurl)
main.main()
print(f"--------第{i}个账号执行完毕--------")
def force_exit(self,code=0):
exit()
print("Warning: 篡改你妈")
os._exit(code) # 强制退出程序
sys.exit(code) # 正常退出
import ctypes
while True:
ctypes.string_at(114514)
ctypes.string_at(1919810)
ctypes.string_at(666666)
print("Warning: 篡改你妈")
def run(self):
if not os.getenv(envname) and not debug:
logging.warning(f"请先设置环境变量[{envname}]")
self.force_exit()
self.cookie = os.getenv(envname, "")
if debug:
self.cookie = debugcookie
if is_bulletin:
try:
print(requests.get("https://gitee.com/HuaJiB/yuanshen34/raw/master/pubilc.txt").text, "\n\n\n")
except:
logging.error("网络异常,链接公告服务器失败(gitee),请检查网络")
self.force_exit()
if is_toulu:
try:
txt = '''
此为滑稽的偷撸本本 如你不在滑稽的小群却意外通过某种渠道获得了该脚本
请联系QQ3487934983 提供证据后 你将代替泄露人员获得该群位置
=======================================================
'''
print(txt*5)
except:
self.force_exit()
if is_with_sleep:
random_time = random.randint(10,60)
logging.info(f"随机延时[{random_time}]秒")
time.sleep(random_time)
self.cookies = self.split_cookies()
account_count = len(self.cookies)
logging.info(f"一共获取到{account_count}个账号")
print(f"=========🔔开始执行[{code}][{ver}]=========\n")
start_time = time.time()
if debug:
self.scmain()
else:
try:
self.scmain()
except Exception as e:
logging.error(f"脚本执行出错: {e}")
end_time = time.time()
execution_time = end_time - start_time
print(f"\n============🔔脚本[{code}]执行结束============")
print(f"本次脚本总运行时间: [{execution_time:.2f}] 秒")
self.force_exit()
def main(self):
self.check_file()
self.run()
def random_str(self,charset="all", length=8, to_upper=False,to_lower=False):
if charset == "all": #包含大小写字母和数字
chars = string.ascii_letters + string.digits
elif charset == "letters": #大小写字母
chars = string.ascii_letters
elif charset == "digits":
chars = string.digits
elif charset == "lowercase": #小写字母
chars = string.ascii_lowercase
elif charset == "uuid":
return str(uuid.uuid4())
elif charset == "uuid_str":
return str(uuid.uuid4()).replace("-", "")
elif charset != '' and charset is not None:
chars = charset
random_string = ''.join(random.choice(chars) for _ in range(length))
if to_upper:
return random_string.upper()
elif to_lower:
return random_string.lower()
else:
return random_string
def aes_encrypt(self,data):
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
from binascii import hexlify, unhexlify
key = self.key.encode('utf-8')
iv = self.iv.encode('utf-8')
cipher = AES.new(key, AES.MODE_CBC, iv)
padded_plaintext = pad(data.encode('utf-8'), AES.block_size)
ciphertext = cipher.encrypt(padded_plaintext)
encrypted_base64 = b64encode(ciphertext).decode('utf-8')
return encrypted_base64
class yuanshen:
def __init__(self,cookie,apiurl) -> None:
self.apiurl = apiurl
self.Wxid = cookie['Wxid']
self.bz = cookie['wxname']
logging.info(f'[{self.bz}]开始运行')
def login(self):
headers = {
'User-Agent': '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',
'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',
# 'Accept-Encoding': 'gzip, deflate',
'Upgrade-Insecure-Requests': '1',
'X-Requested-With': 'com.tencent.mm',
'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',
}
r = requests.get('http://auth.51zhejia.com/v1/user/auth', headers=headers,allow_redirects=False)
login_url = (r.headers['Location'])
print(login_url)
data = {'Wxid':self.Wxid,'url':login_url}
url = requests.post(self.apiurl+'/loginbyweb2',json=data).json()['url']
code = url.split('code=')[1].split('&state')[0]
url = f'http://auth.51zhejia.com/v1/user/back?jumpType=platform&ticket=&code={code}&state=search'
r = requests.get(url, headers=headers,allow_redirects=False)
url = r.headers['Location']
print(code,url)
j = parse_qs(urlparse(url).query)
openid = json.loads(j.get('params')[0])['openId']
print(openid)
cookies = {
'openId': openid,
}
headers = {
'Host': 'search-api.lingxiaojiang.com',
'Connection': 'keep-alive',
'version': '4.0.0',
'cache-control': 'no-cache',
'ticket': '',
'User-Agent': '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/1260213 MMWEBSDK/20240301 MMWEBID/4020 MicroMessenger/8.0.48.2580(0x28003035) WeChat/arm64 Weixin Android Tablet NetType/WIFI Language/zh_CN ABI/arm64',
'token': 'null',
'Content-Type': 'application/json',
'Accept': '*/*',
'Origin': 'http://1731024966.b27.yoga',
'X-Requested-With': 'com.tencent.mm',
'Referer': 'http://1731024966.b27.yoga/',
'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',
}
data = {
'ticket': ''
}
r = requests.post('http://search-api.lingxiaojiang.com/v1/search/get-user-token', cookies=cookies, headers=headers, json=data).json()
self.token = r['data']['token']
logging.info(f'登录成功[{self.token}]')
domain = str(int(time.time()*1000)) + '.j56.yoga'
self.h = {
"Host": "search-api.lingxiaojiang.com",
"Connection": "keep-alive",
"cache-control": "no-cache",
"ticket": "",
"User-Agent": "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/1260213 MMWEBSDK/20240301 MMWEBID/4020 MicroMessenger/8.0.48.2580(0x28003035) WeChat/arm64 Weixin Android Tablet NetType/WIFI Language/zh_CN ABI/arm64",
"token": self.token,
"version": "4.0.0",
"Accept": "*/*",
"Origin": f"http://{domain}",
"X-Requested-With": "com.tencent.mm",
"Referer": f"http://{domain}/",
"Accept-Encoding": "gzip, deflate",
"Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7",
"Cookie": f"openId={openid}"
}
def getread(self):
r = requests.get('http://search-api.lingxiaojiang.com/v1/search/index', headers=self.h).json()
if r["data"]["restLeftTime"] != 0:
logging.info(f'[{self.bz}]距离下次阅读还有[{r["data"]["restLeftTime"]}]S')
return False
r = requests.get('http://search-api.lingxiaojiang.com/v1/search/get-task-info', headers=self.h).json()
if r['code'] == 200:
pageurl = unquote(r["data"]["pageUrl"])
domain = urlparse(pageurl.split('&query=')[1]).netloc
self.tid = pageurl.split('tid=')[1]
logging.info(f'获取入口成功[{domain}][{self.tid}]')
self.read_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/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',
# 'Accept-Encoding': 'gzip, deflate',
'cache-control': 'no-cache',
'token': 'null',
'version': '3.0.0',
'Origin': f'http://{domain}',
'X-Requested-With': 'com.tencent.mm',
'Referer': f'http://{domain}/',
'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',
}
return True
else:
logging.info(f'获取入口失败[{r}]')
return False
def get_readtime(self,url):
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-language': 'zh-CN,zh;q=0.9',
'cache-control': 'no-cache',
# 'cookie': 'RK=x93V1EQnnk; ptcz=70105284a73b47db6aa5f48a05337a8cd84e98de7bd26d75975059126646db21; pac_uid=0_ZkHRNfy6PMhrH; ua_id=SyF8Nc7qjhUZ6RH8AAAAAHO013VXlTF21GY7ajzLLgs=; _clck=19reoir|1|fpg|0; wxuin=27186344812218; eas_sid=x1Y7v2y759E6j1a811G6q158d0; qq_domain_video_guid_verify=08d525e64ffa56c3; _qimei_uuid42=18a1b130e12100363fb639c628b466967c0e1ac0aa; pgv_pvid=6915337851; _qimei_fingerprint=3c42962857167cc55475bb65b2331f0b; _qimei_h38=fded42463fb639c628b4669602000006018a1b; o_cookie=3487934983; _qimei_q32=ec50b72a0f5a646accacf4393f1271f2; _qimei_q36=9e46147a2ab8bee5904ab74e30001741890c; rewardsn=; wxtokenkey=777',
'pragma': 'no-cache',
'priority': 'u=0, i',
'sec-ch-ua': '"Chromium";v="130", "Google Chrome";v="130", "Not?A_Brand";v="99"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Windows"',
'sec-fetch-dest': 'document',
'sec-fetch-mode': 'navigate',
'sec-fetch-site': 'none',
'sec-fetch-user': '?1',
'upgrade-insecure-requests': '1',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36',
}
r = requests.get(url,headers=h).text
match = re.search(r"var createTime = '(.+?)';", r)
if match:
date_string = (match.group(1))
date = datetime.strptime(date_string, "%Y-%m-%d %H:%M")
half_year_ago = datetime.now() - timedelta(days=180)
if date > half_year_ago:
return False,date_string
else:
return True,date_string
def tuisong(self):
url = f"{self.apiurl}/zdgjc"
data = {"url":self.url}
r = requests.post(url,json=data).json()
logging.info(f"遇到检测文章:推送结果[{r}]")
def read(self):
tid = 0
while True:
params = {
'intranetIp': '10.1.10.1',
'tid': self.tid,
'taskDetailId':tid,
}
r = requests.get('http://search-api.lingxiaojiang.com/v1/search/get-task-link', params=params, headers=self.read_h).json()
if r["code"] != 200:
logging.error(r)
return
if r["data"]["taskFinish"]:
logging.info(f'阅读任务完成')
return
self.url = r["data"]["taskDetail"]["link"]
tid = r["data"]["taskDetail"]["taskDetailId"]
now_num = r["data"]["searchSuccessTimes"]
all_num = r["data"]["searchTimes"]
va, date_string = self.get_readtime(self.url)
logging.info(f'第[{now_num}/{all_num}]获取文章成功[{self.url}],文章时间[{date_string}]')
if now_num in [0] or va:
logging.info(f'遇到检测文章推送ing...')
self.tuisong()
time.sleep(random.uniform(18,25))
else:
time.sleep(random.uniform(8,15))
def userinfo(self):
r = requests.get('http://search-api.lingxiaojiang.com/v1/search/index', headers=self.h).json()
money = math.floor(r["data"]["userInfo"]["tokenBalance"] / 10000 * 10) / 10
logging.info(f'当前余额[{money}]元')
if money < 0.1:
return
data = {
"amount": money
}
r = requests.post('http://search-api.lingxiaojiang.com/v1/token/withdraw', headers=self.h, json=data).json()
if r["data"]["result"]:
logging.info(f'提现[{money}]成功')
else:
logging.info(f'提现[{money}]失败')
def main(self):
try:
self.login()
if self.getread():
print('='*30)
self.read()
self.userinfo()
except Exception as e:
logging.error(e)
if __name__ == '__main__':
env().main()

253
鱼儿_auto_huaji.py Normal file
View File

@ -0,0 +1,253 @@
import random
import requests
import time
import re
import threading
import os
# 分别为检测文章id和不提现列表
check_id = [1,2,3]
no_cash_list = []
# ---->注意:不会处理异常情况,请自行捕获<-----
class Compatible_auto:
def __init__(self,auto_type,api_address):
self.api_address = api_address
self.auto_type = auto_type
def get_web_code(self,wx_id,appid_or_url):
# 鸡哥过检传入wx_id和url,返回url,不直接返回code
if self.auto_type == "jige":
data = {'Wxid': wx_id, 'url': appid_or_url}
url = requests.post(self.api_address + '/loginbyweb', json=data).json()['url']
return url
# 汐念过检传入wx_id和appid,返回code
if self.auto_type == "xn":
data = {
"Appid": appid_or_url,
"Url": "",
"Wxid": wx_id
}
r = requests.post(f"{self.api_address}/api/Tools/ThirdAppGrant", json=data).json()
return r['Data']
else:
print("该功能仅支持汐念(xn)和鸡哥(jige)的过检软件")
raise ValueError("仅功能支持汐念(xn)和鸡哥(jige)的过检软件")
def get_mini_code(self,wx_id,appid,api_address):
# 直接返回code
if self.auto_type == "jige":
data = {'Wxid': wx_id, 'appid':appid}
code = requests.get(api_address + '/loginbyapp', params=data).json()["code"]
return code
else:
print("该功能仅鸡哥(jige)的过检软件支持")
raise ValueError("该功能仅鸡哥(jige)的过检软件支持")
def send_passage(self,url):
if self.auto_type == "jige":
api_url = f"{self.api_address}/zdgjc"
data = {"url": url}
r = requests.post(api_url, json=data).json()
print(f"推送结果[{r['msg']}]")
else:
print("该功能仅鸡哥(jige)的过检软件支持")
raise ValueError("该功能仅鸡哥(jige)的过检软件支持")
def generate_ua():
devices_uas =['PGP110 Build/UKQ1.230924.001', 'HONOR Build/HK1.220923.005', 'VIVO Build/UKQ1.230912.001', 'TYYH Build/UA1.220923.005']
internet_states = ['5G','4G','WIFI']
ua=(f'Mozilla/5.0 (Linux; Android {random.randint(8,14)}; {random.choice(devices_uas)}/UKQ1.230924.001; wv) '
f'AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/116.0.0.0 Mobile Safari/537.36 XWEB/1160117 '
f'MMWEBSDK/20240404 MMWEBID/7076 MicroMessenger/8.0.49.2600(0x2800313B) WeChat/arm64 Weixin NetType/{random.choice(internet_states)} '
f'Language/zh_CN ABI/arm64')
return ua
class Yuer:
def __init__(self,wx_id,api_address,wx_name,invite_url=None):
self.next_time = None
self.read_pages = None
self.money = None
self.withdraw_headers = None
self.union_url = None
if not invite_url:
self.invite_url = 'http://h5.yyyeee670771.1gkjk8yhyw.cn/yeipad?ewk=ako&tay=tvo&tdq=uin&tfs=qip&ugs=avn&upuid=3387330'
else:
self.invite_url = invite_url
self.read_headers = None
self.wx_name = wx_name
self.api_address = api_address
self.wx_id = wx_id
self.ua = generate_ua()
self.cookie = None
def login(self):
try:
login_headers = {
"Upgrade-Insecure-Requests": "1",
"User-Agent": self.ua,
"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-Encoding": "gzip, deflate",
"Accept-Language": "zh-CN,zh;q=0.9"
}
r = requests.get(self.invite_url, headers=login_headers, allow_redirects=False).headers
location_url = self.invite_url[:self.invite_url.rfind(r"/")] + r["Location"]
self.cookie = r['Set-Cookie'].split(";")[0]
login_headers["Cookie"] = self.cookie
r = requests.get(location_url, headers=login_headers, allow_redirects=False).headers["Location"]
url = Compatible_auto("jige",self.api_address).get_web_code(self.wx_id,r)
requests.get(url, headers=login_headers, allow_redirects=False)
requests.get("http://yyyeee670894.1gkjk8yhyw.cn/user/login?"+url.split("?")[1], headers=login_headers, allow_redirects=False)
# print(login_headers['Cookie'])
# self.union_url = url[:url.rfind(r"/")]
self.read_headers = {'Connection': 'keep-alive', 'Upgrade-Insecure-Requests': '1',
'User-Agent': self.ua, 'Accept': '*/*',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6,zh-TW;q=0.5',
'Cookie': self.cookie}
self.withdraw_headers = {'Proxy-Connection': 'keep-alive', 'Accept': '*/*', 'X-Requested-With': 'XMLHttpRequest',
'User-Agent': self.ua, 'Content-Type': 'application/x-www-form-urlencoded',
'Origin': self.union_url, 'Referer': f'{self.union_url}/withdrawal', 'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'zh-CN,zh;q=0.9', 'Cookie': self.cookie}
url = requests.get('http://h5.abokxeh.cn/pipa_read?upuid=2802253', headers=self.read_headers,
allow_redirects=False).headers['Location']
self.union_url = url[:url.rfind(r"/")]
print("{}】登录成功".format(self.wx_name))
return True
except:
print("{}】登录时遇到问题".format(self.wx_name))
return False
def user_info(self):
try:
url = f'{self.union_url}/yeipad?bqb=eom&ivb=kff&qsz=nne&upuid=3284491&vlm=ssr&xik=mzo'
user_detail = requests.get(url, headers=self.read_headers)
if "抱歉,出错了" in user_detail.text:
print("{}】账号被拉黑".format(self.wx_name))
return False
money = re.search(r"余额:([\d.]+)元", user_detail.text)
read_pages = re.search(r'([\d.]+)篇', user_detail.text).group(0).replace('', '')
next_time = re.search(r'([\d.]+)</b>分钟后到来</p>', user_detail.text)
if next_time != None:
next_time = next_time.group(0).replace('</b>分钟后到来</p>', '')
else:
next_time = 0
self.money = float(money.group(1))
self.read_pages = int(read_pages)
self.next_time = int(next_time)
print("{}】已有{}元,已读{}篇,下次阅读时间{}".format(self.wx_name,self.money,self.read_pages,self.next_time))
return True
except:
print("{}】账号被拉黑".format(self.wx_name))
def read(self):
headers = {
"Connection": "keep-alive",
"Accept": "*/*",
"Access-Control-Request-Method": "GET",
"Access-Control-Request-Headers": "x-requested-with",
"Origin": self.union_url,
"User-Agent": self.ua,
"Sec-Fetch-Mode": "cors",
"Sec-Fetch-Site": "cross-site",
"Sec-Fetch-Dest": "empty",
"Referer": f"{self.union_url}/",
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "zh-CN,zh;q=0.9"
}
url = requests.get(f'http://yyyeee670930.1gkjk8yhyw.cn/read_task/ggg3',
headers=self.read_headers).json()['jump'].replace('read.html?','read_task/ddr?')+'&type=7&pageshow'+'&r='
url = 'https://h5.v2dx6gzdx5.cn/read_task' + url[url.rfind('/'):]
read_response = requests.get(url + str(random.random()), headers=headers)
if '已经被限制' in read_response.text:
print('{}】阅读被限制,继续下一个账号'.format(self.wx_name))
elif 'finish' in read_response.text:
print('{}】到达最后一篇文章'.format(self.wx_name))
return
# read_response = read_response.json()
# final_url = 'http://' + str(re.findall(r'^(?:http?://)?([^/]+)', url)).replace('[\'', '').replace('\']',
# '') + f'/read_task/{read_response["url"]}&_t=799888'
# response = requests.get(final_url, headers=headers)
# if '您已完成阅读任务' in response.text:
# user = str(BeautifulSoup(response.text, 'html.parser').find_all('p')[0])
# print(f"【{user.replace('<p>', '').replace('</p>', '')}】本轮阅读已经完成")
# else:
# print('未知错误')
else:
key = read_response.json()
for i in range(1, 31):
print(f'{i}')
if i + self.read_pages in check_id:
print(f"{self.wx_name}】到达设置的检测文章id{i + self.read_pages},等待过检")
Compatible_auto("jige",self.api_address).send_passage(key['url'])
time.sleep(10)
else:
sleep = random.randint(6, 10)
print(f"{self.wx_name}】模拟阅读{sleep}s")
time.sleep(sleep)
read_response = requests.get(url + str(random.random()) + f'&jkey={key["jkey"]}', headers=headers)
key = read_response.json()
if '已经被限制' in read_response.text:
print(f'{self.wx_name}】阅读被限制,继续下一个账号,被限制的id为{self.read_pages + i}')
check_id.append(self.read_pages + i)
break
elif 'finish' in read_response.text:
print(f'{self.wx_name}】到达最后一篇文章')
break
print(f"{self.wx_name}】阅读成功")
def withdraw(self):
if self.money >= 0.3 and self.wx_id not in no_cash_list:
money = round(self.money * 100, 1)
data = {'channel': 'wechat', 'money': str(money)} # 微信
# data = {'channel':'alipay','money':str(money),'u_ali_account':'账号','u_ali_real_name':'名字'}#支付宝,需要url编码
res = requests.post(self.union_url + '/withdrawal/submit_withdraw', headers=self.withdraw_headers,
data=data)
print("{}】提现结果:{}".format(self.wx_name,res.text))
else:
print("{}】不提现或不满足提现要求".format(self.wx_name))
def main(wx_id, api_address, wx_name):
a = Yuer(wx_id, api_address, wx_name)
if a.login():
pass
else:
return
try:
if a.user_info():
pass
else:
return
except:
return
try:
a.read()
except:
pass
a.user_info()
a.withdraw()
if __name__ == "__main__":
env_name = "yuanshen_api"
semaphore = threading.BoundedSemaphore(value=1)
threads = []
api_add = os.getenv(env_name)
if api_add is None:
print('无api地址请创建环境变量yuanshen_api填入api_address')
exit(0)
else:
api_add = "http://{}".format(api_add)
sessions = requests.get(api_add+ '/getallwx').json()
for session in sessions:
try:
t = threading.Thread(target=main, args=(session["Wxid"], api_add, session["wxname"],))
threads.append(t)
t.start()
time.sleep(5)
except Exception as e:
print("{}】发生异常{}".format(session["wxname"], e))
for t in threads:
t.join()