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.chain.cookiecloud import CookieCloudChain
from app.chain.search import SearchChain
from app.chain.site import SiteChain
from app.core.security import verify_token
from app.db import get_db
from app.db.models.site import Site
from app.db.models.siteicon import SiteIcon
from app.db.siteicon_oper import SiteIconOper
router = APIRouter()
@ -85,7 +87,7 @@ async def cookie_cloud_sync(_: schemas.TokenPayload = Depends(verify_token)) ->
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(
site_id: int,
username: str,
@ -112,23 +114,58 @@ async def update_cookie(
return schemas.Response(success=True, message=msg)
@router.get("/test", summary="连接测试", response_model=schemas.Response)
async def test_site(domain: str, _: schemas.TokenPayload = Depends(verify_token)) -> Any:
@router.get("/test/{site_id}", summary="连接测试", response_model=schemas.Response)
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)
@router.get("/icon", summary="站点图标", response_model=schemas.Response)
async def site_icon(domain: str, _: schemas.TokenPayload = Depends(verify_token)) -> Any:
@router.get("/icon/{site_id}", summary="站点图标", response_model=schemas.Response)
async def site_icon(site_id: int,
db: Session = Depends(get_db),
_: schemas.TokenPayload = Depends(verify_token)) -> Any:
"""
获取站点图标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:
return schemas.Response(success=False, message="站点图标不存在!")
return schemas.Response(success=True, data={
"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)
def search_torrents(self, mediainfo: Optional[MediaInfo], site: CommentedMap,
def search_torrents(self, site: CommentedMap,
mediainfo: Optional[MediaInfo] = None,
keyword: str = None) -> List[TorrentInfo]:
"""
搜索一个站点的种子资源
:param mediainfo: 识别的媒体信息
:param site: 站点
:param mediainfo: 识别的媒体信息
:param keyword: 搜索关键词如有按关键词搜索否则按媒体信息名称搜索
:reutrn: 资源列表
"""

View File

@ -41,11 +41,28 @@ class SearchChain(ChainBase):
def search_by_title(self, title: str) -> List[TorrentInfo]:
"""
根据标题搜索资源不识别不过滤直接返回站点内容
:param title: 标题为空时返回所有站点首页内容
"""
logger.info(f'开始搜索资源,关键词:{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,
keyword: str = None,
no_exists: Dict[int, Dict[int, NotExistMediaInfo]] = None) -> Optional[List[Context]]:

Binary file not shown.