feat(app): 添加 ASMR 和磁力链接功能模块
- 新增 asmr_bp 蓝图模块和 AsmrService 服务 - 新增 magnet_bp 蓝图模块和 MagnetService 服务 - 在应用初始化时注册新的蓝图模块 - 将 switch 语句替换为 if-elif 语句进行配置管理 - 在前端界面添加 ASMR 功能入口 - 增加 libtorrent 依赖包 - 修复字符串引号使用问题 - 增加文件重命名异常处理 - 扩展类型注解支持 Union 类型 - 增加请求超时时间到 30 秒 - 优化前端错误处理逻辑
This commit is contained in:
@@ -0,0 +1,16 @@
|
||||
import requests
|
||||
|
||||
class AsmrService:
|
||||
API_URL = "https://www.asmrgay.com/api/fs/list"
|
||||
base_params = {
|
||||
"path": "/asmr/中文音声",
|
||||
"password": "",
|
||||
"per_page": 30,
|
||||
"refresh": False
|
||||
}
|
||||
|
||||
def __init__(self):
|
||||
pass
|
||||
|
||||
def get_all(self):
|
||||
return [self.API_URL]
|
||||
@@ -87,8 +87,7 @@ class BookService:
|
||||
if privilege_level > self.setting["privilegeLevel"]:
|
||||
print("下载失败,权限等级不够")
|
||||
return
|
||||
yield from self.download_file(f"{self.setting["baseUrl"]}{i.select_one(
|
||||
'a')['href']}", name, i.select_one('a').string)
|
||||
yield from self.download_file(f"{self.setting['baseUrl']}{i.select_one('a')['href']}", name, i.select_one('a').string)
|
||||
# yield from self.download_file(f"{self.setting["baseUrl"]}{i.select_one(
|
||||
# 'a')['href']}", name, self.legitimate_naming(i.select_one('a').string))
|
||||
except RetryError as e:
|
||||
@@ -106,7 +105,7 @@ class BookService:
|
||||
print(dir_name + "/" + file_name)
|
||||
content_type = response.headers.get('Content-Type', '')
|
||||
if content_type not in self.ALLOWED_CONTENT_TYPES:
|
||||
yield f"event: mes_error\ndata: {self.setting["targetDate"]} {file_name}\n\n"
|
||||
yield f"event: mes_error\ndata: {self.setting['targetDate']} {file_name}\n\n"
|
||||
print("不是可下载文件")
|
||||
return
|
||||
target_dir = self.download_path / self.setting["targetDate"] / dir_name / file_name
|
||||
@@ -115,7 +114,7 @@ class BookService:
|
||||
for chunk in response.iter_content(chunk_size=1024):
|
||||
if chunk:
|
||||
f.write(chunk)
|
||||
yield f"data: {self.setting["targetDate"]} {file_name}\n\n"
|
||||
yield f"data: {self.setting['targetDate']} {file_name}\n\n"
|
||||
except requests.RequestException as e:
|
||||
yield f"event: error\ndata: {self.setting['targetDate']} {file_name} 网络错误\n\n"
|
||||
raise # 触发 tenacity 重试
|
||||
@@ -128,7 +127,7 @@ class BookService:
|
||||
yield f"data: 不允许下载当天的\n\n"
|
||||
return None
|
||||
# yield f"data: 当前页面 {page}\n\n"
|
||||
url = f"{self.setting["baseUrl"]}forum.php?mod={self.setting["mod"]}&fid={self.setting["fid"]}&page={page}" # 版块页面地址
|
||||
url = f"{self.setting['baseUrl']}forum.php?mod={self.setting['mod']}&fid={self.setting['fid']}&page={page}" # 版块页面地址
|
||||
response = self.session.get(url) # 请求
|
||||
response.raise_for_status()
|
||||
soup = BeautifulSoup(response.text, 'lxml') # 解析
|
||||
|
||||
@@ -16,7 +16,10 @@ class FileService:
|
||||
return None
|
||||
|
||||
new_path = os.path.join(os.path.dirname(entry.path), new_name)
|
||||
os.rename(entry.path, new_path)
|
||||
try:
|
||||
os.rename(entry.path, new_path)
|
||||
except Exception as e:
|
||||
print(e)
|
||||
self.result_list.insert(0, new_path)
|
||||
# return new_path
|
||||
|
||||
@@ -73,4 +76,4 @@ class FileService:
|
||||
def rename(self) -> List[str]:
|
||||
FolderService(paths=self.paths, ignore_dirs=IGNORE_DIRS, folder_callback=self.process_folder_name,
|
||||
file_callback=self.process_file_name).process_folder()
|
||||
return self.result_list
|
||||
return self.result_list
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
import os
|
||||
from typing import Optional, Callable, List
|
||||
from typing import Optional, Callable, List, Union
|
||||
|
||||
|
||||
class FolderService:
|
||||
def __init__(
|
||||
self,
|
||||
paths: List[str] | str,
|
||||
paths: Union[List[str], str],
|
||||
ignore_dirs: Optional[set] = None,
|
||||
folder_callback: Optional[Callable] = None,
|
||||
file_callback: Optional[Callable] = None,
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
import requests
|
||||
|
||||
|
||||
class MagnetService:
|
||||
def __init__(self):
|
||||
pass
|
||||
|
||||
def to_torrent(self):
|
||||
pass
|
||||
Reference in New Issue
Block a user