This commit is contained in:
jxxghp
2024-06-21 11:13:01 +08:00
parent 8a98c65026
commit bfbeae7fa7
3 changed files with 40 additions and 30 deletions

View File

@ -98,24 +98,27 @@ def search(title: str,
@router.get("/scrape", summary="刮削媒体信息", response_model=schemas.Response)
def scrape(path: str,
def scrape(path: str, storage: str = "local",
_: schemas.TokenPayload = Depends(verify_token)) -> Any:
"""
刮削媒体信息
"""
if not path:
return schemas.Response(success=False, message="刮削路径无效")
scrape_path = Path(path)
if not scrape_path.exists():
return schemas.Response(success=False, message="刮削路径不存在")
# 识别
chain = MediaChain()
meta = MetaInfoPath(scrape_path)
# 识别媒体信息
meta = MetaInfoPath(path)
mediainfo = chain.recognize_media(meta)
if not media_info:
return schemas.Response(success=False, message="刮削失败,无法识别媒体信息")
# 刮削
chain.scrape_metadata(path=scrape_path, mediainfo=mediainfo, transfer_type=settings.TRANSFER_TYPE)
if storage == "local":
scrape_path = Path(path)
if not scrape_path.exists():
return schemas.Response(success=False, message="刮削路径不存在")
# 刮削
chain.scrape_metadata(path=scrape_path, mediainfo=mediainfo, transfer_type=settings.TRANSFER_TYPE)
else:
chain.scrape_metadata_online(storage=storage, path=path, mediainfo=mediainfo)
return schemas.Response(success=True, message="刮削完成")

View File

@ -26,6 +26,17 @@ class MediaChain(ChainBase, metaclass=Singleton):
# 临时识别结果 {title, name, year, season, episode}
recognize_temp: Optional[dict] = None
def meta_nfo(self, meta: MetaBase, mediainfo: MediaInfo,
season: int = None, episode: int = None) -> Optional[str]:
"""
获取NFO文件内容文本
:param meta: 元数据
:param mediainfo: 媒体信息
:param season: 季号
:param episode: 集号
"""
return self.run_module("meta_nfo", meta=meta, mediainfo=mediainfo, season=season, episode=episode)
def recognize_by_meta(self, metainfo: MetaBase) -> Optional[MediaInfo]:
"""
根据主副标题识别媒体信息
@ -316,13 +327,9 @@ class MediaChain(ChainBase, metaclass=Singleton):
)
return None
def meta_nfo(self, meta: MetaBase, mediainfo: MediaInfo,
season: int = None, episode: int = None) -> Optional[str]:
def scrape_metadata_online(self, storage: str, path: str, mediainfo: MediaInfo):
"""
获取NFO文件内容文本
:param meta: 元数据
:param mediainfo: 媒体信息
:param season: 季号
:param episode: 集号
远程刮削媒体信息(网盘等)
"""
return self.run_module("meta_nfo", meta=meta, mediainfo=mediainfo, season=season, episode=episode)
# TODO: 远程刮削媒体信息
pass

View File

@ -76,10 +76,10 @@ class AliyunHelper:
if action:
if code == "DeviceSessionSignatureInvalid":
logger.warn("设备已失效,正在重新建立会话...")
self.__create_session(self.get_headers(self.__auth_params))
self.__create_session(self.__get_headers(self.__auth_params))
if code == "UserDeviceOffline":
logger.warn("设备已离线,尝试重新登录,如仍报错请检查阿里云盘绑定设备数量是否超限!")
self.__create_session(self.get_headers(self.__auth_params))
self.__create_session(self.__get_headers(self.__auth_params))
if code == "AccessTokenInvalid":
logger.warn("访问令牌已失效,正在刷新令牌...")
self.__update_accesstoken(self.__auth_params, self.__auth_params.get("refreshToken"))
@ -192,7 +192,7 @@ class AliyunHelper:
"""
更新阿里云盘访问令牌
"""
headers = self.get_headers(params)
headers = self.__get_headers(params)
res = RequestUtils(headers=headers, timeout=10).post_res(
self.update_accessstoken_url, json={
"refresh_token": refresh_token,
@ -273,10 +273,10 @@ class AliyunHelper:
update_device = True
# 更新设备信息重新创建会话
if update_device:
self.__create_session(self.get_headers(params))
self.__create_session(self.__get_headers(params))
return params
def get_headers(self, params: dict):
def __get_headers(self, params: dict):
"""
获取请求头
"""
@ -300,7 +300,7 @@ class AliyunHelper:
params = self.__access_params
if not params:
return {}
headers = self.get_headers(params)
headers = self.__get_headers(params)
res = RequestUtils(headers=headers, timeout=10).post_res(self.user_info_url)
if res:
result = res.json()
@ -326,7 +326,7 @@ class AliyunHelper:
if not params:
return []
# 请求头
headers = self.get_headers(params)
headers = self.__get_headers(params)
# 根目录处理
if not drive_id:
return [
@ -389,7 +389,7 @@ class AliyunHelper:
params = self.__access_params
if not params:
return None
headers = self.get_headers(params)
headers = self.__get_headers(params)
res = RequestUtils(headers=headers, timeout=10).post_res(self.create_folder_url, json={
"drive_id": params.get("resourceDriveId"),
"parent_file_id": parent_file_id,
@ -428,7 +428,7 @@ class AliyunHelper:
params = self.__access_params
if not params:
return False
headers = self.get_headers(params)
headers = self.__get_headers(params)
res = RequestUtils(headers=headers, timeout=10).post_res(self.delete_file_url, json={
"drive_id": params.get("resourceDriveId"),
"file_id": file_id
@ -446,7 +446,7 @@ class AliyunHelper:
params = self.__access_params
if not params:
return None
headers = self.get_headers(params)
headers = self.__get_headers(params)
res = RequestUtils(headers=headers, timeout=10).post_res(self.file_detail_url, json={
"drive_id": params.get("resourceDriveId"),
"file_id": file_id
@ -464,7 +464,7 @@ class AliyunHelper:
params = self.__access_params
if not params:
return False
headers = self.get_headers(params)
headers = self.__get_headers(params)
res = RequestUtils(headers=headers, timeout=10).post_res(self.rename_file_url, json={
"drive_id": params.get("resourceDriveId"),
"file_id": file_id,
@ -484,7 +484,7 @@ class AliyunHelper:
params = self.__access_params
if not params:
return None
headers = self.get_headers(params)
headers = self.__get_headers(params)
res = RequestUtils(headers=headers, timeout=10).post_res(self.download_url, json={
"drive_id": params.get("resourceDriveId"),
"file_id": file_id
@ -502,7 +502,7 @@ class AliyunHelper:
params = self.__access_params
if not params:
return False
headers = self.get_headers(params)
headers = self.__get_headers(params)
res = RequestUtils(headers=headers, timeout=10).post_res(self.move_file_url, json={
"drive_id": drive_id,
"file_id": file_id,
@ -522,7 +522,7 @@ class AliyunHelper:
params = self.__access_params
if not params:
return None
headers = self.get_headers(params)
headers = self.__get_headers(params)
res = RequestUtils(headers=headers, timeout=10).post_res(self.create_file_url, json={
"drive_id": params.get("resourceDriveId"),
"parent_file_id": parent_file_id,