fix site id

This commit is contained in:
jxxghp 2023-06-21 10:48:42 +08:00
parent c05a80239c
commit 957222ddbd
6 changed files with 64 additions and 9 deletions

View File

@ -5,10 +5,12 @@ from sqlalchemy.orm import Session
from app import schemas from app import schemas
from app.chain.cookiecloud import CookieCloudChain from app.chain.cookiecloud import CookieCloudChain
from app.chain.search import SearchChain
from app.chain.site import SiteChain from app.chain.site import SiteChain
from app.core.security import verify_token from app.core.security import verify_token
from app.db import get_db from app.db import get_db
from app.db.models.site import Site from app.db.models.site import Site
from app.db.models.siteicon import SiteIcon
from app.db.siteicon_oper import SiteIconOper from app.db.siteicon_oper import SiteIconOper
router = APIRouter() router = APIRouter()
@ -85,7 +87,7 @@ async def cookie_cloud_sync(_: schemas.TokenPayload = Depends(verify_token)) ->
return schemas.Response(success=True, message="同步成功!") return schemas.Response(success=True, message="同步成功!")
@router.get("/cookie", summary="更新站点Cookie&UA", response_model=schemas.Response) @router.get("/cookie/{site_id}", summary="更新站点Cookie&UA", response_model=schemas.Response)
async def update_cookie( async def update_cookie(
site_id: int, site_id: int,
username: str, username: str,
@ -112,23 +114,58 @@ async def update_cookie(
return schemas.Response(success=True, message=msg) return schemas.Response(success=True, message=msg)
@router.get("/test", summary="连接测试", response_model=schemas.Response) @router.get("/test/{site_id}", summary="连接测试", response_model=schemas.Response)
async def test_site(domain: str, _: schemas.TokenPayload = Depends(verify_token)) -> Any: async def test_site(site_id: int,
db: Session = Depends(get_db),
_: schemas.TokenPayload = Depends(verify_token)) -> Any:
""" """
测试站点是否可用 测试站点是否可用
""" """
status, message = SiteChain().test(domain) site = Site.get(db, site_id)
if not site:
raise HTTPException(
status_code=404,
detail=f"站点 {site_id} 不存在",
)
status, message = SiteChain().test(site.domain)
return schemas.Response(success=status, message=message) return schemas.Response(success=status, message=message)
@router.get("/icon", summary="站点图标", response_model=schemas.Response) @router.get("/icon/{site_id}", summary="站点图标", response_model=schemas.Response)
async def site_icon(domain: str, _: schemas.TokenPayload = Depends(verify_token)) -> Any: async def site_icon(site_id: int,
db: Session = Depends(get_db),
_: schemas.TokenPayload = Depends(verify_token)) -> Any:
""" """
获取站点图标base64或者url 获取站点图标base64或者url
""" """
icon = SiteIconOper().get_by_domain(domain) site = Site.get(db, site_id)
if not site:
raise HTTPException(
status_code=404,
detail=f"站点 {site_id} 不存在",
)
icon = SiteIcon.get_by_domain(db, site.domain)
if not icon: if not icon:
return schemas.Response(success=False, message="站点图标不存在!") return schemas.Response(success=False, message="站点图标不存在!")
return schemas.Response(success=True, data={ return schemas.Response(success=True, data={
"icon": icon.base64 if icon.base64 else icon.url "icon": icon.base64 if icon.base64 else icon.url
}) })
@router.get("/resource/{site_id}", summary="站点资源", response_model=List[schemas.TorrentInfo])
async def site_resource(site_id: int, keyword: str = None,
db: Session = Depends(get_db),
_: schemas.TokenPayload = Depends(verify_token)) -> Any:
"""
浏览站点资源
"""
site = Site.get(db, site_id)
if not site:
raise HTTPException(
status_code=404,
detail=f"站点 {site_id} 不存在",
)
torrents = SearchChain().browse(site.domain, keyword)
if not torrents:
return []
return [torrent.to_dict() for torrent in torrents]

View File

@ -148,12 +148,13 @@ class ChainBase(AbstractSingleton, metaclass=Singleton):
""" """
return self.run_module("search_medias", meta=meta) return self.run_module("search_medias", meta=meta)
def search_torrents(self, mediainfo: Optional[MediaInfo], site: CommentedMap, def search_torrents(self, site: CommentedMap,
mediainfo: Optional[MediaInfo] = None,
keyword: str = None) -> List[TorrentInfo]: keyword: str = None) -> List[TorrentInfo]:
""" """
搜索一个站点的种子资源 搜索一个站点的种子资源
:param mediainfo: 识别的媒体信息
:param site: 站点 :param site: 站点
:param mediainfo: 识别的媒体信息
:param keyword: 搜索关键词如有按关键词搜索否则按媒体信息名称搜索 :param keyword: 搜索关键词如有按关键词搜索否则按媒体信息名称搜索
:reutrn: 资源列表 :reutrn: 资源列表
""" """

View File

@ -41,11 +41,28 @@ class SearchChain(ChainBase):
def search_by_title(self, title: str) -> List[TorrentInfo]: def search_by_title(self, title: str) -> List[TorrentInfo]:
""" """
根据标题搜索资源不识别不过滤直接返回站点内容 根据标题搜索资源不识别不过滤直接返回站点内容
:param title: 标题为空时返回所有站点首页内容
""" """
logger.info(f'开始搜索资源,关键词:{title} ...') logger.info(f'开始搜索资源,关键词:{title} ...')
# 搜索 # 搜索
return self.__search_all_sites(keyword=title) return self.__search_all_sites(keyword=title)
def browse(self, domain: str, keyword: str = None) -> List[TorrentInfo]:
"""
浏览站点首页内容
:param domain: 站点域名
:param keyword: 关键词有值时为搜索
"""
if not keyword:
logger.info(f'开始浏览站点首页内容,站点:{domain} ...')
else:
logger.info(f'开始搜索资源,关键词:{keyword},站点:{domain} ...')
site = self.siteshelper.get_indexer(domain)
if not site:
logger.error(f'站点 {domain} 不存在!')
return []
return self.search_torrents(site=site, keyword=keyword)
def process(self, mediainfo: MediaInfo, def process(self, mediainfo: MediaInfo,
keyword: str = None, keyword: str = None,
no_exists: Dict[int, Dict[int, NotExistMediaInfo]] = None) -> Optional[List[Context]]: no_exists: Dict[int, Dict[int, NotExistMediaInfo]] = None) -> Optional[List[Context]]:

Binary file not shown.