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) @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: _: schemas.TokenPayload = Depends(verify_token)) -> Any:
""" """
刮削媒体信息 刮削媒体信息
""" """
if not path: if not path:
return schemas.Response(success=False, message="刮削路径无效") return schemas.Response(success=False, message="刮削路径无效")
scrape_path = Path(path)
if not scrape_path.exists():
return schemas.Response(success=False, message="刮削路径不存在")
# 识别
chain = MediaChain() chain = MediaChain()
meta = MetaInfoPath(scrape_path) # 识别媒体信息
meta = MetaInfoPath(path)
mediainfo = chain.recognize_media(meta) mediainfo = chain.recognize_media(meta)
if not media_info: if not media_info:
return schemas.Response(success=False, message="刮削失败,无法识别媒体信息") return schemas.Response(success=False, message="刮削失败,无法识别媒体信息")
# 刮削 if storage == "local":
chain.scrape_metadata(path=scrape_path, mediainfo=mediainfo, transfer_type=settings.TRANSFER_TYPE) 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="刮削完成") return schemas.Response(success=True, message="刮削完成")

View File

@ -26,6 +26,17 @@ class MediaChain(ChainBase, metaclass=Singleton):
# 临时识别结果 {title, name, year, season, episode} # 临时识别结果 {title, name, year, season, episode}
recognize_temp: Optional[dict] = None 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]: def recognize_by_meta(self, metainfo: MetaBase) -> Optional[MediaInfo]:
""" """
根据主副标题识别媒体信息 根据主副标题识别媒体信息
@ -316,13 +327,9 @@ class MediaChain(ChainBase, metaclass=Singleton):
) )
return None return None
def meta_nfo(self, meta: MetaBase, mediainfo: MediaInfo, def scrape_metadata_online(self, storage: str, path: str, 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) # TODO: 远程刮削媒体信息
pass

View File

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