Continue seeded Qinglong script collection
This commit is contained in:
181
脚本库/web版/账密/102-雨云/2023-09-20_yu_0548064a.py
Normal file
181
脚本库/web版/账密/102-雨云/2023-09-20_yu_0548064a.py
Normal file
@@ -0,0 +1,181 @@
|
||||
# Source: https://github.com/xfmeng970526/ql/blob/main/yu.py
|
||||
# Raw: https://raw.githubusercontent.com/xfmeng970526/ql/main/yu.py
|
||||
# Repo: xfmeng970526/ql
|
||||
# Path: yu.py
|
||||
# UploadedAt: 2023-09-20T12:13:28+08:00
|
||||
# SHA256: 0548064af1ce7ef8d6d449edb5bb0555d2911a7ea795da689b70f7b325282fdc
|
||||
# Category: web版/账密
|
||||
# Evidence: web/H5关键词 + username/password/login
|
||||
|
||||
# -*- coding: utf-8 -*-
|
||||
# @Time: 2023年04月06日14时26分
|
||||
import requests
|
||||
from datetime import datetime, timedelta, timezone
|
||||
from pathlib import Path
|
||||
import logging
|
||||
import json
|
||||
cron: 3 9,14 * * *
|
||||
new Env('102-雨云');
|
||||
项目名称:雨云
|
||||
''''脚本使用说明:
|
||||
后缀名改成py
|
||||
|
||||
白嫖的项目:签到白嫖游戏服务器或者稳定的虚拟主机,攒着提现也可以(2018年以来一直稳定运行的,自己可以查一查资料)
|
||||
|
||||
第一步:上传本脚本到青龙(本脚本是py不是js 别搞错了)
|
||||
第二步:去 https://www.rainyun.cc/?ref=MzUxMzA= 注册一个账号(不提现只抢游戏云和主机的话不用实名)
|
||||
想提现的话6万积分起提现...绑定支付宝提现(稳到,亲测过,也有官方用户群)。
|
||||
第三步:本脚本里第121行122行里设置一下自己注册的账号和密码!!!
|
||||
本脚本里第121行122行里设置一下自己注册的账号和密码!!!
|
||||
本脚本里第121行122行里设置一下自己注册的账号和密码!!!
|
||||
第四步:时间规则:0 0 23 * * ? #每天 23 点执行一次 (可以按自己的需求,每天执行一次)
|
||||
|
||||
积分规则及说明:本脚本是每天实现自动签到(每天300个积分),入门级游戏云或者虚拟主机2000积分一周。
|
||||
这样下来一直用积分续费,想提现的话6万积分起提现...绑定支付宝提现(稳到)。
|
||||
|
||||
|
||||
注册地址:
|
||||
https://www.rainyun.cc/?ref=rain
|
||||
|
||||
https://www.rainyun.cc/?ref=rain
|
||||
|
||||
|
||||
提现规则:6万积分起提现(稳到,不过建议用来续费游戏云比较划算)
|
||||
|
||||
新人完成积分任务以后大概会有7000积分(积分商城每天20点刷新,自己抢一下一个主机或者游戏云)。
|
||||
而2000积分就可以领取一个免费的MC服务器或者主机,而且可以用积分进行续费!续费也只需要2000积分!
|
||||
前期积分任务做完加上每日签到,足够免费续费一个月了!后面一直用积分续费。
|
||||
|
||||
|
||||
注册地址:
|
||||
https://www.rainyun.cc/?ref=rain
|
||||
|
||||
'''
|
||||
# 忽略 不验证ssl的提示
|
||||
import warnings
|
||||
warnings.filterwarnings('ignore')
|
||||
|
||||
class RainYun():
|
||||
|
||||
def __init__(self, user: str, pwd: str) -> None:
|
||||
# 认证信息
|
||||
self.user = user.lower()
|
||||
self.pwd = pwd
|
||||
self.json_data = json.dumps({
|
||||
"field": self.user,
|
||||
"password": self.pwd,
|
||||
})
|
||||
# 日志输出
|
||||
self.logger = logging.getLogger(self.user)
|
||||
formatter = logging.Formatter(datefmt='%Y/%m/%d %H:%M:%S',
|
||||
fmt="%(asctime)s 雨云 %(levelname)s: 用户<%(name)s> %(message)s")
|
||||
handler = logging.StreamHandler()
|
||||
handler.setFormatter(formatter)
|
||||
self.logger.addHandler(handler)
|
||||
self.logger.setLevel(logging.INFO)
|
||||
# 签到结果初始化
|
||||
self.signin_result = False
|
||||
# 请求设置
|
||||
self.session = requests.Session()
|
||||
self.session.headers.update({
|
||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36",
|
||||
"Origin": "https://api.rainyun.com",
|
||||
"Referer": "https://api.rainyun.com"
|
||||
})
|
||||
self.login_url = "https://api.v2.rainyun.com/user/login"
|
||||
self.signin_url = "https://api.v2.rainyun.com/user/reward/tasks"
|
||||
self.logout_url = "https://api.v2.rainyun.com/user/logout"
|
||||
self.query_url = "https://api.v2.rainyun.com/user/"
|
||||
# 忽略 .cc ssl错误
|
||||
self.session.verify = False
|
||||
|
||||
def login(self) -> None:
|
||||
"""登录"""
|
||||
res = self.session.post(
|
||||
url=self.login_url, headers={"Content-Type": "application/json"}, data=self.json_data)
|
||||
if res.text.find("200") > -1:
|
||||
self.logger.info("登录成功")
|
||||
self.session.headers.update({
|
||||
"X-CSRF-Token": res.cookies.get("X-CSRF-Token", "")
|
||||
})
|
||||
else:
|
||||
self.logger.error(f"登录失败,响应信息:{res.text}")
|
||||
|
||||
def signin(self) -> None:
|
||||
"""签到"""
|
||||
res = self.session.post(url=self.signin_url, headers={"Content-Type": "application/json"}, data=json.dumps({
|
||||
"task_name": "每日签到",
|
||||
"verifyCode": ""
|
||||
}))
|
||||
self.signin_date = datetime.utcnow()
|
||||
if res.text.find("200") > -1:
|
||||
self.logger.info("成功签到并领取积分")
|
||||
self.signin_result = True
|
||||
else:
|
||||
self.logger.error(f"签到失败,响应信息:{res.text}")
|
||||
self.signin_result = False
|
||||
|
||||
def logout(self) -> None:
|
||||
res = self.session.post(url=self.logout_url)
|
||||
if res.text.find("200") > -1:
|
||||
self.logger.info('已退出登录')
|
||||
else:
|
||||
self.logger.warning(f"退出登录时出了些问题,响应信息:{res.text}")
|
||||
|
||||
def query(self) -> None:
|
||||
res = self.session.get(url=self.query_url)
|
||||
self.points = None
|
||||
if res.text.find("200") > -1:
|
||||
data = res.json()["data"]
|
||||
self.points = data.get("Points", None) or data["points"]
|
||||
self.logger.info("积分查询成功为 " + repr(self.points))
|
||||
else:
|
||||
self.logger.error(f"积分信息失败,响应信息:{res.text}")
|
||||
|
||||
def log(self, log_file: str, max_num=5) -> None:
|
||||
"""存储本次签到结果的日志"""
|
||||
# 北京时间
|
||||
time_string = self.signin_date.replace(tzinfo=timezone.utc).astimezone(
|
||||
timezone(timedelta(hours=8))).strftime("%Y/%m/%d %H:%M:%S")
|
||||
file = Path(log_file)
|
||||
record = {
|
||||
"date": time_string,
|
||||
"result": self.signin_result,
|
||||
"points": self.points
|
||||
}
|
||||
previous_records = {}
|
||||
if file.is_file():
|
||||
try:
|
||||
with open(log_file, 'r') as f:
|
||||
previous_records = json.load(f)
|
||||
if not previous_records.get(self.user):
|
||||
previous_records[self.user] = []
|
||||
previous_records[self.user].insert(0, record)
|
||||
previous_records[self.user] = previous_records[self.user][:max_num]
|
||||
except Exception as e:
|
||||
self.logger.error("序列化日志时出错:"+repr(e))
|
||||
else:
|
||||
previous_records[self.user] = [record]
|
||||
with open(log_file, 'w', encoding='utf-8') as f:
|
||||
json.dump(previous_records, f, indent=4)
|
||||
self.logger.info('日志保存成功')
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
accounts = [
|
||||
{
|
||||
"user": "账户", # 账户
|
||||
"password": "密码" # 密码
|
||||
}
|
||||
]
|
||||
for acc in accounts:
|
||||
ry = RainYun(acc["user"], acc["password"]) # 实例
|
||||
ry.login() # 登录
|
||||
ry.signin() # 签到
|
||||
ry.query() # 查询积分
|
||||
ry.logout() # 登出
|
||||
# 保存日志则打开注释 推荐文件绝对路径
|
||||
# file = "./rainyun-signin-log.json"
|
||||
# 日志最大记录数量
|
||||
# max_num = 5
|
||||
# ry.log(file, max_num) # 保存日志
|
||||
Reference in New Issue
Block a user