mirror of
https://github.com/3288588344/toulu.git
synced 2025-12-16 15:00:14 +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