雨云签到
注册雨云账号 点击这里 领取五元无门槛优惠券 免费已备案域名。低价服务器,主机。
Github地址:雨云签到
- 这是一个用于在雨云进行自动签到的Python脚本。
- 请注意,这只是一个demo,仅供学习参考,不保证能够长期使用。
功能说明
- 支持多账号登录和签到
- 程序将在每天的早上八点签到一次
- 通过电子邮件发送签到结果的通知
使用说明
- 安装依赖库:在运行代码之前,请确保已安装以下依赖库:
- requests
- apscheduler
- python-dotenv
pip install requests email apscheduler python-dotenv
如果你使用的是Python 3,你可能需要使用pip3来安装依赖库。
pip3 install requests email apscheduler python-dotenv
如果您使用的是虚拟环境,请确保已经激活了虚拟环境再执行上述命令。
设置环境变量:在app.py同级目录新建.env文件
在运行代码之前,请确保已设置以下环境变量:USER_ID: 用户ID,用逗号分隔
USER_PASSWORD: 用户密码,用逗号分隔,顺序与用户ID对应
API_KEYS: API Key,用逗号分隔,顺序与用户ID对应
API_KEY_REMARKS: API Key的备注,用逗号分隔,顺序与API Key对应
NOTIFICATION_EMAILS: API Key的通知邮箱,用逗号分隔,顺序与API Key对应
TASK_NAME: 签到任务名称
SMTP_SERVER: SMTP服务器地址
SMTP_PORT: SMTP服务器端口号
SMTP_USERNAME: 邮箱用户名
SMTP_PASSWORD: 邮箱密码
SENDER_EMAIL: 发件人邮箱
运行代码:使用以下命令运行代码:
python app.py
如果你使用的是Python 3,你可能需要使用python3来运行代码。
python3 app.py
定时任务:代码中已包含定时任务的设置,可以根据需要进行调整。
import os
import requests
import json
import smtplib
import logging
from email.mime.text import MIMEText
from apscheduler.schedulers.blocking import BlockingScheduler
from dotenv import load_dotenv
# 加载环境变量
load_dotenv()
# 配置日志记录
logging.basicConfig(filename='app.log', level=logging.WARN, format='%(asctime)s - %(levelname)s - %(message)s', encoding='utf-8')
# 获取用户ID、密码和API Key的列表
user_ids = os.getenv("USER_ID").split(",")
user_passwords = os.getenv("USER_PASSWORD").split(",")
api_keys = os.getenv("API_KEYS").split(",")
api_key_remarks = os.getenv("API_KEY_REMARKS").split(",")
# 设置API请求的URL
url = "https://api.v2.rainyun.com"
# 设置SMTP服务器和邮箱相关信息
smtp_server = os.getenv("SMTP_SERVER")
smtp_port = int(os.getenv("SMTP_PORT"))
smtp_username = os.getenv("SMTP_USERNAME")
smtp_password = os.getenv("SMTP_PASSWORD")
sender_email = os.getenv("SENDER_EMAIL")
# 设置Headers
headers = {
'User-Agent': 'Apifox/1.0.0 (https://apifox.com)',
'Content-Type': 'application/json'
}
# 创建邮件内容
def create_email_content(remark, result):
subject = f"雨云签到结果 - {remark}"
content = f"签到结果: {result}"
email_content = MIMEText(content, 'plain')
email_content['Subject'] = subject
email_content['From'] = sender_email
return email_content
# 执行登录操作
def perform_login(user_id, user_password, remark):
payload = {
"field": user_id,
"password": user_password
}
response = requests.post(f"{url}/user/login", headers=headers, json=payload)
result = response.json()
if response.status_code == 200:
return result["x-api-key"]
else:
error_message = result['message']
logging.error(f"用户ID: {user_id} - 备注:{remark} - 登录失败,错误信息: {error_message}")
send_email(os.getenv("NOTIFICATION_EMAILS").split(",")[user_ids.index(user_id)], f"用户ID: {user_id}", f"备注:{remark}", error_message)
return None
# 执行签到任务
def perform_sign_in(api_key, remark, notification_email, user_id):
headers['x-api-key'] = api_key
task_name = os.getenv("TASK_NAME")
payload = {
"task_name": task_name
}
response = requests.post(f"{url}/user/reward/tasks", headers=headers, json=payload)
result = response.json()
if response.status_code == 200:
print(f"备注: {remark} - 用户id:{user_id} - 签到成功")
send_email(notification_email, remark, result, user_id)
else:
error_message = result['message']
logging.error(f"备注: {remark} - 用户id:{user_id} - 签到失败,错误信息: {error_message}")
send_email(notification_email, remark, result, user_id)
# 发送邮件通知
def send_email(notification_email, remark, result, user_id):
try:
smtp = smtplib.SMTP_SSL(smtp_server, smtp_port)
smtp.login(smtp_username, smtp_password)
email_content = create_email_content(remark, result)
smtp.sendmail(sender_email, notification_email, email_content.as_string())
print(f"邮件通知已发送 - 用户ID: {user_id} - 邮件地址: {notification_email}")
except Exception as e:
error_message = str(e)
logging.error(f"发送邮件通知时出错: {error_message} - 用户ID: {user_id} - 邮件地址: {notification_email}")
finally:
if 'smtp' in locals():
try:
smtp.quit()
except Exception as e:
error_message = str(e)
logging.error(f"关闭SMTP连接时出错: {error_message}")
# 遍历所有账号登录并签到
def sign_in_all():
for index, (user_id, user_password) in enumerate(zip(user_ids, user_passwords)):
if user_id in user_ids and api_keys[user_ids.index(user_id)]:
remark = api_key_remarks[user_ids.index(user_id)]
notification_email = os.getenv("NOTIFICATION_EMAILS").split(",")[index] if index < len(os.getenv("NOTIFICATION_EMAILS").split(",")) else None
api_key = api_keys[user_ids.index(user_id)]
if api_key:
perform_sign_in(api_key, remark, notification_email, user_id)
else:
print(f"用户ID: {user_id} - 未设置API Key")
# 启动立即执行一次
try:
sign_in_all()
except Exception as e:
error_message = str(e)
logging.error(f"执行签到时出错: {error_message}")
# 定时任务
scheduler = BlockingScheduler()
try:
scheduler.add_job(sign_in_all, 'cron', hour=8, minute=0) # 每天的8:00 AM触发签到任务
scheduler.start()
except Exception as e:
error_message = str(e)
logging.error(f"启动定时任务时出错: {error_message}")
参与讨论