更新 点点赚_api.py
This commit is contained in:
parent
70670de652
commit
f993db0f77
@ -1,496 +1,504 @@
|
|||||||
# --------------------------------注释区--------------------------------
|
# --------------------------------注释区--------------------------------
|
||||||
# 入口:https://168750027-1257141735.cos-website.ap-nanjing.myqcloud.com/index.html?pid=16345
|
# 入口:https://168750027-1257141735.cos-website.ap-nanjing.myqcloud.com/index.html?pid=16345
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
# 需抓取数据:
|
# 需抓取数据:
|
||||||
# * 填写自动过检的api接口 本地 内网ip:5000 非本地自行进行穿透
|
# * 填写自动过检的api接口 本地 内网ip:5000 非本地自行进行穿透
|
||||||
# * 登录多少个账号就跑多少个账号
|
# * 登录多少个账号就跑多少个账号
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
# 抓取请求头中的user-agent填入yuanshen_useragent 无论多少个号都只填一个即可!!!!
|
# 抓取请求头中的user-agent填入yuanshen_useragent 无论多少个号都只填一个即可!!!!
|
||||||
#
|
#
|
||||||
# 变量名:yuanshen_api
|
# 变量名:yuanshen_api
|
||||||
#
|
#
|
||||||
# 填支付宝账号#姓名到 yuanshen_ddz_alipay 即可自动提现
|
# 填支付宝账号#姓名到 yuanshen_ddz_alipay 即可自动提现
|
||||||
withdraw_points = 10000 #提现积分阈值 10000=1r
|
withdraw_points = 10000 #提现积分阈值 10000=1r
|
||||||
# --------------------------------祈求区--------------------------------
|
# --------------------------------祈求区--------------------------------
|
||||||
# _ooOoo_
|
# _ooOoo_
|
||||||
# o8888888o
|
# o8888888o
|
||||||
# 88" . "88
|
# 88" . "88
|
||||||
# (| -_- |)
|
# (| -_- |)
|
||||||
# O\ = /O
|
# O\ = /O
|
||||||
# ____/`---'\____
|
# ____/`---'\____
|
||||||
# . ' \\| |// `.
|
# . ' \\| |// `.
|
||||||
# / \\||| : |||// \
|
# / \\||| : |||// \
|
||||||
# / _||||| -:- |||||- \
|
# / _||||| -:- |||||- \
|
||||||
# | | \\\ - /// | |
|
# | | \\\ - /// | |
|
||||||
# | \_| ''\---/'' | |
|
# | \_| ''\---/'' | |
|
||||||
# \ .-\__ `-` ___/-. /
|
# \ .-\__ `-` ___/-. /
|
||||||
# ___`. .' /--.--\ `. . __
|
# ___`. .' /--.--\ `. . __
|
||||||
# ."" '< `.___\_<|>_/___.' >'"".
|
# ."" '< `.___\_<|>_/___.' >'"".
|
||||||
# | | : `- \`.;`\ _ /`;.`/ - ` : | |
|
# | | : `- \`.;`\ _ /`;.`/ - ` : | |
|
||||||
# \ \ `-. \_ __\ /__ _/ .-` / /
|
# \ \ `-. \_ __\ /__ _/ .-` / /
|
||||||
# ======`-.____`-.___\_____/___.-`____.-'======
|
# ======`-.____`-.___\_____/___.-`____.-'======
|
||||||
# `=---='
|
# `=---='
|
||||||
#
|
#
|
||||||
# .............................................
|
# .............................................
|
||||||
# 佛祖保佑 永无BUG
|
# 佛祖保佑 永无BUG
|
||||||
# 佛祖镇楼 BUG辟邪
|
# 佛祖镇楼 BUG辟邪
|
||||||
# --------------------------------代码区--------------------------------
|
# --------------------------------代码区--------------------------------
|
||||||
|
|
||||||
|
|
||||||
import requests
|
import requests
|
||||||
import time
|
import time
|
||||||
import os
|
import os
|
||||||
import json
|
import json
|
||||||
import hashlib
|
import hashlib
|
||||||
import random
|
import random
|
||||||
import re
|
import re
|
||||||
import logging
|
import logging
|
||||||
import sys
|
import sys
|
||||||
import string
|
import string
|
||||||
from base64 import b64encode
|
from base64 import b64encode
|
||||||
import base64
|
import base64
|
||||||
import uuid
|
import uuid
|
||||||
from urllib.parse import urlparse, parse_qs,quote
|
from urllib.parse import urlparse, parse_qs,quote
|
||||||
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.0"
|
ver = "1.1"
|
||||||
envname = "yuanshen_api"
|
envname = "yuanshen_api"
|
||||||
|
|
||||||
debug = False #debug模式 开启即从脚本内部获取环境变量
|
debug = False #debug模式 开启即从脚本内部获取环境变量
|
||||||
debugcookie = "127.0.0.1:5000" #debug模式cookie
|
debugcookie = "127.0.0.1:5000" #debug模式cookie
|
||||||
|
|
||||||
is_bulletin = True #公告开关
|
is_bulletin = True #公告开关
|
||||||
is_toulu = False #偷撸公告开关
|
is_toulu = False #偷撸公告开关
|
||||||
is_with_sleep = False #是否开启随机延时
|
is_with_sleep = False #是否开启随机延时
|
||||||
|
|
||||||
|
|
||||||
class env():
|
class env():
|
||||||
"""
|
"""
|
||||||
env模块,获取cookie并转成列表,统计时间,提示脚本开始结束,检测一些配置,try except异常处理
|
env模块,获取cookie并转成列表,统计时间,提示脚本开始结束,检测一些配置,try except异常处理
|
||||||
:param args: 传递给env的参数
|
:param args: 传递给env的参数
|
||||||
:param kwargs: 传递给env的关键字参数
|
:param kwargs: 传递给env的关键字参数
|
||||||
:return: Null
|
:return: Null
|
||||||
|
|
||||||
Powered by huaji
|
Powered by huaji
|
||||||
"""
|
"""
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
self.cookie = None
|
self.cookie = None
|
||||||
self.env_ver = '1.5' #版本号
|
self.env_ver = '1.5' #版本号
|
||||||
self.split_chars = ['@', '&', '\n'] #分隔符
|
self.split_chars = ['@', '&', '\n'] #分隔符
|
||||||
self.identifiers = ['Powered By Huaji', 'QQ Group:901898186', 'yuanshen'] #标识符
|
self.identifiers = ['Powered By Huaji', 'QQ Group:901898186', 'yuanshen'] #标识符
|
||||||
def check_file(self):
|
def check_file(self):
|
||||||
file_path = __file__
|
file_path = __file__
|
||||||
try:
|
try:
|
||||||
|
|
||||||
with open(file_path, 'r', encoding='utf-8') as file:
|
with open(file_path, 'r', encoding='utf-8') as file:
|
||||||
content = file.read()
|
content = file.read()
|
||||||
|
|
||||||
results = {}
|
results = {}
|
||||||
|
|
||||||
# 批量检查每个标识符
|
# 批量检查每个标识符
|
||||||
for identifier in self.identifiers:
|
for identifier in self.identifiers:
|
||||||
if identifier in content:
|
if identifier in content:
|
||||||
results[identifier] = True
|
results[identifier] = True
|
||||||
else:
|
else:
|
||||||
results[identifier] = False
|
results[identifier] = False
|
||||||
logging.error(f"文件可能被恶意篡改,请勿修改文件内容")
|
logging.error(f"文件可能被恶意篡改,请勿修改文件内容")
|
||||||
|
|
||||||
all_identifiers_present = all(results.values())
|
all_identifiers_present = all(results.values())
|
||||||
if not all_identifiers_present:
|
if not all_identifiers_present:
|
||||||
logging.error(f"文件可能被恶意篡改,请勿修改文件内容")
|
logging.error(f"文件可能被恶意篡改,请勿修改文件内容")
|
||||||
self.force_exit()
|
self.force_exit()
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"读取文件时发生错误: {e}")
|
print(f"读取文件时发生错误: {e}")
|
||||||
self.force_exit()
|
self.force_exit()
|
||||||
|
|
||||||
def split_cookies(self):
|
def split_cookies(self):
|
||||||
"""根据多个分隔符分割cookie"""
|
"""根据多个分隔符分割cookie"""
|
||||||
for sep in self.split_chars:
|
for sep in self.split_chars:
|
||||||
if sep in self.cookie:
|
if sep in self.cookie:
|
||||||
return self.cookie.split(sep)
|
return self.cookie.split(sep)
|
||||||
return [self.cookie]
|
return [self.cookie]
|
||||||
|
|
||||||
def scmain(self):
|
def scmain(self):
|
||||||
apiurl = 'http://' + self.cookies[0]
|
apiurl = 'http://' + self.cookies[0]
|
||||||
r = requests.get(apiurl + '/getallwx').json()
|
r = requests.get(apiurl + '/getallwx').json()
|
||||||
for i, cookie in enumerate(r, 1):
|
for i, cookie in enumerate(r, 1):
|
||||||
print(f"--------开始第{i}个账号--------")
|
print(f"--------开始第{i}个账号--------")
|
||||||
main = yuanshen(cookie,apiurl)
|
main = yuanshen(cookie,apiurl)
|
||||||
main.main()
|
main.main()
|
||||||
print(f"--------第{i}个账号执行完毕--------")
|
print(f"--------第{i}个账号执行完毕--------")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def force_exit(self,code=0):
|
def force_exit(self,code=0):
|
||||||
exit()
|
exit()
|
||||||
print("Warning: 篡改你妈")
|
print("Warning: 篡改你妈")
|
||||||
os._exit(code) # 强制退出程序
|
os._exit(code) # 强制退出程序
|
||||||
sys.exit(code) # 正常退出
|
sys.exit(code) # 正常退出
|
||||||
import ctypes
|
import ctypes
|
||||||
while True:
|
while True:
|
||||||
ctypes.string_at(114514)
|
ctypes.string_at(114514)
|
||||||
ctypes.string_at(1919810)
|
ctypes.string_at(1919810)
|
||||||
ctypes.string_at(666666)
|
ctypes.string_at(666666)
|
||||||
print("Warning: 篡改你妈")
|
print("Warning: 篡改你妈")
|
||||||
|
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
if not os.getenv(envname) and not debug:
|
if not os.getenv(envname) and not debug:
|
||||||
logging.warning(f"请先设置环境变量[{envname}]")
|
logging.warning(f"请先设置环境变量[{envname}]")
|
||||||
self.force_exit()
|
self.force_exit()
|
||||||
|
|
||||||
self.cookie = os.getenv(envname, "")
|
self.cookie = os.getenv(envname, "")
|
||||||
|
|
||||||
if debug:
|
if debug:
|
||||||
self.cookie = debugcookie
|
self.cookie = debugcookie
|
||||||
if is_bulletin:
|
if is_bulletin:
|
||||||
try:
|
try:
|
||||||
print(requests.get("https://gitee.com/HuaJiB/yuanshen34/raw/master/pubilc.txt").text, "\n\n\n")
|
print(requests.get("https://gitee.com/HuaJiB/yuanshen34/raw/master/pubilc.txt").text, "\n\n\n")
|
||||||
except:
|
except:
|
||||||
logging.error("网络异常,链接公告服务器失败(gitee),请检查网络")
|
logging.error("网络异常,链接公告服务器失败(gitee),请检查网络")
|
||||||
self.force_exit()
|
self.force_exit()
|
||||||
if is_toulu:
|
if is_toulu:
|
||||||
try:
|
try:
|
||||||
txt = '''
|
txt = '''
|
||||||
此为滑稽的偷撸本本 如你不在滑稽的小群却意外通过某种渠道获得了该脚本
|
此为滑稽的偷撸本本 如你不在滑稽的小群却意外通过某种渠道获得了该脚本
|
||||||
请联系QQ3487934983 提供证据后 你将代替泄露人员获得该群位置
|
请联系QQ3487934983 提供证据后 你将代替泄露人员获得该群位置
|
||||||
=======================================================
|
=======================================================
|
||||||
'''
|
'''
|
||||||
print(txt*5)
|
print(txt*5)
|
||||||
except:
|
except:
|
||||||
self.force_exit()
|
self.force_exit()
|
||||||
if is_with_sleep:
|
if is_with_sleep:
|
||||||
random_time = random.randint(10,60)
|
random_time = random.randint(10,60)
|
||||||
logging.info(f"随机延时[{random_time}]秒")
|
logging.info(f"随机延时[{random_time}]秒")
|
||||||
time.sleep(random_time)
|
time.sleep(random_time)
|
||||||
|
|
||||||
self.cookies = self.split_cookies()
|
self.cookies = self.split_cookies()
|
||||||
account_count = len(self.cookies)
|
account_count = len(self.cookies)
|
||||||
logging.info(f"一共获取到{account_count}个账号")
|
logging.info(f"一共获取到{account_count}个账号")
|
||||||
print(f"=========🔔开始执行[{code}][{ver}]=========\n")
|
print(f"=========🔔开始执行[{code}][{ver}]=========\n")
|
||||||
|
|
||||||
|
|
||||||
start_time = time.time()
|
start_time = time.time()
|
||||||
if debug:
|
if debug:
|
||||||
self.scmain()
|
self.scmain()
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
self.scmain()
|
self.scmain()
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logging.error(f"脚本执行出错: {e}")
|
logging.error(f"脚本执行出错: {e}")
|
||||||
end_time = time.time()
|
end_time = time.time()
|
||||||
|
|
||||||
execution_time = end_time - start_time
|
execution_time = end_time - start_time
|
||||||
|
|
||||||
print(f"\n============🔔脚本[{code}]执行结束============")
|
print(f"\n============🔔脚本[{code}]执行结束============")
|
||||||
print(f"本次脚本总运行时间: [{execution_time:.2f}] 秒")
|
print(f"本次脚本总运行时间: [{execution_time:.2f}] 秒")
|
||||||
self.force_exit()
|
self.force_exit()
|
||||||
|
|
||||||
def main(self):
|
def main(self):
|
||||||
self.check_file()
|
self.check_file()
|
||||||
self.run()
|
self.run()
|
||||||
|
|
||||||
def random_str(self,charset="all", length=8, to_upper=False,to_lower=False):
|
def random_str(self,charset="all", length=8, to_upper=False,to_lower=False):
|
||||||
if charset == "all": #包含大小写字母和数字
|
if charset == "all": #包含大小写字母和数字
|
||||||
chars = string.ascii_letters + string.digits
|
chars = string.ascii_letters + string.digits
|
||||||
elif charset == "letters": #大小写字母
|
elif charset == "letters": #大小写字母
|
||||||
chars = string.ascii_letters
|
chars = string.ascii_letters
|
||||||
elif charset == "digits":
|
elif charset == "digits":
|
||||||
chars = string.digits
|
chars = string.digits
|
||||||
elif charset == "lowercase": #小写字母
|
elif charset == "lowercase": #小写字母
|
||||||
chars = string.ascii_lowercase
|
chars = string.ascii_lowercase
|
||||||
elif charset == "uuid":
|
elif charset == "uuid":
|
||||||
return str(uuid.uuid4())
|
return str(uuid.uuid4())
|
||||||
elif charset == "uuid_str":
|
elif charset == "uuid_str":
|
||||||
return str(uuid.uuid4()).replace("-", "")
|
return str(uuid.uuid4()).replace("-", "")
|
||||||
elif charset != '' and charset is not None:
|
elif charset != '' and charset is not None:
|
||||||
chars = charset
|
chars = charset
|
||||||
|
|
||||||
|
|
||||||
random_string = ''.join(random.choice(chars) for _ in range(length))
|
random_string = ''.join(random.choice(chars) for _ in range(length))
|
||||||
|
|
||||||
if to_upper:
|
if to_upper:
|
||||||
return random_string.upper()
|
return random_string.upper()
|
||||||
elif to_lower:
|
elif to_lower:
|
||||||
return random_string.lower()
|
return random_string.lower()
|
||||||
else:
|
else:
|
||||||
return random_string
|
return random_string
|
||||||
|
|
||||||
def aes_encrypt(self,data):
|
def aes_encrypt(self,data):
|
||||||
from Crypto.Cipher import AES
|
from Crypto.Cipher import AES
|
||||||
from Crypto.Util.Padding import pad, unpad
|
from Crypto.Util.Padding import pad, unpad
|
||||||
from binascii import hexlify, unhexlify
|
from binascii import hexlify, unhexlify
|
||||||
key = self.key.encode('utf-8')
|
key = self.key.encode('utf-8')
|
||||||
iv = self.iv.encode('utf-8')
|
iv = self.iv.encode('utf-8')
|
||||||
cipher = AES.new(key, AES.MODE_CBC, iv)
|
cipher = AES.new(key, AES.MODE_CBC, iv)
|
||||||
padded_plaintext = pad(data.encode('utf-8'), AES.block_size)
|
padded_plaintext = pad(data.encode('utf-8'), AES.block_size)
|
||||||
ciphertext = cipher.encrypt(padded_plaintext)
|
ciphertext = cipher.encrypt(padded_plaintext)
|
||||||
encrypted_base64 = b64encode(ciphertext).decode('utf-8')
|
encrypted_base64 = b64encode(ciphertext).decode('utf-8')
|
||||||
|
|
||||||
return encrypted_base64
|
return encrypted_base64
|
||||||
|
|
||||||
|
from functools import wraps
|
||||||
|
|
||||||
|
|
||||||
def retry_(max_retries=3, retry_delay=1):
|
def retry(exceptions = Exception, tries=5, delay=2, backoff=2):
|
||||||
def decorator(func):
|
"""
|
||||||
def wrapper(*args, **kwargs):
|
简单的重试 module,如果重试失败则抛出错误。
|
||||||
retries = 0
|
"""
|
||||||
while retries < max_retries:
|
def decorator(func):
|
||||||
try:
|
@wraps(func)
|
||||||
return func(*args, **kwargs)
|
def wrapper(*args, **kwargs):
|
||||||
except requests.exceptions.RequestException as e:
|
# 每次调用时初始化独立的重试计数和延迟时间
|
||||||
retries += 1
|
_tries, _delay = tries, delay
|
||||||
if retries < max_retries:
|
while _tries > 1:
|
||||||
logging.info(f"发生错误:将在{retry_delay}秒后重试")
|
try:
|
||||||
time.sleep(retry_delay)
|
return func(*args, **kwargs)
|
||||||
else:
|
except exceptions as e:
|
||||||
logging.info("已超过最大重试次数!")
|
print(f"发生错误:[{e}], Retrying in {_delay} seconds ...")
|
||||||
raise
|
time.sleep(_delay)
|
||||||
return wrapper
|
_tries -= 1
|
||||||
return decorator
|
_delay *= backoff
|
||||||
class yuanshen:
|
# 最后一次尝试
|
||||||
def __init__(self,cookie,apiurl) -> None:
|
return func(*args, **kwargs)
|
||||||
self.biz = ['MzA4MjQ5NDMwNg==','MzI2OTA0NzQ5OA==','MzU4OTQ3MDc0Mg==']
|
return wrapper
|
||||||
self.apiurl = apiurl
|
return decorator
|
||||||
self.Wxid = cookie['Wxid']
|
|
||||||
self.bz = cookie['wxname']
|
class yuanshen:
|
||||||
logging.info(f'[{self.bz}]开始运行')
|
def __init__(self,cookie,apiurl) -> None:
|
||||||
|
self.biz = ['MzA4MjQ5NDMwNg==','MzI2OTA0NzQ5OA==','MzU4OTQ3MDc0Mg==']
|
||||||
|
self.apiurl = apiurl
|
||||||
def extract_url(self,url):
|
self.Wxid = cookie['Wxid']
|
||||||
# 解析URL
|
self.bz = cookie['wxname']
|
||||||
parsed_url = urlparse(url)
|
logging.info(f'[{self.bz}]开始运行')
|
||||||
full_domain = parsed_url.netloc
|
|
||||||
query_params = url.split('?')[1]
|
|
||||||
|
def extract_url(self,url):
|
||||||
|
# 解析URL
|
||||||
if not query_params:
|
parsed_url = urlparse(url)
|
||||||
query_params = None
|
full_domain = parsed_url.netloc
|
||||||
|
query_params = url.split('?')[1]
|
||||||
return full_domain, query_params
|
|
||||||
|
|
||||||
def push(self):
|
if not query_params:
|
||||||
url = f"{self.apiurl}/zdgjc"
|
query_params = None
|
||||||
data = {"url":self.acturl}
|
|
||||||
r = requests.post(url,json=data).json()
|
return full_domain, query_params
|
||||||
logging.info(f"遇到检测文章:推送结果[{r}]")
|
|
||||||
|
def push(self):
|
||||||
@retry_(max_retries=3, retry_delay=1)
|
url = f"{self.apiurl}/zdgjc"
|
||||||
def getreadurl(self):
|
data = {"url":self.acturl}
|
||||||
url = f"http://{self.baseurl}/index/mob/get_read_qr.html"
|
r = requests.post(url,json=data).json()
|
||||||
r = requests.get(url,headers=self.headers,cookies=self.cookie).json()
|
logging.info(f"遇到检测文章:推送结果[{r}]")
|
||||||
if r['code'] == 1:
|
|
||||||
url_pattern = r"http[s]?://[^\s]+"
|
@retry()
|
||||||
urls = re.findall(url_pattern, r['web_url'])
|
def getreadurl(self):
|
||||||
self.domain,self.readcode = self.extract_url(urls[0])
|
url = f"http://{self.baseurl}/index/mob/get_read_qr.html"
|
||||||
if urls:
|
r = requests.get(url,headers=self.headers,cookies=self.cookie).json()
|
||||||
logging.info(f"获取到阅读链接: [{self.domain}][{self.readcode}]")
|
if r['code'] == 1:
|
||||||
self.readh = {
|
url_pattern = r"http[s]?://[^\s]+"
|
||||||
"Host": f"{self.domain}",
|
urls = re.findall(url_pattern, r['web_url'])
|
||||||
"Connection": "keep-alive",
|
self.domain,self.readcode = self.extract_url(urls[0])
|
||||||
"Content-Length": "47",
|
if urls:
|
||||||
"Accept": "*/*",
|
logging.info(f"获取到阅读链接: [{self.domain}][{self.readcode}]")
|
||||||
"X-Requested-With": "XMLHttpRequest",
|
self.readh = {
|
||||||
"User-Agent": ua,
|
"Host": f"{self.domain}",
|
||||||
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
|
"Connection": "keep-alive",
|
||||||
"Origin": f"http://{self.domain}",
|
"Content-Length": "47",
|
||||||
"Referer": f"http://{self.domain}/?{self.readcode}",
|
"Accept": "*/*",
|
||||||
"Accept-Encoding": "gzip, deflate",
|
"X-Requested-With": "XMLHttpRequest",
|
||||||
"Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7"
|
"User-Agent": ua,
|
||||||
}
|
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
|
||||||
return True
|
"Origin": f"http://{self.domain}",
|
||||||
else:
|
"Referer": f"http://{self.domain}/?{self.readcode}",
|
||||||
logging.warning("❌️未获取到阅读链接")
|
"Accept-Encoding": "gzip, deflate",
|
||||||
return False
|
"Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7"
|
||||||
else:
|
}
|
||||||
logging.warning(f"❌️未获取到阅读链接[{r}]")
|
return True
|
||||||
return False
|
else:
|
||||||
@retry_(max_retries=3, retry_delay=1)
|
logging.warning("❌️未获取到阅读链接")
|
||||||
def read(self):
|
return False
|
||||||
url = f"http://{self.domain}/index/index/get_article.html"
|
else:
|
||||||
url2 = f"http://{self.domain}/index/index/auth_record.html"
|
logging.warning(f"❌️未获取到阅读链接[{r}]")
|
||||||
|
return False
|
||||||
while True:
|
@retry()
|
||||||
data = {
|
def read(self):
|
||||||
'code': self.readcode,
|
url = f"http://{self.domain}/index/index/get_article.html"
|
||||||
'uid':self.uid
|
url2 = f"http://{self.domain}/index/index/auth_record.html"
|
||||||
}
|
|
||||||
r = requests.post(url,headers=self.readh,data=data,timeout=10).json()
|
while True:
|
||||||
if r['code'] == 1:
|
data = {
|
||||||
self.acturl = r["data"]["info"]["link2"]
|
'code': self.readcode,
|
||||||
rid = int(r['data']['info']['rid'])
|
'uid':self.uid
|
||||||
logging.info(f"获取文章成功: [{r['msg']}]")
|
}
|
||||||
if 'addtime' not in r['data']['info']:
|
r = requests.post(url,headers=self.readh,data=data,timeout=10).json()
|
||||||
logging.info("遇到检测文章 推送ing...")
|
if r['code'] == 1:
|
||||||
self.push()
|
self.acturl = r["data"]["info"]["link2"]
|
||||||
time.sleep(random.randint(18,28))
|
rid = int(r['data']['info']['rid'])
|
||||||
else:
|
logging.info(f"获取文章成功: [{r['msg']}]")
|
||||||
time.sleep(random.randint(9,18))
|
if 'addtime' not in r['data']['info']:
|
||||||
else:
|
logging.info("遇到检测文章 推送ing...")
|
||||||
logging.warning(f"❌️获取文章失败: [{r}]")
|
self.push()
|
||||||
break
|
time.sleep(random.randint(18,28))
|
||||||
|
else:
|
||||||
data = {
|
time.sleep(random.randint(9,18))
|
||||||
'rid': rid,
|
else:
|
||||||
'time_is_gou':1
|
logging.warning(f"❌️获取文章失败: [{r}]")
|
||||||
}
|
break
|
||||||
r = requests.post(url2,headers=self.readh,data=data,timeout=10).json()
|
|
||||||
if r['code'] == 1:
|
data = {
|
||||||
logging.info(f"第[{r['txt']}]篇文章阅读成功")
|
'rid': rid,
|
||||||
else:
|
'time_is_gou':1
|
||||||
logging.warning(f"❌️阅读文章失败: [{r['msg']}]")
|
}
|
||||||
if '完成' in r['msg']:
|
r = requests.post(url2,headers=self.readh,data=data,timeout=10).json()
|
||||||
url = f"http://{self.domain}/index/index/read_result.html"
|
if r['code'] == 1:
|
||||||
data = {
|
logging.info(f"第[{r['txt']}]篇文章阅读成功")
|
||||||
'code':self.readcode
|
else:
|
||||||
}
|
logging.warning(f"❌️阅读文章失败: [{r['msg']}]")
|
||||||
r = requests.post(url,headers=self.readh,data=data,timeout=10).json()
|
if '完成' in r['msg']:
|
||||||
if r['code'] == 1:
|
url = f"http://{self.domain}/index/index/read_result.html"
|
||||||
logging.info(f"🔔结束阅读成功: [{r['msg']}]")
|
data = {
|
||||||
else:
|
'code':self.readcode
|
||||||
logging.warning(f"❌️结束阅读失败: [{r}]")
|
}
|
||||||
break
|
r = requests.post(url,headers=self.readh,data=data,timeout=10).json()
|
||||||
|
if r['code'] == 1:
|
||||||
time.sleep(random.randint(2,5))
|
logging.info(f"🔔结束阅读成功: [{r['msg']}]")
|
||||||
|
else:
|
||||||
def userinfo(self):
|
logging.warning(f"❌️结束阅读失败: [{r}]")
|
||||||
url = f'http://{self.baseurl}/index/mob/index.html'
|
break
|
||||||
r = requests.get(url,headers=self.headers2,cookies=self.cookie)
|
|
||||||
if r.status_code == 200:
|
time.sleep(random.randint(2,5))
|
||||||
match = re.search(r'(?<=可用积分:)\d+', r.text)
|
|
||||||
if match:
|
def userinfo(self):
|
||||||
points = int(match.group())
|
url = f'http://{self.baseurl}/index/mob/index.html'
|
||||||
logging.info(f"🔔当前账号剩余积分:[{points}]=[{points/10000}]元💵")
|
r = requests.get(url,headers=self.headers2,cookies=self.cookie)
|
||||||
else:
|
if r.status_code == 200:
|
||||||
logging.warning("❌️没有获取到积分❌️")
|
match = re.search(r'(?<=可用积分:)\d+', r.text)
|
||||||
if points > withdraw_points:
|
if match:
|
||||||
url = f'http://{self.baseurl}/index/mob/tixian.html'
|
points = int(match.group())
|
||||||
r = requests.get(url,headers=self.headers2,cookies=self.cookie,allow_redirects= False)
|
logging.info(f"🔔当前账号剩余积分:[{points}]=[{points/10000}]元💵")
|
||||||
loginurl = r.headers['Location']
|
else:
|
||||||
data = {'Wxid':self.Wxid,'url':loginurl}
|
logging.warning("❌️没有获取到积分❌️")
|
||||||
url = requests.post(self.apiurl+'/loginbyweb2',json=data).json()['url']
|
if points > withdraw_points:
|
||||||
code = url.split('code=')[1].split('&')[0]
|
url = f'http://{self.baseurl}/index/mob/tixian.html'
|
||||||
state = url.split('state=')[1]
|
r = requests.get(url,headers=self.headers2,cookies=self.cookie,allow_redirects= False)
|
||||||
logging.info(f"🔔获取提现链接成功: [{url}]")
|
loginurl = r.headers['Location']
|
||||||
url = f'http://{self.baseurl}/index/mob/fa_tx.html'
|
data = {'Wxid':self.Wxid,'url':loginurl}
|
||||||
wi_po = int(str(points)[:-3] + '000')
|
url = requests.post(self.apiurl+'/loginbyweb2',json=data).json()['url']
|
||||||
wi_money = int(points/10000)
|
code = url.split('code=')[1].split('&')[0]
|
||||||
alipays = os.getenv('yuanshen_ddz_alipay')
|
state = url.split('state=')[1]
|
||||||
if not alipays:
|
logging.info(f"🔔获取提现链接成功: [{url}]")
|
||||||
logging.warning('没有配置支付宝账号')
|
url = f'http://{self.baseurl}/index/mob/fa_tx.html'
|
||||||
return
|
wi_po = int(str(points)[:-3] + '000')
|
||||||
alipays = alipays.split('#')
|
wi_money = int(points/10000)
|
||||||
data = {
|
alipays = os.getenv('yuanshen_ddz_alipay')
|
||||||
"code": code,
|
if not alipays:
|
||||||
"money": wi_money,
|
logging.warning('没有配置支付宝账号')
|
||||||
"kou_credit": wi_po,
|
return
|
||||||
"tx_type": "2",
|
alipays = alipays.split('#')
|
||||||
"ali_name":alipays[1],
|
data = {
|
||||||
"ali_account": alipays[0]
|
"code": code,
|
||||||
}
|
"money": wi_money,
|
||||||
r = requests.post(url,headers=self.headers2,data=data,cookies=self.cookie).json()
|
"kou_credit": wi_po,
|
||||||
logging.info(f'提现结果[{r}]')
|
"tx_type": "2",
|
||||||
else:
|
"ali_name":alipays[1],
|
||||||
logging.info('不提现')
|
"ali_account": alipays[0]
|
||||||
|
}
|
||||||
|
r = requests.post(url,headers=self.headers2,data=data,cookies=self.cookie).json()
|
||||||
def login(self):
|
logging.info(f'提现结果[{r}]')
|
||||||
|
else:
|
||||||
url = 'http://sx.shuxiangby.cn/index/mob/index?cos=1&pid=16345'
|
logging.info('不提现')
|
||||||
h = {
|
|
||||||
"Host": "sx.shuxiangby.cn",
|
|
||||||
"Connection": "keep-alive",
|
def login(self):
|
||||||
"Upgrade-Insecure-Requests": "1",
|
|
||||||
"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/98 MicroMessenger/8.0.48.2580(0x28003035) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64",
|
url = 'http://sx.shuxiangby.cn/index/mob/index?cos=1&pid=16345'
|
||||||
"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",
|
h = {
|
||||||
"X-Requested-With": "com.tencent.mm",
|
"Host": "sx.shuxiangby.cn",
|
||||||
"Accept-Encoding": "gzip, deflate",
|
"Connection": "keep-alive",
|
||||||
"Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7",
|
"Upgrade-Insecure-Requests": "1",
|
||||||
}
|
"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/98 MicroMessenger/8.0.48.2580(0x28003035) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64",
|
||||||
r = requests.get(url,headers=h,allow_redirects= False)
|
"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",
|
||||||
loginurl = r.headers['Location']
|
"X-Requested-With": "com.tencent.mm",
|
||||||
data = {'Wxid':self.Wxid,'url':loginurl}
|
"Accept-Encoding": "gzip, deflate",
|
||||||
url = requests.post(self.apiurl+'/loginbyweb',json=data).json()['url']#http://sx.shuxiangby.cn/index/mob/auth2.html?cos=1&pid=16345&code=011NZQ1w3OGAO33Ac44w3MxDwL2NZQ1S&state=STATE
|
"Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7",
|
||||||
print(url)
|
}
|
||||||
r = requests.get(url,headers=h,allow_redirects= False)
|
r = requests.get(url,headers=h,allow_redirects= False)
|
||||||
loginurl = r.headers['Location']#http://41521229395.auth.dianqu33.cn/index/mob/auth.html?cos=1&pid=16345&code=011NZQ1w3OGAO33Ac44w3MxDwL2NZQ1S&state=STATE
|
loginurl = r.headers['Location']
|
||||||
print(loginurl)
|
data = {'Wxid':self.Wxid,'url':loginurl}
|
||||||
domain = urlparse(loginurl).netloc
|
url = requests.post(self.apiurl+'/loginbyweb',json=data).json()['url']#http://sx.shuxiangby.cn/index/mob/auth2.html?cos=1&pid=16345&code=011NZQ1w3OGAO33Ac44w3MxDwL2NZQ1S&state=STATE
|
||||||
h = {
|
print(url)
|
||||||
"Host": domain,
|
r = requests.get(url,headers=h,allow_redirects= False)
|
||||||
"Connection": "keep-alive",
|
loginurl = r.headers['Location']#http://41521229395.auth.dianqu33.cn/index/mob/auth.html?cos=1&pid=16345&code=011NZQ1w3OGAO33Ac44w3MxDwL2NZQ1S&state=STATE
|
||||||
"Upgrade-Insecure-Requests": "1",
|
print(loginurl)
|
||||||
"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/98 MicroMessenger/8.0.48.2580(0x28003035) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64",
|
domain = urlparse(loginurl).netloc
|
||||||
"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",
|
h = {
|
||||||
"X-Requested-With": "com.tencent.mm",
|
"Host": domain,
|
||||||
"Accept-Encoding": "gzip, deflate",
|
"Connection": "keep-alive",
|
||||||
"Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7"
|
"Upgrade-Insecure-Requests": "1",
|
||||||
}
|
"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/98 MicroMessenger/8.0.48.2580(0x28003035) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64",
|
||||||
r = requests.get(loginurl,headers=h,allow_redirects= False)
|
"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",
|
||||||
self.cookie = r.headers['Set-Cookie']
|
"X-Requested-With": "com.tencent.mm",
|
||||||
self.baseurl = f'{random_11_digits()}.sx.shuxiangby.cn'
|
"Accept-Encoding": "gzip, deflate",
|
||||||
self.uid = self.cookie.split('uid=')[1].split(';')[0]
|
"Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7"
|
||||||
user_openid = self.cookie.split('user_openid=')[1].split(';')[0]
|
}
|
||||||
PHPSESSID = self.cookie.split('PHPSESSID=')[1].split(';')[0]
|
r = requests.get(loginurl,headers=h,allow_redirects= False)
|
||||||
self.cookie = {'uid':self.uid,'user_openid':user_openid,'PHPSESSID':PHPSESSID}
|
self.cookie = r.headers['Set-Cookie']
|
||||||
logging.info('登录成功')
|
self.baseurl = f'{random_11_digits()}.sx.shuxiangby.cn'
|
||||||
self.headers = {
|
self.uid = self.cookie.split('uid=')[1].split(';')[0]
|
||||||
"Host": self.baseurl,
|
user_openid = self.cookie.split('user_openid=')[1].split(';')[0]
|
||||||
"Connection": "keep-alive",
|
PHPSESSID = self.cookie.split('PHPSESSID=')[1].split(';')[0]
|
||||||
"Accept": "*/*",
|
self.cookie = {'uid':self.uid,'user_openid':user_openid,'PHPSESSID':PHPSESSID}
|
||||||
"User-Agent": ua,
|
logging.info('登录成功')
|
||||||
"X-Requested-With": "XMLHttpRequest",
|
self.headers = {
|
||||||
"Referer": f"http://{self.baseurl}/index/mob/index.html",
|
"Host": self.baseurl,
|
||||||
"Accept-Encoding": "gzip, deflate",
|
"Connection": "keep-alive",
|
||||||
"Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7"
|
"Accept": "*/*",
|
||||||
}
|
"User-Agent": ua,
|
||||||
|
"X-Requested-With": "XMLHttpRequest",
|
||||||
self.headers2 = {
|
"Referer": f"http://{self.baseurl}/index/mob/index.html",
|
||||||
"Host": self.baseurl,
|
"Accept-Encoding": "gzip, deflate",
|
||||||
"Connection": "keep-alive",
|
"Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7"
|
||||||
"Upgrade-Insecure-Requests": "1",
|
}
|
||||||
"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",
|
self.headers2 = {
|
||||||
"X-Requested-With": "com.tencent.mm",
|
"Host": self.baseurl,
|
||||||
"Referer": f"http://{self.baseurl}/index/mob/mine.html",
|
"Connection": "keep-alive",
|
||||||
"Accept-Encoding": "gzip, deflate",
|
"Upgrade-Insecure-Requests": "1",
|
||||||
"Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7"
|
"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",
|
||||||
|
"X-Requested-With": "com.tencent.mm",
|
||||||
|
"Referer": f"http://{self.baseurl}/index/mob/mine.html",
|
||||||
|
"Accept-Encoding": "gzip, deflate",
|
||||||
|
"Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7"
|
||||||
|
}
|
||||||
def main(self):
|
|
||||||
self.login()
|
|
||||||
if self.getreadurl():
|
|
||||||
print("="*30)
|
|
||||||
time.sleep(random.randint(3,5))
|
|
||||||
self.read()
|
def main(self):
|
||||||
time.sleep(random.randint(3,5))
|
try:
|
||||||
print("="*30)
|
self.login()
|
||||||
self.userinfo()
|
if self.getreadurl():
|
||||||
|
print("="*30)
|
||||||
|
time.sleep(random.randint(3,5))
|
||||||
|
self.read()
|
||||||
|
time.sleep(random.randint(3,5))
|
||||||
def random_11_digits():
|
print("="*30)
|
||||||
first_digit = random.randint(1, 9)
|
self.userinfo()
|
||||||
num = str(first_digit)
|
except Exception as e:
|
||||||
for i in range(10):
|
logging.error(f'发生错误:{e}')
|
||||||
num += str(random.randint(0, 9))
|
|
||||||
return num
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
def random_11_digits():
|
||||||
ua = os.getenv('yuanshen_useragent')
|
first_digit = random.randint(1, 9)
|
||||||
#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/1260117 MMWEBSDK/20240301 MMWEBID/4020 MicroMessenger/8.0.48.2580(0x28003035) WeChat/arm64 Weixin Android Tablet NetType/WIFI Language/zh_CN ABI/arm64'
|
num = str(first_digit)
|
||||||
if not ua:
|
for i in range(10):
|
||||||
logging.info("❌你还没有设置user_agent,请设置环境变量:yuanshen_useragent")
|
num += str(random.randint(0, 9))
|
||||||
exit()
|
return num
|
||||||
|
|
||||||
|
|
||||||
|
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/1260117 MMWEBSDK/20240301 MMWEBID/4020 MicroMessenger/8.0.48.2580(0x28003035) WeChat/arm64 Weixin Android Tablet NetType/WIFI Language/zh_CN ABI/arm64'
|
||||||
|
if not ua:
|
||||||
|
logging.info("❌你还没有设置user_agent,请设置环境变量:yuanshen_useragent")
|
||||||
|
exit()
|
||||||
|
|
||||||
env().main()
|
env().main()
|
||||||
Loading…
Reference in New Issue
Block a user