mirror of
https://github.com/3288588344/toulu.git
synced 2025-12-16 23:11:00 +08:00
Add files via upload
This commit is contained in:
148
水费易.py
Normal file
148
水费易.py
Normal file
@@ -0,0 +1,148 @@
|
|||||||
|
"""
|
||||||
|
抓包m.ipaiyun.cn域名下的ck,填到环境变量名SFYCK中
|
||||||
|
例如:
|
||||||
|
SFYCK = 'ASP.NET_SessionId=xxxxxx; IPAI_UV=xxxx; temp_clause=1815556'
|
||||||
|
"""
|
||||||
|
import os
|
||||||
|
import requests
|
||||||
|
import asyncio
|
||||||
|
from requests.adapters import HTTPAdapter
|
||||||
|
from urllib3.util.retry import Retry
|
||||||
|
import random
|
||||||
|
|
||||||
|
class SYFSign:
|
||||||
|
def __init__(self):
|
||||||
|
self.name = "水费易签到"
|
||||||
|
self.SFYCK = os.getenv("SFYCK", "").split("\n")
|
||||||
|
self.baseUrl = "https://m.ipaiyun.cn"
|
||||||
|
self.headers = {
|
||||||
|
'Host': 'm.ipaiyun.cn',
|
||||||
|
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36',
|
||||||
|
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
|
||||||
|
'Origin': self.baseUrl,
|
||||||
|
'Referer': f'{self.baseUrl}/Ipai/Home/Index?code=031sLtFa11eBTH0d0uFa1NqtY53sLtFQ&state=wxbe5b7a2bc0467240',
|
||||||
|
'Accept-Encoding': 'gzip, deflate, br',
|
||||||
|
}
|
||||||
|
|
||||||
|
retry_strategy = Retry(
|
||||||
|
total=3,
|
||||||
|
status_forcelist=[429, 500, 502, 503, 504],
|
||||||
|
method_whitelist=["POST", "GET"],
|
||||||
|
backoff_factor=1
|
||||||
|
)
|
||||||
|
self.adapter = HTTPAdapter(max_retries=retry_strategy)
|
||||||
|
self.http = requests.Session()
|
||||||
|
self.http.mount("https://", self.adapter)
|
||||||
|
|
||||||
|
def get_proclamation(self):
|
||||||
|
primary_url = "https://github.com/3288588344/toulu/raw/refs/heads/main/tl.txt"
|
||||||
|
backup_url = "https://tfapi.cn/TL/tl.json"
|
||||||
|
|
||||||
|
try:
|
||||||
|
response = self.http.get(primary_url, timeout=10)
|
||||||
|
if response.status_code == 200:
|
||||||
|
print("📢 公告信息")
|
||||||
|
print("=" * 45)
|
||||||
|
print(response.text)
|
||||||
|
print("=" * 45 + "\n")
|
||||||
|
print("公告获取成功,开始执行任务...\n")
|
||||||
|
return
|
||||||
|
except requests.exceptions.RequestException as e:
|
||||||
|
print(f"获取公告时发生错误: {e}, 尝试备用链接...")
|
||||||
|
|
||||||
|
try:
|
||||||
|
response = self.http.get(backup_url, timeout=10)
|
||||||
|
if response.status_code == 200:
|
||||||
|
print("\n" + "=" * 14)
|
||||||
|
print("📢 公告信息")
|
||||||
|
print("=" * 45)
|
||||||
|
print(response.text)
|
||||||
|
print("=" * 45 + "\n")
|
||||||
|
print("公告获取成功,开始执行任务...\n")
|
||||||
|
else:
|
||||||
|
print(f"⚠️ 获取公告失败,状态码: {response.status_code}")
|
||||||
|
except requests.exceptions.RequestException as e:
|
||||||
|
print(f"⚠️ 获取公告时发生错误: {e}, 可能是网络问题或链接无效。")
|
||||||
|
|
||||||
|
async def main(self):
|
||||||
|
self.get_proclamation()
|
||||||
|
|
||||||
|
print(f"\n已随机分配 User-Agent\n\n{self.headers['User-Agent']}")
|
||||||
|
for index, cookie in enumerate(self.SFYCK):
|
||||||
|
if not cookie.strip():
|
||||||
|
continue
|
||||||
|
|
||||||
|
cookie_parts = cookie.split('#')
|
||||||
|
headers = self.headers.copy()
|
||||||
|
headers['Cookie'] = cookie_parts[0].strip() if cookie_parts else ""
|
||||||
|
member_id = cookie_parts[1].strip() if len(cookie_parts) > 1 else ""
|
||||||
|
|
||||||
|
print(f"\n*****第[{index+1}]个{self.name}账号*****")
|
||||||
|
await self.process_account(index+1, headers, member_id)
|
||||||
|
await asyncio.sleep(2 + random.random() * 3)
|
||||||
|
|
||||||
|
async def process_account(self, index, headers, member_id):
|
||||||
|
try:
|
||||||
|
user_info = await self.get_user_info(headers, member_id)
|
||||||
|
if user_info.get("code") != 0:
|
||||||
|
print(user_info.get("message", "获取用户信息失败"))
|
||||||
|
return
|
||||||
|
|
||||||
|
nick_name = user_info.get("resultJson", {}).get("userMember", {}).get("nickName", "未知用户")
|
||||||
|
phone = user_info.get("resultJson", {}).get("userMember", {}).get("mobilePhone", "未知手机号")
|
||||||
|
sign_num = user_info.get("resultJson", {}).get("signNum", 0)
|
||||||
|
|
||||||
|
print(f"{nick_name}({phone})")
|
||||||
|
|
||||||
|
if sign_num == 0:
|
||||||
|
print("今日已签到")
|
||||||
|
else:
|
||||||
|
sign_result = await self.sign(headers, member_id)
|
||||||
|
if sign_result.get("code") == 0:
|
||||||
|
print(f"签到成功,已连续签到{sign_result.get('resultJson', {}).get('signdays', 0)}天")
|
||||||
|
else:
|
||||||
|
print(f"签到失败:{sign_result.get('message', '未知错误')}")
|
||||||
|
|
||||||
|
points_result = await self.get_points(headers, member_id)
|
||||||
|
if points_result.get("code") == 0:
|
||||||
|
points = points_result.get("resultJson", {}).get("meberinfo", {}).get("totalIntegral", 0)
|
||||||
|
print(f"当前积分:{points}")
|
||||||
|
else:
|
||||||
|
print(f"获取积分失败:{points_result.get('message', '未知错误')}")
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
print(f"处理账号{index}时发生异常:{str(e)}")
|
||||||
|
|
||||||
|
async def get_user_info(self, headers, member_id):
|
||||||
|
try:
|
||||||
|
url = f"{self.baseUrl}/PersonalCenter/PersonalCenter/GetShopMemberDetail"
|
||||||
|
params = f"memberId={member_id}"
|
||||||
|
response = self.http.post(url, headers=headers, data=params)
|
||||||
|
return response.json()
|
||||||
|
except Exception as e:
|
||||||
|
print(f"获取用户信息时发生异常:{str(e)}")
|
||||||
|
return {"code": -1, "message": f"获取用户信息时发生异常:{str(e)}"}
|
||||||
|
|
||||||
|
async def sign(self, headers, member_id):
|
||||||
|
try:
|
||||||
|
url = f"{self.baseUrl}/PersonalCenter/PersonalCenter/ShopMemberSign"
|
||||||
|
params = f"memberId={member_id}"
|
||||||
|
response = self.http.post(url, headers=headers, data=params)
|
||||||
|
return response.json()
|
||||||
|
except Exception as e:
|
||||||
|
print(f"签到时发生异常:{str(e)}")
|
||||||
|
return {"code": -1, "message": f"签到时发生异常:{str(e)}"}
|
||||||
|
|
||||||
|
async def get_points(self, headers, member_id):
|
||||||
|
try:
|
||||||
|
url = f"{self.baseUrl}/PersonalCenter/PersonalCenter/GetShopMemberDetail"
|
||||||
|
params = f"memberId={member_id}"
|
||||||
|
response = self.http.post(url, headers=headers, data=params)
|
||||||
|
return response.json()
|
||||||
|
except Exception as e:
|
||||||
|
print(f"获取积分时发生异常:{str(e)}")
|
||||||
|
return {"code": -1, "message": f"获取积分时发生异常:{str(e)}"}
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
task = SYFSign()
|
||||||
|
asyncio.run(task.main())
|
||||||
Reference in New Issue
Block a user