add 下载历史记录

This commit is contained in:
jxxghp
2023-06-16 13:22:44 +08:00
parent 0ce6e652a0
commit 8948cb09a0
21 changed files with 233 additions and 190 deletions

View File

@ -5,11 +5,12 @@ from typing import List, Optional, Tuple, Set, Dict, Union
from app.chain import ChainBase from app.chain import ChainBase
from app.core.context import MediaInfo, TorrentInfo, Context from app.core.context import MediaInfo, TorrentInfo, Context
from app.core.meta import MetaBase from app.core.meta import MetaBase
from app.db.downloadhistory_oper import DownloadHistoryOper
from app.helper.torrent import TorrentHelper from app.helper.torrent import TorrentHelper
from app.log import logger from app.log import logger
from app.schemas.context import ExistMediaInfo, NotExistMediaInfo from app.schemas.context import ExistMediaInfo, NotExistMediaInfo
from app.utils.string import StringUtils
from app.schemas.types import MediaType, TorrentStatus, EventType from app.schemas.types import MediaType, TorrentStatus, EventType
from app.utils.string import StringUtils
class DownloadChain(ChainBase): class DownloadChain(ChainBase):
@ -17,6 +18,7 @@ class DownloadChain(ChainBase):
def __init__(self): def __init__(self):
super().__init__() super().__init__()
self.torrent = TorrentHelper() self.torrent = TorrentHelper()
self.downloadhis = DownloadHistoryOper()
def process(self, *args, **kwargs) -> Optional[Context]: def process(self, *args, **kwargs) -> Optional[Context]:
pass pass
@ -55,71 +57,76 @@ class DownloadChain(ChainBase):
image=mediainfo.get_message_image(), image=mediainfo.get_message_image(),
userid=userid) userid=userid)
def batch_download(self, def download_torrent(self, torrent: TorrentInfo,
contexts: List[Context], userid: Union[str, int] = None) -> Tuple[Optional[Path], str, list]:
no_exists: Dict[int, Dict[int, NotExistMediaInfo]] = None,
userid: str = None) -> Tuple[List[Context], dict]:
"""
根据缺失数据,自动种子列表中组合择优下载
:param contexts: 资源上下文列表
:param no_exists: 缺失的剧集信息
:param userid: 用户ID
:return: 已经下载的资源列表、剩余未下载到的剧集 no_exists[tmdb_id] = {season: NotExistMediaInfo}
"""
# 已下载的项目
downloaded_list: List[Context] = []
def __download_torrent(_torrent: TorrentInfo) -> Tuple[Optional[Path], list]:
""" """
下载种子文件 下载种子文件
:return: 种子路径,种子文件清单 :return: 种子路径,种子目录名,种子文件清单
""" """
torrent_file, _, _, files, error_msg = self.torrent.download_torrent( torrent_file, _, download_folder, files, error_msg = self.torrent.download_torrent(
url=_torrent.enclosure, url=torrent.enclosure,
cookie=_torrent.site_cookie, cookie=torrent.site_cookie,
ua=_torrent.site_ua, ua=torrent.site_ua,
proxy=_torrent.site_proxy) proxy=torrent.site_proxy)
if not torrent_file: if not torrent_file:
logger.error(f"下载种子文件失败:{_torrent.title} - {_torrent.enclosure}") logger.error(f"下载种子文件失败:{torrent.title} - {torrent.enclosure}")
self.post_message(title=f"{_torrent.title} 种子下载失败!", self.post_message(title=f"{torrent.title} 种子下载失败!",
text=f"错误信息:{error_msg}\n种子链接:{_torrent.enclosure}", text=f"错误信息:{error_msg}\n种子链接:{torrent.enclosure}",
userid=userid) userid=userid)
return None, [] return None, "", []
return torrent_file, files return torrent_file, download_folder, files
def __download(_context: Context, _torrent_file: Path = None, _episodes: Set[int] = None) -> Optional[str]: def download_single(self, context: Context, torrent_file: Path = None,
episodes: Set[int] = None, userid: Union[str, int] = None) -> Optional[str]:
""" """
下载及发送通知 下载及发送通知
""" """
_torrent = _context.torrent_info _torrent = context.torrent_info
_media = _context.media_info _media = context.media_info
_meta = _context.meta_info _meta = context.meta_info
if not _torrent_file: _folder_name = ""
if not torrent_file:
# 下载种子文件 # 下载种子文件
_torrent_file, _ = __download_torrent(_torrent) _torrent_file, _folder_name, _ = self.download_torrent(_torrent, userid=userid)
if not _torrent_file: if not _torrent_file:
return return
# 添加下载 # 添加下载
result: Optional[tuple] = self.download(torrent_path=_torrent_file, result: Optional[tuple] = self.download(torrent_path=torrent_file,
cookie=_torrent.site_cookie, cookie=_torrent.site_cookie,
episodes=_episodes) episodes=episodes)
if result: if result:
_hash, error_msg = result _hash, error_msg = result
else: else:
_hash, error_msg = None, "未知错误" _hash, error_msg = None, "未知错误"
if _hash: if _hash:
# 下载成功 # 登记下载记录
downloaded_list.append(_context) self.downloadhis.add(
path=_folder_name,
type=_media.type.value,
title=_media.title,
year=_media.year,
tmdbid=_media.tmdb_id,
imdbid=_media.imdb_id,
tvdbid=_media.tvdb_id,
doubanid=_media.douban_id,
seasons=_meta.season,
episodes=_meta.episode,
image=_media.poster_path,
download_hash=_hash,
torrent_name=_torrent.title,
torrent_description=_torrent.description,
torrent_site=_torrent.site_name
)
# 发送消息 # 发送消息
self.post_download_message(meta=_meta, mediainfo=_media, torrent=_torrent, userid=userid) self.post_download_message(meta=_meta, mediainfo=_media, torrent=_torrent, userid=userid)
# 下载成功后处理 # 下载成功后处理
self.download_added(context=_context, torrent_path=_torrent_file) self.download_added(context=context, torrent_path=torrent_file)
# 广播事件 # 广播事件
self.eventmanager.send_event(EventType.DownloadAdded, { self.eventmanager.send_event(EventType.DownloadAdded, {
"hash": _hash, "hash": _hash,
"torrent_file": _torrent_file, "torrent_file": torrent_file,
"context": _context "context": context
}) })
else: else:
# 下载失败 # 下载失败
@ -136,6 +143,20 @@ class DownloadChain(ChainBase):
userid=userid) userid=userid)
return _hash return _hash
def batch_download(self,
contexts: List[Context],
no_exists: Dict[int, Dict[int, NotExistMediaInfo]] = None,
userid: str = None) -> Tuple[List[Context], dict]:
"""
根据缺失数据,自动种子列表中组合择优下载
:param contexts: 资源上下文列表
:param no_exists: 缺失的剧集信息
:param userid: 用户ID
:return: 已经下载的资源列表、剩余未下载到的剧集 no_exists[tmdb_id] = {season: NotExistMediaInfo}
"""
# 已下载的项目
downloaded_list: List[Context] = []
def __update_seasons(_tmdbid: int, _need: list, _current: list) -> list: def __update_seasons(_tmdbid: int, _need: list, _current: list) -> list:
""" """
更新need_tvs季数返回剩余季数 更新need_tvs季数返回剩余季数
@ -194,7 +215,9 @@ class DownloadChain(ChainBase):
# 如果是电影,直接下载 # 如果是电影,直接下载
for context in contexts: for context in contexts:
if context.media_info.type == MediaType.MOVIE: if context.media_info.type == MediaType.MOVIE:
__download(context) if self.download_single(context, userid=userid):
# 下载成功
downloaded_list.append(context)
# 电视剧整季匹配 # 电视剧整季匹配
if no_exists: if no_exists:
@ -233,7 +256,7 @@ class DownloadChain(ChainBase):
if set(torrent_season).issubset(set(need_season)): if set(torrent_season).issubset(set(need_season)):
if len(torrent_season) == 1: if len(torrent_season) == 1:
# 只有一季的可能是命名错误,需要打开种子鉴别,只有实际集数大于等于总集数才下载 # 只有一季的可能是命名错误,需要打开种子鉴别,只有实际集数大于等于总集数才下载
torrent_path, torrent_files = __download_torrent(torrent) torrent_path, _, torrent_files = self.download_torrent(torrent)
if not torrent_path: if not torrent_path:
continue continue
torrent_episodes = self.torrent.get_torrent_episodes(torrent_files) torrent_episodes = self.torrent.get_torrent_episodes(torrent_files)
@ -241,16 +264,20 @@ class DownloadChain(ChainBase):
or len(torrent_episodes) >= __get_season_episodes(need_tmdbid, or len(torrent_episodes) >= __get_season_episodes(need_tmdbid,
torrent_season[0]): torrent_season[0]):
# 下载 # 下载
download_id = __download(_context=context, _torrent_file=torrent_path) download_id = self.download_single(context=context,
torrent_file=torrent_path,
userid=userid)
else: else:
logger.info( logger.info(
f"{meta.org_string} 解析文件集数为 {len(torrent_episodes)},未含所需集数") f"{meta.org_string} 解析文件集数为 {len(torrent_episodes)},未含所需集数")
continue continue
else: else:
# 下载 # 下载
download_id = __download(context) download_id = self.download_single(context, userid=userid)
if download_id: if download_id:
# 下载成功
downloaded_list.append(context)
# 更新仍需季集 # 更新仍需季集
need_season = __update_seasons(_tmdbid=need_tmdbid, need_season = __update_seasons(_tmdbid=need_tmdbid,
_need=need_season, _need=need_season,
@ -304,8 +331,10 @@ class DownloadChain(ChainBase):
# 为需要集的子集则下载 # 为需要集的子集则下载
if set(torrent_episodes).issubset(set(need_episodes)): if set(torrent_episodes).issubset(set(need_episodes)):
# 下载 # 下载
download_id = __download(context) download_id = self.download_single(context, userid=userid)
if download_id: if download_id:
# 下载成功
downloaded_list.append(context)
# 更新仍需集数 # 更新仍需集数
need_episodes = __update_episodes(_tmdbid=need_tmdbid, need_episodes = __update_episodes(_tmdbid=need_tmdbid,
_need=need_episodes, _need=need_episodes,
@ -358,7 +387,7 @@ class DownloadChain(ChainBase):
and len(meta.season_list) == 1 \ and len(meta.season_list) == 1 \
and meta.season_list[0] == need_season: and meta.season_list[0] == need_season:
# 检查种子看是否有需要的集 # 检查种子看是否有需要的集
torrent_path, torrent_files = __download_torrent(torrent) torrent_path, _, torrent_files = self.download_torrent(torrent, userid=userid)
if not torrent_path: if not torrent_path:
continue continue
# 种子全部集 # 种子全部集
@ -369,11 +398,14 @@ class DownloadChain(ChainBase):
logger.info(f"{meta.org_string} 没有需要的集,跳过...") logger.info(f"{meta.org_string} 没有需要的集,跳过...")
continue continue
# 添加下载 # 添加下载
download_id = __download(_context=context, download_id = self.download_single(context=context,
_torrent_file=torrent_path, torrent_file=torrent_path,
_episodes=selected_episodes) episodes=selected_episodes,
userid=userid)
if not download_id: if not download_id:
continue continue
# 下载成功
downloaded_list.append(context)
# 更新仍需集数 # 更新仍需集数
need_episodes = __update_episodes(_tmdbid=need_tmdbid, need_episodes = __update_episodes(_tmdbid=need_tmdbid,
_need=need_episodes, _need=need_episodes,

View File

@ -3,9 +3,9 @@ from typing import Any
from app.chain.download import * from app.chain.download import *
from app.chain.search import SearchChain from app.chain.search import SearchChain
from app.chain.subscribe import SubscribeChain from app.chain.subscribe import SubscribeChain
from app.core.context import MediaInfo, TorrentInfo from app.core.context import MediaInfo
from app.core.metainfo import MetaInfo
from app.core.event import EventManager from app.core.event import EventManager
from app.core.metainfo import MetaInfo
from app.log import logger from app.log import logger
from app.schemas.types import EventType from app.schemas.types import EventType
@ -168,46 +168,8 @@ class UserMessageChain(ChainBase):
else: else:
# 下载种子 # 下载种子
context: Context = cache_list[int(text) - 1] context: Context = cache_list[int(text) - 1]
torrent: TorrentInfo = context.torrent_info # 下载
logger.info(f"开始下载种子:{torrent.title} - {torrent.enclosure}") self.downloadchain.download_single(context, userid=userid)
# 识别前预处理
result: Optional[tuple] = self.prepare_recognize(title=torrent.title,
subtitle=torrent.description)
if result:
title, subtitle = result
else:
title, subtitle = torrent.title, torrent.description
# 识别
meta = MetaInfo(title=title, subtitle=subtitle)
torrent_file, _, _, _, error_msg = self.torrent.download_torrent(
url=torrent.enclosure,
cookie=torrent.site_cookie,
ua=torrent.site_ua,
proxy=torrent.site_proxy)
if not torrent_file:
logger.error(f"下载种子文件失败:{torrent.title} - {torrent.enclosure}")
self.post_message(title=f"{torrent.title} 种子下载失败!",
text=f"错误信息:{error_msg}\n种子链接:{torrent.enclosure}",
userid=userid)
return
# 添加下载
result: Optional[tuple] = self.download(torrent_path=torrent_file,
cookie=torrent.site_cookie)
if result:
state, msg = result
else:
state, msg = False, "未知错误"
# 发送消息
if not state:
# 下载失败
self.post_message(title=f"{torrent.title} 添加下载失败!",
text=f"错误信息:{msg}",
userid=userid)
return
# 下载成功,发送通知
self.downloadchain.post_download_message(meta=meta, mediainfo=self._current_media, torrent=torrent)
# 下载成功后处理
self.download_added(context=context, torrent_path=torrent_file)
elif text.lower() == "p": elif text.lower() == "p":
# 上一页 # 上一页

View File

@ -0,0 +1,32 @@
from pathlib import Path
from typing import Any
from app.db import DbOper
from app.db.models.downloadhistory import DownloadHistory
class DownloadHistoryOper(DbOper):
"""
插件数据管理
"""
def get_by_path(self, path: Path) -> Any:
"""
按路径查询下载记录
:param path: 数据key
"""
return DownloadHistory.get_by_path(self._db, path)
def get_by_hash(self, download_hash: str) -> Any:
"""
按Hash查询下载记录
:param download_hash: 数据key
"""
return DownloadHistory.get_by_hash(self._db, download_hash)
def add(self, **kwargs):
"""
新增下载历史
"""
downloadhistory = DownloadHistory(**kwargs)
return downloadhistory.create(self._db)

View File

@ -0,0 +1,31 @@
from sqlalchemy import Column, Integer, String, Sequence
from sqlalchemy.orm import Session
from app.db.models import Base
class DownloadHistory(Base):
"""
下载历史记录
"""
id = Column(Integer, Sequence('id'), primary_key=True, index=True)
path = Column(String, nullable=False, index=True)
type = Column(String, nullable=False)
title = Column(String, nullable=False)
year = Column(String)
tmdbid = Column(Integer, index=True)
imdbid = Column(String)
tvdbid = Column(Integer)
doubanid = Column(String)
seasons = Column(Integer)
episodes = Column(String)
image = Column(String)
download_hash = Column(String, index=True)
torrent_name = Column(String)
torrent_description = Column(String)
torrent_site = Column(String)
note = Column(String)
@staticmethod
def get_by_hash(db: Session, download_hash: str):
return db.query(DownloadHistory).filter(DownloadHistory.download_hash == download_hash).first()

View File

@ -468,7 +468,7 @@ class FileTransferModule(_ModuleBase):
# 集号 # 集号
"episode": meta.episode_seqs, "episode": meta.episode_seqs,
# 季集 SxxExx # 季集 SxxExx
"season_episode": "%s%s" % (meta.season, meta.episode), "season_episode": "%s%s" % (meta.season, meta.episodes),
# 段/节 # 段/节
"part": meta.part, "part": meta.part,
# 文件后缀 # 文件后缀

View File

@ -303,8 +303,8 @@ class TheMovieDbModule(_ModuleBase):
uniqueid_tmdb.setAttribute("default", "true") uniqueid_tmdb.setAttribute("default", "true")
# TVDB # TVDB
if mediainfo.tvdb_id: if mediainfo.tvdb_id:
DomUtils.add_node(doc, root, "tvdbid", mediainfo.tvdb_id) DomUtils.add_node(doc, root, "tvdbid", str(mediainfo.tvdb_id))
uniqueid_tvdb = DomUtils.add_node(doc, root, "uniqueid", mediainfo.tvdb_id) uniqueid_tvdb = DomUtils.add_node(doc, root, "uniqueid", str(mediainfo.tvdb_id))
uniqueid_tvdb.setAttribute("type", "tvdb") uniqueid_tvdb.setAttribute("type", "tvdb")
# IMDB # IMDB
if mediainfo.imdb_id: if mediainfo.imdb_id:

View File

@ -45,14 +45,13 @@ class Pt52(_ISiteSigninHandler):
site_cookie = site_info.get("cookie") site_cookie = site_info.get("cookie")
ua = site_info.get("ua") ua = site_info.get("ua")
render = site_info.get("render") render = site_info.get("render")
proxies = settings.PROXY if site_info.get("proxy") else None proxy = site_info.get("proxy")
proxy_server = settings.PROXY_SERVER if site_info.get("proxy") else None
# 判断今日是否已签到 # 判断今日是否已签到
html_text = self.get_page_source(url='https://52pt.site/bakatest.php', html_text = self.get_page_source(url='https://52pt.site/bakatest.php',
cookie=site_cookie, cookie=site_cookie,
ua=ua, ua=ua,
proxies=proxy_server, proxy=proxy,
render=render) render=render)
if not html_text: if not html_text:
@ -97,7 +96,7 @@ class Pt52(_ISiteSigninHandler):
choice=choice, choice=choice,
site_cookie=site_cookie, site_cookie=site_cookie,
ua=ua, ua=ua,
proxies=proxies, proxy=proxy,
site=site) site=site)
def __signin(self, questionid: str, def __signin(self, questionid: str,
@ -105,7 +104,7 @@ class Pt52(_ISiteSigninHandler):
site: str, site: str,
site_cookie: str, site_cookie: str,
ua: str, ua: str,
proxies: dict) -> Tuple[bool, str]: proxy: bool) -> Tuple[bool, str]:
""" """
签到请求 签到请求
questionid: 450 questionid: 450
@ -125,7 +124,7 @@ class Pt52(_ISiteSigninHandler):
sign_res = RequestUtils(cookies=site_cookie, sign_res = RequestUtils(cookies=site_cookie,
ua=ua, ua=ua,
proxies=proxies proxies=settings.PROXY if proxy else None
).post_res(url='https://52pt.site/bakatest.php', data=data) ).post_res(url='https://52pt.site/bakatest.php', data=data)
if not sign_res or sign_res.status_code != 200: if not sign_res or sign_res.status_code != 200:
logger.error(f"签到失败,签到接口请求失败") logger.error(f"签到失败,签到接口请求失败")

View File

@ -6,6 +6,7 @@ from typing import Tuple
import chardet import chardet
from ruamel.yaml import CommentedMap from ruamel.yaml import CommentedMap
from app.core.config import settings
from app.helper.browser import PlaywrightHelper from app.helper.browser import PlaywrightHelper
from app.log import logger from app.log import logger
from app.utils.http import RequestUtils from app.utils.http import RequestUtils
@ -39,13 +40,13 @@ class _ISiteSigninHandler(metaclass=ABCMeta):
pass pass
@staticmethod @staticmethod
def get_page_source(url: str, cookie: str, ua: str, proxies: dict, render: bool) -> str: def get_page_source(url: str, cookie: str, ua: str, proxy: bool, render: bool) -> str:
""" """
获取页面源码 获取页面源码
:param url: Url地址 :param url: Url地址
:param cookie: Cookie :param cookie: Cookie
:param ua: UA :param ua: UA
:param proxies: 代理 :param proxy: 是否使用代理
:param render: 是否渲染 :param render: 是否渲染
:return: 页面源码,错误信息 :return: 页面源码,错误信息
""" """
@ -53,11 +54,11 @@ class _ISiteSigninHandler(metaclass=ABCMeta):
return PlaywrightHelper().get_page_source(url=url, return PlaywrightHelper().get_page_source(url=url,
cookies=cookie, cookies=cookie,
ua=ua, ua=ua,
proxies=proxies) proxies=settings.PROXY_SERVER if proxy else None)
else: else:
res = RequestUtils(cookies=cookie, res = RequestUtils(cookies=cookie,
ua=ua, ua=ua,
proxies=proxies proxies=settings.PROXY if proxy else None
).get_res(url=url) ).get_res(url=url)
if res is not None: if res is not None:
# 使用chardet检测字符编码 # 使用chardet检测字符编码

View File

@ -37,16 +37,14 @@ class BTSchool(_ISiteSigninHandler):
site_cookie = site_info.get("cookie") site_cookie = site_info.get("cookie")
ua = site_info.get("ua") ua = site_info.get("ua")
render = site_info.get("render") render = site_info.get("render")
proxies = settings.PROXY if site_info.get("proxy") else None proxy = site_info.get("proxy")
proxy_server = settings.PROXY_SERVER if site_info.get("proxy") else None
proxy_server = settings.PROXY_SERVER if site_info.get("proxy") else None
logger.info(f"{site} 开始签到") logger.info(f"{site} 开始签到")
# 判断今日是否已签到 # 判断今日是否已签到
html_text = self.get_page_source(url='https://pt.btschool.club', html_text = self.get_page_source(url='https://pt.btschool.club',
cookie=site_cookie, cookie=site_cookie,
ua=ua, ua=ua,
proxies=proxy_server, proxy=proxy,
render=render) render=render)
if not html_text: if not html_text:
@ -65,7 +63,7 @@ class BTSchool(_ISiteSigninHandler):
html_text = self.get_page_source(url='https://pt.btschool.club/index.php?action=addbonus', html_text = self.get_page_source(url='https://pt.btschool.club/index.php?action=addbonus',
cookie=site_cookie, cookie=site_cookie,
ua=ua, ua=ua,
proxies=proxy_server, proxy=proxy,
render=render) render=render)
if not html_text: if not html_text:

View File

@ -45,15 +45,14 @@ class CHDBits(_ISiteSigninHandler):
site = site_info.get("name") site = site_info.get("name")
site_cookie = site_info.get("cookie") site_cookie = site_info.get("cookie")
ua = site_info.get("ua") ua = site_info.get("ua")
proxies = settings.PROXY if site_info.get("proxy") else None proxy = site_info.get("proxy")
proxy_server = settings.PROXY_SERVER if site_info.get("proxy") else None
render = site_info.get("render") render = site_info.get("render")
# 判断今日是否已签到 # 判断今日是否已签到
html_text = self.get_page_source(url='https://chdbits.co/bakatest.php', html_text = self.get_page_source(url='https://chdbits.co/bakatest.php',
cookie=site_cookie, cookie=site_cookie,
ua=ua, ua=ua,
proxies=proxy_server, proxy=proxy,
render=render) render=render)
if not html_text: if not html_text:
@ -98,7 +97,7 @@ class CHDBits(_ISiteSigninHandler):
choice=choice, choice=choice,
site_cookie=site_cookie, site_cookie=site_cookie,
ua=ua, ua=ua,
proxies=proxies, proxy=proxy,
site=site) site=site)
def __signin(self, questionid: str, def __signin(self, questionid: str,
@ -106,7 +105,7 @@ class CHDBits(_ISiteSigninHandler):
site: str, site: str,
site_cookie: str, site_cookie: str,
ua: str, ua: str,
proxies: dict) -> Tuple[bool, str]: proxy: bool) -> Tuple[bool, str]:
""" """
签到请求 签到请求
questionid: 450 questionid: 450
@ -126,7 +125,7 @@ class CHDBits(_ISiteSigninHandler):
sign_res = RequestUtils(cookies=site_cookie, sign_res = RequestUtils(cookies=site_cookie,
ua=ua, ua=ua,
proxies=proxies proxies=settings.PROXY if proxy else None
).post_res(url='https://chdbits.co/bakatest.php', data=data) ).post_res(url='https://chdbits.co/bakatest.php', data=data)
if not sign_res or sign_res.status_code != 200: if not sign_res or sign_res.status_code != 200:
logger.error(f"签到失败,签到接口请求失败") logger.error(f"签到失败,签到接口请求失败")

View File

@ -36,15 +36,14 @@ class HaiDan(_ISiteSigninHandler):
site = site_info.get("name") site = site_info.get("name")
site_cookie = site_info.get("cookie") site_cookie = site_info.get("cookie")
ua = site_info.get("ua") ua = site_info.get("ua")
proxies = settings.PROXY if site_info.get("proxy") else None proxy = site_info.get("proxy")
proxy_server = settings.PROXY_SERVER if site_info.get("proxy") else None
render = site_info.get("render") render = site_info.get("render")
# 签到 # 签到
html_text = self.get_page_source(url='https://www.haidan.video/signin.php', html_text = self.get_page_source(url='https://www.haidan.video/signin.php',
cookie=site_cookie, cookie=site_cookie,
ua=ua, ua=ua,
proxies=proxy_server, proxy=proxy,
render=render) render=render)
if not html_text: if not html_text:
logger.error(f"签到失败,请检查站点连通性") logger.error(f"签到失败,请检查站点连通性")

View File

@ -38,15 +38,14 @@ class Hares(_ISiteSigninHandler):
site = site_info.get("name") site = site_info.get("name")
site_cookie = site_info.get("cookie") site_cookie = site_info.get("cookie")
ua = site_info.get("ua") ua = site_info.get("ua")
proxies = settings.PROXY if site_info.get("proxy") else None proxy = site_info.get("proxy")
proxy_server = settings.PROXY_SERVER if site_info.get("proxy") else None
render = site_info.get("render") render = site_info.get("render")
# 获取页面html # 获取页面html
html_text = self.get_page_source(url='https://club.hares.top', html_text = self.get_page_source(url='https://club.hares.top',
cookie=site_cookie, cookie=site_cookie,
ua=ua, ua=ua,
proxies=proxy_server, proxy=proxy,
render=render) render=render)
if not html_text: if not html_text:
@ -67,7 +66,7 @@ class Hares(_ISiteSigninHandler):
} }
sign_res = RequestUtils(cookies=site_cookie, sign_res = RequestUtils(cookies=site_cookie,
headers=headers, headers=headers,
proxies=proxies proxies=settings.PROXY if proxy else None
).get_res(url="https://club.hares.top/attendance.php?action=sign") ).get_res(url="https://club.hares.top/attendance.php?action=sign")
if not sign_res or sign_res.status_code != 200: if not sign_res or sign_res.status_code != 200:
logger.error(f"签到失败,签到接口请求失败") logger.error(f"签到失败,签到接口请求失败")

View File

@ -38,15 +38,14 @@ class HDCity(_ISiteSigninHandler):
site = site_info.get("name") site = site_info.get("name")
site_cookie = site_info.get("cookie") site_cookie = site_info.get("cookie")
ua = site_info.get("ua") ua = site_info.get("ua")
proxies = settings.PROXY if site_info.get("proxy") else None proxy = site_info.get("proxy")
proxy_server = settings.PROXY_SERVER if site_info.get("proxy") else None
render = site_info.get("render") render = site_info.get("render")
# 获取页面html # 获取页面html
html_text = self.get_page_source(url='https://hdcity.city/sign', html_text = self.get_page_source(url='https://hdcity.city/sign',
cookie=site_cookie, cookie=site_cookie,
ua=ua, ua=ua,
proxies=proxy_server, proxy=proxy,
render=render) render=render)
if not html_text: if not html_text:
logger.error(f"签到失败,请检查站点连通性") logger.error(f"签到失败,请检查站点连通性")

View File

@ -40,15 +40,14 @@ class HDSky(_ISiteSigninHandler):
site = site_info.get("name") site = site_info.get("name")
site_cookie = site_info.get("cookie") site_cookie = site_info.get("cookie")
ua = site_info.get("ua") ua = site_info.get("ua")
proxies = settings.PROXY if site_info.get("proxy") else None proxy = site_info.get("proxy")
proxy_server = settings.PROXY_SERVER if site_info.get("proxy") else None
render = site_info.get("render") render = site_info.get("render")
# 判断今日是否已签到 # 判断今日是否已签到
html_text = self.get_page_source(url='https://hdsky.me', html_text = self.get_page_source(url='https://hdsky.me',
cookie=site_cookie, cookie=site_cookie,
ua=ua, ua=ua,
proxies=proxy_server, proxy=proxy,
render=render) render=render)
if not html_text: if not html_text:
logger.error(f"签到失败,请检查站点连通性") logger.error(f"签到失败,请检查站点连通性")
@ -70,7 +69,7 @@ class HDSky(_ISiteSigninHandler):
while not img_hash and res_times <= 3: while not img_hash and res_times <= 3:
image_res = RequestUtils(cookies=site_cookie, image_res = RequestUtils(cookies=site_cookie,
headers=ua, headers=ua,
proxies=proxies proxies=settings.PROXY if proxy else None
).post_res(url='https://hdsky.me/image_code_ajax.php', ).post_res(url='https://hdsky.me/image_code_ajax.php',
data={'action': 'new'}) data={'action': 'new'})
if image_res and image_res.status_code == 200: if image_res and image_res.status_code == 200:
@ -115,7 +114,7 @@ class HDSky(_ISiteSigninHandler):
# 访问签到链接 # 访问签到链接
res = RequestUtils(cookies=site_cookie, res = RequestUtils(cookies=site_cookie,
headers=ua, headers=ua,
proxies=proxies proxies=settings.PROXY if proxy else None
).post_res(url='https://hdsky.me/showup.php', data=data) ).post_res(url='https://hdsky.me/showup.php', data=data)
if res and res.status_code == 200: if res and res.status_code == 200:
if json.loads(res.text)["success"]: if json.loads(res.text)["success"]:

View File

@ -40,15 +40,14 @@ class HDUpt(_ISiteSigninHandler):
site = site_info.get("name") site = site_info.get("name")
site_cookie = site_info.get("cookie") site_cookie = site_info.get("cookie")
ua = site_info.get("ua") ua = site_info.get("ua")
proxies = settings.PROXY if site_info.get("proxy") else None proxy = site_info.get("proxy")
proxy_server = settings.PROXY_SERVER if site_info.get("proxy") else None
render = site_info.get("render") render = site_info.get("render")
# 获取页面html # 获取页面html
html_text = self.get_page_source(url='https://pt.hdupt.com', html_text = self.get_page_source(url='https://pt.hdupt.com',
cookie=site_cookie, cookie=site_cookie,
ua=ua, ua=ua,
proxies=proxy_server, proxy=proxy,
render=render) render=render)
if not html_text: if not html_text:
logger.error(f"签到失败,请检查站点连通性") logger.error(f"签到失败,请检查站点连通性")
@ -68,7 +67,7 @@ class HDUpt(_ISiteSigninHandler):
html_text = self.get_page_source(url='https://pt.hdupt.com/added.php?action=qiandao', html_text = self.get_page_source(url='https://pt.hdupt.com/added.php?action=qiandao',
cookie=site_cookie, cookie=site_cookie,
ua=ua, ua=ua,
proxies=proxy_server, proxy=proxy,
render=render) render=render)
if not html_text: if not html_text:
logger.error(f"签到失败,请检查站点连通性") logger.error(f"签到失败,请检查站点连通性")

View File

@ -41,15 +41,14 @@ class Opencd(_ISiteSigninHandler):
site = site_info.get("name") site = site_info.get("name")
site_cookie = site_info.get("cookie") site_cookie = site_info.get("cookie")
ua = site_info.get("ua") ua = site_info.get("ua")
proxies = settings.PROXY if site_info.get("proxy") else None proxy = site_info.get("proxy")
proxy_server = settings.PROXY_SERVER if site_info.get("proxy") else None
render = site_info.get("render") render = site_info.get("render")
# 判断今日是否已签到 # 判断今日是否已签到
html_text = self.get_page_source(url='https://www.open.cd', html_text = self.get_page_source(url='https://www.open.cd',
cookie=site_cookie, cookie=site_cookie,
ua=ua, ua=ua,
proxies=proxy_server, proxy=proxy,
render=render) render=render)
if not html_text: if not html_text:
logger.error(f"签到失败,请检查站点连通性") logger.error(f"签到失败,请检查站点连通性")
@ -67,7 +66,7 @@ class Opencd(_ISiteSigninHandler):
html_text = self.get_page_source(url='https://www.open.cd/plugin_sign-in.php', html_text = self.get_page_source(url='https://www.open.cd/plugin_sign-in.php',
cookie=site_cookie, cookie=site_cookie,
ua=ua, ua=ua,
proxies=proxy_server, proxy=proxy,
render=render) render=render)
if not html_text: if not html_text:
logger.error(f"签到失败,请检查站点连通性") logger.error(f"签到失败,请检查站点连通性")
@ -116,7 +115,7 @@ class Opencd(_ISiteSigninHandler):
# 访问签到链接 # 访问签到链接
sign_res = RequestUtils(cookies=site_cookie, sign_res = RequestUtils(cookies=site_cookie,
headers=ua, headers=ua,
proxies=proxies proxies=settings.PROXY if proxy else None
).post_res(url='https://www.open.cd/plugin_sign-in.php?cmd=signin', data=data) ).post_res(url='https://www.open.cd/plugin_sign-in.php?cmd=signin', data=data)
if sign_res and sign_res.status_code == 200: if sign_res and sign_res.status_code == 200:
logger.debug(f"sign_res返回 {sign_res.text}") logger.debug(f"sign_res返回 {sign_res.text}")

View File

@ -34,15 +34,14 @@ class PTerClub(_ISiteSigninHandler):
site = site_info.get("name") site = site_info.get("name")
site_cookie = site_info.get("cookie") site_cookie = site_info.get("cookie")
ua = site_info.get("ua") ua = site_info.get("ua")
proxies = settings.PROXY if site_info.get("proxy") else None proxy = site_info.get("proxy")
proxy_server = settings.PROXY_SERVER if site_info.get("proxy") else None
render = site_info.get("render") render = site_info.get("render")
# 签到 # 签到
html_text = self.get_page_source(url='https://pterclub.com/attendance-ajax.php', html_text = self.get_page_source(url='https://pterclub.com/attendance-ajax.php',
cookie=site_cookie, cookie=site_cookie,
ua=ua, ua=ua,
proxies=proxy_server, proxy=proxy,
render=render) render=render)
if not html_text: if not html_text:
logger.error(f"签到失败,签到接口请求失败") logger.error(f"签到失败,签到接口请求失败")

View File

@ -55,8 +55,7 @@ class Tjupt(_ISiteSigninHandler):
site = site_info.get("name") site = site_info.get("name")
site_cookie = site_info.get("cookie") site_cookie = site_info.get("cookie")
ua = site_info.get("ua") ua = site_info.get("ua")
proxies = settings.PROXY if site_info.get("proxy") else None proxy = site_info.get("proxy")
proxy_server = settings.PROXY_SERVER if site_info.get("proxy") else None
render = site_info.get("render") render = site_info.get("render")
# 创建正确答案存储目录 # 创建正确答案存储目录
@ -67,7 +66,7 @@ class Tjupt(_ISiteSigninHandler):
html_text = self.get_page_source(url=self._sign_in_url, html_text = self.get_page_source(url=self._sign_in_url,
cookie=site_cookie, cookie=site_cookie,
ua=ua, ua=ua,
proxies=proxy_server, proxy=proxy,
render=render) render=render)
# 获取签到后返回html判断是否签到成功 # 获取签到后返回html判断是否签到成功
@ -101,7 +100,7 @@ class Tjupt(_ISiteSigninHandler):
# 获取签到图片hash # 获取签到图片hash
captcha_img_res = RequestUtils(cookies=site_cookie, captcha_img_res = RequestUtils(cookies=site_cookie,
headers=ua, headers=ua,
proxies=proxies proxies=settings.PROXY if proxy else None
).get_res(url=img_url) ).get_res(url=img_url)
if not captcha_img_res or captcha_img_res.status_code != 200: if not captcha_img_res or captcha_img_res.status_code != 200:
logger.error(f"签到图片 {img_url} 请求失败") logger.error(f"签到图片 {img_url} 请求失败")
@ -139,7 +138,7 @@ class Tjupt(_ISiteSigninHandler):
return self.__signin(answer=value, return self.__signin(answer=value,
site_cookie=site_cookie, site_cookie=site_cookie,
ua=ua, ua=ua,
proxies=proxies, proxy=proxy,
site=site) site=site)
except (FileNotFoundError, IOError, OSError) as e: except (FileNotFoundError, IOError, OSError) as e:
logger.debug(f"查询本地已知答案失败:{e},继续请求豆瓣查询") logger.debug(f"查询本地已知答案失败:{e},继续请求豆瓣查询")
@ -182,7 +181,7 @@ class Tjupt(_ISiteSigninHandler):
return self.__signin(answer=value, return self.__signin(answer=value,
site_cookie=site_cookie, site_cookie=site_cookie,
ua=ua, ua=ua,
proxies=proxies, proxy=proxy,
site=site, site=site,
exits_answers=exits_answers, exits_answers=exits_answers,
captcha_img_hash=captcha_img_hash) captcha_img_hash=captcha_img_hash)
@ -194,7 +193,7 @@ class Tjupt(_ISiteSigninHandler):
# 没有匹配签到成功,则签到失败 # 没有匹配签到成功,则签到失败
return False, f'{site}】签到失败,未获取到匹配答案' return False, f'{site}】签到失败,未获取到匹配答案'
def __signin(self, answer, site_cookie, ua, proxies, site, exits_answers=None, captcha_img_hash=None): def __signin(self, answer, site_cookie, ua, proxy, site, exits_answers=None, captcha_img_hash=None):
""" """
签到请求 签到请求
""" """
@ -205,7 +204,7 @@ class Tjupt(_ISiteSigninHandler):
logger.debug(f"提交data {data}") logger.debug(f"提交data {data}")
sign_in_res = RequestUtils(cookies=site_cookie, sign_in_res = RequestUtils(cookies=site_cookie,
headers=ua, headers=ua,
proxies=proxies proxies=settings.PROXY if proxy else None
).post_res(url=self._sign_in_url, data=data) ).post_res(url=self._sign_in_url, data=data)
if not sign_in_res or sign_in_res.status_code != 200: if not sign_in_res or sign_in_res.status_code != 200:
logger.error(f"签到失败,签到接口请求失败") logger.error(f"签到失败,签到接口请求失败")

View File

@ -42,15 +42,14 @@ class TTG(_ISiteSigninHandler):
site = site_info.get("name") site = site_info.get("name")
site_cookie = site_info.get("cookie") site_cookie = site_info.get("cookie")
ua = site_info.get("ua") ua = site_info.get("ua")
proxies = settings.PROXY if site_info.get("proxy") else None proxy = site_info.get("proxy")
proxy_server = settings.PROXY_SERVER if site_info.get("proxy") else None
render = site_info.get("render") render = site_info.get("render")
# 获取页面html # 获取页面html
html_text = self.get_page_source(url="https://totheglory.im", html_text = self.get_page_source(url="https://totheglory.im",
cookie=site_cookie, cookie=site_cookie,
ua=ua, ua=ua,
proxies=proxy_server, proxy=proxy,
render=render) render=render)
if not html_text: if not html_text:
logger.error(f"签到失败,请检查站点连通性") logger.error(f"签到失败,请检查站点连通性")
@ -79,7 +78,7 @@ class TTG(_ISiteSigninHandler):
# 签到 # 签到
sign_res = RequestUtils(cookies=site_cookie, sign_res = RequestUtils(cookies=site_cookie,
headers=ua, headers=ua,
proxies=proxies proxies=settings.PROXY if proxy else None
).post_res(url="https://totheglory.im/signed.php", ).post_res(url="https://totheglory.im/signed.php",
data=data) data=data)
if not sign_res or sign_res.status_code != 200: if not sign_res or sign_res.status_code != 200:

View File

@ -48,8 +48,7 @@ class U2(_ISiteSigninHandler):
site = site_info.get("name") site = site_info.get("name")
site_cookie = site_info.get("cookie") site_cookie = site_info.get("cookie")
ua = site_info.get("ua") ua = site_info.get("ua")
proxies = settings.PROXY if site_info.get("proxy") else None proxy = site_info.get("proxy")
proxy_server = settings.PROXY_SERVER if site_info.get("proxy") else None
render = site_info.get("render") render = site_info.get("render")
now = datetime.datetime.now() now = datetime.datetime.now()
@ -62,7 +61,7 @@ class U2(_ISiteSigninHandler):
html_text = self.get_page_source(url="https://u2.dmhy.org/showup.php", html_text = self.get_page_source(url="https://u2.dmhy.org/showup.php",
cookie=site_cookie, cookie=site_cookie,
ua=ua, ua=ua,
proxies=proxy_server, proxy=proxy,
render=render) render=render)
if not html_text: if not html_text:
logger.error(f"签到失败,请检查站点连通性") logger.error(f"签到失败,请检查站点连通性")
@ -107,7 +106,7 @@ class U2(_ISiteSigninHandler):
# 签到 # 签到
sign_res = RequestUtils(cookies=site_cookie, sign_res = RequestUtils(cookies=site_cookie,
headers=ua, headers=ua,
proxies=proxies proxies=settings.PROXY if proxy else None
).post_res(url="https://u2.dmhy.org/showup.php?action=show", ).post_res(url="https://u2.dmhy.org/showup.php?action=show",
data=data) data=data)
if not sign_res or sign_res.status_code != 200: if not sign_res or sign_res.status_code != 200:

View File

@ -36,15 +36,14 @@ class ZhuQue(_ISiteSigninHandler):
site = site_info.get("name") site = site_info.get("name")
site_cookie = site_info.get("cookie") site_cookie = site_info.get("cookie")
ua = site_info.get("ua") ua = site_info.get("ua")
proxies = settings.PROXY if site_info.get("proxy") else None proxy = site_info.get("proxy")
proxy_server = settings.PROXY_SERVER if site_info.get("proxy") else None
render = site_info.get("render") render = site_info.get("render")
# 获取页面html # 获取页面html
html_text = self.get_page_source(url="https://zhuque.in", html_text = self.get_page_source(url="https://zhuque.in",
cookie=site_cookie, cookie=site_cookie,
ua=ua, ua=ua,
proxies=proxy_server, proxy=proxy,
render=render) render=render)
if not html_text: if not html_text:
logger.error(f"模拟登录失败,请检查站点连通性") logger.error(f"模拟登录失败,请检查站点连通性")
@ -74,7 +73,7 @@ class ZhuQue(_ISiteSigninHandler):
} }
skill_res = RequestUtils(cookies=site_cookie, skill_res = RequestUtils(cookies=site_cookie,
headers=headers, headers=headers,
proxies=proxies proxies=settings.PROXY if proxy else None
).post_res(url="https://zhuque.in/api/gaming/fireGenshinCharacterMagic", json=data) ).post_res(url="https://zhuque.in/api/gaming/fireGenshinCharacterMagic", json=data)
if not skill_res or skill_res.status_code != 200: if not skill_res or skill_res.status_code != 200:
logger.error(f"模拟登录失败,释放技能失败") logger.error(f"模拟登录失败,释放技能失败")