前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >自动签到程序 - 雨云签到

自动签到程序 - 雨云签到

原创
作者头像
用户9426688
发布2023-07-07 00:30:46
6840
发布2023-07-07 00:30:46
举报
文章被收录于专栏:都是好东西

雨云签到

Github地址:雨云签到

  • 这是一个用于在雨云进行自动签到的Python脚本。
  • 请注意 这只是一个demo,仅供学习参考,不保证能够长期使用。

功能说明

  • 支持多账号登录和签到
  • 程序将在每天的早上八点签到一次
  • 通过电子邮件发送签到结果的通知

使用说明

  1. 安装依赖库:在运行代码之前,请确保已安装以下依赖库:
  2. requests
  3. email
  4. apscheduler
  5. python-dotenv
代码语言:txt
复制
   pip install requests email apscheduler python-dotenv

如果你使用python3,你可能需要使用pip3来安装依赖库。

代码语言:shell
复制
   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: 发件人邮箱
  • 运行代码:使用以下命令运行代码:
代码语言:txt
复制
   python app.py

如果你使用python3,你可能需要使用python3来运行代码。

代码语言:txt
复制
   python3 app.py
  1. 定时任务:代码中已包含定时任务的设置,可以根据需要进行调整。
代码语言:python
代码运行次数:0
复制
import os
import requests
import json
import smtplib
from email.mime.text import MIMEText
from apscheduler.schedulers.blocking import BlockingScheduler
from dotenv import load_dotenv

# 加载环境变量
load_dotenv()
# 获取用户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:
        print(f"用户ID: {user_id} -备注:{remark} - 登录失败,错误信息: {result['message']}")
        send_email(os.getenv("NOTIFICATION_EMAILS").split(",")[user_ids.index(user_id)], f"用户ID: {user_id}", f"备注:{remark}", result)
        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:
        print(f"备注: {remark} - 用户id:{user_id} - 签到失败,错误信息: {result['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:
        print(f"发送邮件通知时出错: {str(e)} - 用户ID: {user_id} - 邮件地址: {notification_email}")
    finally:
        if 'smtp' in locals():
            smtp.quit()


# 遍历所有账号登录并签到
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")

# 启动立即执行一次
sign_in_all()

# 定时任务
scheduler = BlockingScheduler()
scheduler.add_job(sign_in_all, 'cron', hour=8, minute=0)  # 每天的8:00 AM触发签到任务
scheduler.start()

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 雨云签到
    • 功能说明
      • 使用说明
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档