fix 站点数据刷新

This commit is contained in:
jxxghp
2024-09-26 14:00:10 +08:00
parent b4b919db86
commit c6abb1f9f1
4 changed files with 24 additions and 16 deletions
+2 -2
View File
@@ -65,10 +65,10 @@ class SiteChain(ChainBase):
:param site: 站点 :param site: 站点
:return: 用户数据 :return: 用户数据
""" """
userdata = self.run_module("refresh_userdata", site=site) userdata: SiteUserData = self.run_module("refresh_userdata", site=site)
if userdata: if userdata:
self.siteoper.update_userdata(domain=StringUtils.get_url_domain(site.get("domain")), self.siteoper.update_userdata(domain=StringUtils.get_url_domain(site.get("domain")),
payload=userdata) payload=userdata.dict())
return userdata return userdata
def refresh_userdatas(self) -> None: def refresh_userdatas(self) -> None:
+5
View File
@@ -1,9 +1,11 @@
import json
from datetime import datetime from datetime import datetime
from typing import Tuple, List from typing import Tuple, List
from app.db import DbOper from app.db import DbOper
from app.db.models.site import Site from app.db.models.site import Site
from app.db.models.siteuserdata import SiteUserData from app.db.models.siteuserdata import SiteUserData
from app.utils.object import ObjectUtils
class SiteOper(DbOper): class SiteOper(DbOper):
@@ -120,6 +122,9 @@ class SiteOper(DbOper):
SiteUserData.update(self._db, payload) SiteUserData.update(self._db, payload)
else: else:
# 不存在则插入 # 不存在则插入
for key, value in payload.items():
if ObjectUtils.is_obj(value):
payload[key] = json.dumps(value)
SiteUserData(**payload).create(self._db) SiteUserData(**payload).create(self._db)
return True, "更新站点用户数据成功" return True, "更新站点用户数据成功"
+13 -9
View File
@@ -10,6 +10,7 @@ from app.helper.module import ModuleHelper
from app.helper.sites import SitesHelper from app.helper.sites import SitesHelper
from app.log import logger from app.log import logger
from app.modules import _ModuleBase from app.modules import _ModuleBase
from app.modules.indexer.parser import SiteParserBase
from app.modules.indexer.spider import TorrentSpider from app.modules.indexer.spider import TorrentSpider
from app.modules.indexer.spider.haidan import HaiDanSpider from app.modules.indexer.spider.haidan import HaiDanSpider
from app.modules.indexer.spider.mtorrent import MTorrentSpider from app.modules.indexer.spider.mtorrent import MTorrentSpider
@@ -30,8 +31,10 @@ class IndexerModule(_ModuleBase):
def init_module(self) -> None: def init_module(self) -> None:
# 加载模块 # 加载模块
self._site_schemas = ModuleHelper.load('app.modules.indexer.parser', self._site_schemas = ModuleHelper.load(
filter_func=lambda _, obj: hasattr(obj, 'schema')) 'app.modules.indexer.parser',
filter_func=lambda _, obj: hasattr(obj, 'schema') and getattr(obj, 'schema') is not None)
pass
@staticmethod @staticmethod
def get_name() -> str: def get_name() -> str:
@@ -214,12 +217,12 @@ class IndexerModule(_ModuleBase):
:return: 用户数据 :return: 用户数据
""" """
def __get_site_obj(): def __get_site_obj() -> Optional[SiteParserBase]:
""" """
获取站点解析器 获取站点解析器
""" """
for site_schema in self._site_schemas: for site_schema in self._site_schemas:
if site_schema.schema == site.get("schema"): if site_schema.schema.value == site.get("schema"):
return site_schema( return site_schema(
site_name=site.get("name"), site_name=site.get("name"),
url=site.get("url"), url=site.get("url"),
@@ -232,13 +235,14 @@ class IndexerModule(_ModuleBase):
site_obj = __get_site_obj() site_obj = __get_site_obj()
if not site_obj: if not site_obj:
logger.warn(f"站点 {site.get('name')} 未找到站点解析器: {site.get('schema')}") if not site.get("public"):
logger.warn(f"站点 {site.get('name')} 未找到站点解析器,schema{site.get('schema')}")
return None return None
# 获取用户数据 # 获取用户数据
logger.debug(f"站点 {site.get('name')} 开始以 {site.get('schema')} 模型解析") logger.info(f"站点 {site.get('name')} 开始以 {site.get('schema')} 模型解析数据...")
site_obj.parse() site_obj.parse()
logger.debug(f"站点 {site.get('name')} 解析完成") logger.debug(f"站点 {site.get('name')} 数据解析完成")
return SiteUserData( return SiteUserData(
domain=StringUtils.get_url_domain(site.get("url")), domain=StringUtils.get_url_domain(site.get("url")),
userid=site_obj.userid, userid=site_obj.userid,
@@ -251,11 +255,11 @@ class IndexerModule(_ModuleBase):
bonus=site_obj.bonus, bonus=site_obj.bonus,
seeding=site_obj.seeding, seeding=site_obj.seeding,
seeding_size=site_obj.seeding_size, seeding_size=site_obj.seeding_size,
seeding_info=site_obj.seeding_info, seeding_info=site_obj.seeding_info or [],
leeching=site_obj.leeching, leeching=site_obj.leeching,
leeching_size=site_obj.leeching_size, leeching_size=site_obj.leeching_size,
message_unread=site_obj.message_unread, message_unread=site_obj.message_unread,
message_unread_contents=site_obj.message_unread_contents, message_unread_contents=site_obj.message_unread_contents or [],
updated_at=datetime.now().strftime('%Y-%m-%d'), updated_at=datetime.now().strftime('%Y-%m-%d'),
err_msg=site_obj.err_msg err_msg=site_obj.err_msg
) )
+4 -5
View File
@@ -36,7 +36,7 @@ class SiteSchema(Enum):
class SiteParserBase(metaclass=ABCMeta): class SiteParserBase(metaclass=ABCMeta):
# 站点模版 # 站点模版
schema = SiteSchema.NexusPhp schema = None
# 请求模式 cookie/apikey # 请求模式 cookie/apikey
request_mode = "cookie" request_mode = "cookie"
@@ -45,7 +45,6 @@ class SiteParserBase(metaclass=ABCMeta):
site_cookie: str, site_cookie: str,
apikey: str, apikey: str,
token: str, token: str,
index_html: str,
session: Session = None, session: Session = None,
ua: str = None, ua: str = None,
emulate: bool = False, emulate: bool = False,
@@ -61,12 +60,11 @@ class SiteParserBase(metaclass=ABCMeta):
self._site_domain = __split_url.netloc self._site_domain = __split_url.netloc
self._base_url = f"{__split_url.scheme}://{__split_url.netloc}" self._base_url = f"{__split_url.scheme}://{__split_url.netloc}"
self._site_cookie = site_cookie self._site_cookie = site_cookie
self._index_html = index_html
self._session = session if session else None self._session = session if session else None
self._ua = ua self._ua = ua
self._emulate = emulate self._emulate = emulate
self._proxy = proxy self._proxy = proxy
self._index_html = ""
# 用户信息 # 用户信息
self.username = None self.username = None
self.userid = None self.userid = None
@@ -156,6 +154,8 @@ class SiteParserBase(metaclass=ABCMeta):
解析站点信息 解析站点信息
:return: :return:
""" """
# 获取站点首页html
self._index_html = self._get_page_content(url=self._site_url)
# 检查是否已经登录 # 检查是否已经登录
if not self._parse_logged_in(self._index_html): if not self._parse_logged_in(self._index_html):
return return
@@ -194,7 +194,6 @@ class SiteParserBase(metaclass=ABCMeta):
) )
# 解析用户做种信息 # 解析用户做种信息
self._parse_seeding_pages() self._parse_seeding_pages()
self.seeding_info = json.dumps(self.seeding_info)
def _pase_unread_msgs(self): def _pase_unread_msgs(self):
""" """