# Create your views here. import logging import time from concurrent.futures.thread import ThreadPoolExecutor from apscheduler.schedulers.background import BackgroundScheduler from django_apscheduler.jobstores import DjangoJobStore from pt_site.UtilityTool import PtSpider, MessageTemplate from pt_site.models import MySite from ptools.base import StatusCodeEnum job_defaults = { 'coalesce': True, 'misfire_grace_time': None } executors = { 'default': ThreadPoolExecutor(2) } scheduler = BackgroundScheduler(timezone='Asia/Shanghai') scheduler.add_jobstore(DjangoJobStore(), 'default') pool = ThreadPoolExecutor(2) pt_spider = PtSpider() # Create your views here. try: def auto_sign_in(): """自动签到""" start = time.time() # 获取本人所有站点 queryset = MySite.objects.all() message_list = pt_spider.do_sign_in(pool, queryset) end = time.time() consuming = '> {} 任务运行成功!耗时:{}完成时间:{} \n'.format( '自动签到', end - start, time.strftime("%Y-%m-%d %H:%M:%S") ) pt_spider.send_text(message_list + consuming) print('{} 任务运行成功!完成时间:{}'.format('自动签到', time.strftime("%Y-%m-%d %H:%M:%S"))) def auto_get_status(): """ 更新个人数据 """ start = time.time() message_list = '' queryset = MySite.objects.all() site_list = [my_site for my_site in queryset if my_site.site.get_userinfo_support] results = pool.map(pt_spider.send_status_request, site_list) message_template = MessageTemplate.status_message_template for my_site, result in zip(site_list, results): if result.code == StatusCodeEnum.OK.code: res = pt_spider.parse_status_html(my_site, result.data) print('自动更新个人数据', my_site.site, res) if res.code == StatusCodeEnum.OK.code: status = res.data[0] message = message_template.format( my_site.my_level, status.my_sp, my_site.sp_hour, status.my_bonus, status.ratio, status.downloaded, status.uploaded, my_site.seed, my_site.leech, my_site.invitation, my_site.my_hr ) print('组装Message:', message) message_list += ('> ' + my_site.site.name + ' 信息更新成功!' + message + ' \n') # pt_spider.send_text(my_site.site.name + ' 信息更新成功!' + message) logging.info(my_site.site.name + '信息更新成功!' + message) else: print(res) message = '> ' + my_site.site.name + ' 信息更新失败!原因:' + res.msg + ' \n' message_list = message + message_list # pt_spider.send_text(my_site.site.name + ' 信息更新失败!原因:' + str(res[0])) logging.error(my_site.site.name + '信息更新失败!原因:' + res.msg) else: # pt_spider.send_text(my_site.site.name + ' 信息更新失败!原因:' + str(result[1])) message = '> ' + my_site.site.name + ' 信息更新失败!原因:' + result.msg + ' \n' message_list = message + message_list logging.error(my_site.site.name + '信息更新失败!原因:' + result.msg) end = time.time() consuming = '> {} 任务运行成功!耗时:{} 完成时间:{} \n'.format( '自动更新个人数据', end - start, time.strftime("%Y-%m-%d %H:%M:%S") ) pt_spider.send_text(text=message_list + consuming) def auto_update_torrents(): """ 拉取最新种子 """ start = time.time() message_list = '' queryset = MySite.objects.all() site_list = [my_site for my_site in queryset if my_site.site.get_torrent_support] results = pool.map(pt_spider.send_torrent_info_request, site_list) for my_site, result in zip(site_list, results): print('获取种子:', my_site.site, result) # print(result is tuple[int]) if result.code == StatusCodeEnum.OK.code: res = pt_spider.get_torrent_info_list(my_site, result.data) # 通知推送 if res.code == StatusCodeEnum.OK.code: message = '> {} 种子抓取成功!新增种子{}条,更新种子{}条! \n'.format(my_site.site.name, res.data[0], res.data[1]) message_list += message else: message = '> ' + my_site.site.name + '抓取种子信息失败!原因:' + res.msg + ' \n' message_list = message + message_list # 日志 logging.info( '{} 种子抓取成功!新增种子{}条,更新种子{}条! '.format(my_site.site.name, res.data[0], res.data[ 1]) if res.code == StatusCodeEnum.OK.code else my_site.site.name + '抓取种子信息失败!原因:' + res.msg) else: # pt_spider.send_text(my_site.site.name + ' 抓取种子信息失败!原因:' + result[0]) message = '> ' + my_site.site.name + ' 抓取种子信息失败!原因:' + result.msg + ' \n' message_list = message + message_list logging.error(my_site.site.name + '抓取种子信息失败!原因:' + result.msg) end = time.time() consuming = '> {} 任务运行成功!耗时:{} 当前时间:{} \n'.format( '拉取最新种子', end - start, time.strftime("%Y-%m-%d %H:%M:%S")) pt_spider.send_text(message_list + consuming) def auto_remove_expire_torrents(): """ 删除过期种子 """ start = time.time() end = time.time() pt_spider.send_text( '> {} 任务运行成功!耗时:{}{} \n'.format('签到', end - start, time.strftime("%Y-%m-%d %H:%M:%S"))) def auto_push_to_downloader(): """推送到下载器""" start = time.time() print('推送到下载器') end = time.time() pt_spider.send_text( '> {} 任务运行成功!耗时:{}{} \n'.format('签到', end - start, time.strftime("%Y-%m-%d %H:%M:%S"))) def auto_get_torrent_hash(): """自动获取种子HASH""" start = time.time() print('自动获取种子HASH') time.sleep(5) end = time.time() pt_spider.send_text( '> {} 任务运行成功!耗时:{}{} \n'.format('获取种子HASH', end - start, time.strftime("%Y-%m-%d %H:%M:%S"))) scheduler.start() except Exception as e: print(e) # 有错误就停止定时器 scheduler.shutdown()