109 lines
3.5 KiB
Python
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)
|