Aliyunsign/main.py

109 lines
3.5 KiB
Python

import requests
import json
import schedule
import datetime
import time
from loguru import logger
from MsgSender import MessageSender, DingDingSender, TelegramSender, MailSender
def aliyundrive_sign(token):
update_token_url = 'https://auth.aliyundrive.com/v2/account/token'
headers = {
'Content-Type': 'application/json'
}
data = {
'grant_type': 'refresh_token',
'refresh_token': token
}
req = requests.Session()
try:
resp = req.post(update_token_url, json=data, headers=headers)
result = json.loads(resp.text)
access_token = result['access_token']
user_name = result['user_name']
except Exception as e:
log_and_send('', '获取access token请求失败, 错误%s' % e)
return
signin_url = 'https://member.aliyundrive.com/v1/activity/sign_in_list'
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + access_token
}
params = {'_rx-s': 'mobile'}
try:
resp = req.post(signin_url, headers=headers, params=params, json={'isReward': False})
result = json.loads(resp.text)
except Exception as e:
log_and_send(user_name, '签到请求失败, 错误%s' % e)
return
if result.get('code') == 'AccessTokenInvalid':
log_and_send(user_name, 'access token 无效')
return
if not result.get('success'):
log_and_send(user_name, '阿里云盘签到失败, 错误信息:\n %s' % result)
return
try:
signin_count = result['result']['signInCount']
reward_url = 'https://member.aliyundrive.com/v1/activity/sign_in_reward'
resp = req.post(reward_url, params=params, headers=headers, json={'signInDay': signin_count})
result = json.loads(resp.text)
except Exception as e:
log_and_send(user_name, '阿里云盘签到成功, 领奖请求失败, 错误%s' % e)
return
if not result.get('success'):
log_and_send(user_name, '阿里云盘签到成功, 领奖失败, 错误信息:\n %s' % result)
return
log_and_send(user_name, '阿里云盘签到成功,奖品: %s' % result['result']['name'], False)
def log_and_send(user_name, msg, is_error=True):
msg = '用户%s: %s' % (user_name, msg) if user_name else msg
logger.error(msg) if is_error else logger.info(msg)
sender.send(msg)
def init_sender():
msg_sender = MessageSender()
dingding = "dingding"
msg_sender.register_channel(dingding, DingDingSender(config[dingding]))
telegram = "telegram"
msg_sender.register_channel(telegram, TelegramSender(config[telegram]))
mail = "mail"
msg_sender.register_channel(mail, MailSender(config[mail]))
return msg_sender
if __name__ == '__main__':
with open('config.json', 'r', encoding='utf-8') as f:
config = json.load(f)
env_time = config['env_time']
refresh_token_list = config['refresh_token_list'].split(',')
sender = init_sender()
start_time = datetime.datetime.now().replace(hour=env_time, minute=0, second=0, microsecond=0)
for refresh_token in refresh_token_list:
schedule_time = start_time.strftime('%H:%M')
start_time += datetime.timedelta(seconds=60)
logger.info("refresh_token: %s, schedule_time: %s" % (refresh_token, schedule_time))
schedule.every().day.at(schedule_time).do(aliyundrive_sign, refresh_token)
logger.info("应用启动成功")
sender.send("阿里云盘自动签到应用启动成功")
while True:
schedule.run_pending()
time.sleep(1)