Compare commits

..

1 Commits

Author SHA1 Message Date
xiaoQQya
6ed5d310c6
Merge 78581b15a7 into 98e53b38db 2025-10-21 15:56:38 +08:00
3 changed files with 11 additions and 28 deletions

View File

@ -58,7 +58,7 @@
- 媒体库整合 - 媒体库整合
- [x] 根据任务名搜索 Emby 媒体库 - [x] 根据任务名搜索 Emby 媒体库
- [x] 追更或整理后自动刷新 Emby 媒体库 - [x] 追更或整理后自动刷新 Emby 媒体库
- [x] 插件模块化,允许自行开发和挂载[插件](./plugins) - [x] 媒体库模块化,用户可很方便地[开发自己的媒体库hook模块](./plugins)
- 其它 - 其它
- [x] 每日签到领空间 <sup>[?](https://github.com/Cp0204/quark-auto-save/wiki/使用技巧集锦#每日签到领空间)</sup> - [x] 每日签到领空间 <sup>[?](https://github.com/Cp0204/quark-auto-save/wiki/使用技巧集锦#每日签到领空间)</sup>
@ -69,7 +69,7 @@
### Docker 部署 ### Docker 部署
Docker 部署提供 WebUI 进行管理配置,部署命令: Docker 部署提供 WebUI 管理配置,图形化配置已能满足绝大多数需求。部署命令:
```shell ```shell
docker run -d \ docker run -d \
@ -113,7 +113,6 @@ services:
| `WEBUI_PASSWORD` | `admin123` | 管理密码 | | `WEBUI_PASSWORD` | `admin123` | 管理密码 |
| `PORT` | `5005` | 管理后台端口 | | `PORT` | `5005` | 管理后台端口 |
| `PLUGIN_FLAGS` | | 插件标志,如 `-emby,-aria2` 禁用某些插件 | | `PLUGIN_FLAGS` | | 插件标志,如 `-emby,-aria2` 禁用某些插件 |
| `TASK_TIMEOUT` | `1800` | 任务执行超时时间(秒),超时则任务结束 |
#### 一键更新 #### 一键更新
@ -193,10 +192,6 @@ docker run --rm -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtow
AstrBot 插件,调用 quark_auto_save 实现自动转存资源到夸克网盘 AstrBot 插件,调用 quark_auto_save 实现自动转存资源到夸克网盘
* [Telegram 媒体资源管理机器人](https://github.com/2beetle/tgbot)
一个功能丰富的 Telegram 机器人专注于媒体资源管理、Emby 集成、自动下载和夸克网盘资源管理。
## 打赏 ## 打赏
如果这个项目让你受益你可以无偿赠与我1块钱让我知道开源有价值。谢谢 如果这个项目让你受益你可以无偿赠与我1块钱让我知道开源有价值。谢谢

View File

@ -25,7 +25,6 @@ class Fnv:
default_task_config = { default_task_config = {
"auto_refresh": False, # 是否自动刷新媒体库 "auto_refresh": False, # 是否自动刷新媒体库
"mdb_name": "", # 飞牛影视目标媒体库名称 "mdb_name": "", # 飞牛影视目标媒体库名称
"mdb_dir_list": "", # 飞牛影视目标媒体库文件夹路径列表,多个用逗号分隔
} }
# 定义一个可选键的集合 # 定义一个可选键的集合
@ -85,17 +84,13 @@ class Fnv:
if not target_library_name: if not target_library_name:
print("飞牛影视: 未指定媒体库名称,跳过处理。") print("飞牛影视: 未指定媒体库名称,跳过处理。")
return return
target_library_mdb_dir_list = task_config.get("mdb_dir_list")
dir_list = []
if target_library_mdb_dir_list:
dir_list = [dir_path.strip() for dir_path in target_library_mdb_dir_list.split(",") if dir_path.strip()]
# 获取媒体库ID # 获取媒体库ID
library_id = self._get_library_id(target_library_name) library_id = self._get_library_id(target_library_name)
if library_id: if library_id:
# 获取ID成功后刷新该媒体库 # 获取ID成功后刷新该媒体库
self._refresh_library(library_id, dir_list=dir_list) self._refresh_library(library_id)
# ===================================================================== # =====================================================================
# Internal Methods (内部实现方法) # Internal Methods (内部实现方法)
@ -136,8 +131,7 @@ class Fnv:
try: try:
response = self.session.request( response = self.session.request(
method, url, headers=headers, params=params, method, url, headers=headers, params=params, json=data if data is not None else {}
data=self._serialize_data(data if data is not None else {})
) )
response.raise_for_status() response.raise_for_status()
response_data = response.json() response_data = response.json()
@ -212,7 +206,7 @@ class Fnv:
print(f"飞牛影视: 未在媒体库列表中找到名为 '{library_name}' 的媒体库 ❌") print(f"飞牛影视: 未在媒体库列表中找到名为 '{library_name}' 的媒体库 ❌")
return None return None
def _refresh_library(self, library_id: str, dir_list: list[str] = None) -> bool: def _refresh_library(self, library_id: str) -> bool:
""" """
根据给定的媒体库ID触发一次媒体库扫描/刷新 根据给定的媒体库ID触发一次媒体库扫描/刷新
""" """
@ -220,13 +214,9 @@ class Fnv:
print("飞牛影视: 必须先登录才能刷新媒体库。") print("飞牛影视: 必须先登录才能刷新媒体库。")
return False return False
if dir_list: print(f"飞牛影视: 正在为媒体库 {library_id} 发送刷新指令...")
print(f"飞牛影视: 正在为媒体库 {library_id} 发送部分目录{dir_list}刷新指令...")
else:
print(f"飞牛影视: 正在为媒体库 {library_id} 发送刷新指令...")
rel_url = self.API_MDB_SCAN.format(library_id) rel_url = self.API_MDB_SCAN.format(library_id)
request_body = {"dir_list": dir_list} if dir_list else {} response_json = self._make_request('post', rel_url, data={})
response_json = self._make_request('post', rel_url, data=request_body)
if not response_json: return False if not response_json: return False
@ -273,10 +263,8 @@ class Fnv:
nonce = str(random.randint(100000, 999999)) nonce = str(random.randint(100000, 999999))
timestamp = str(int(time.time() * 1000)) timestamp = str(int(time.time() * 1000))
serialized_str = "" if method.lower() == 'get' and params:
if method.lower() == 'get': serialized_str = urlencode(sorted(params.items()))
if params:
serialized_str = urlencode(sorted(params.items()))
else: else:
serialized_str = self._serialize_data(data) serialized_str = self._serialize_data(data)
body_hash = self._md5_hash(serialized_str) body_hash = self._md5_hash(serialized_str)
@ -304,7 +292,7 @@ class Fnv:
将请求体数据序列化为紧凑的JSON字符串 将请求体数据序列化为紧凑的JSON字符串
""" """
if isinstance(data, dict): if isinstance(data, dict):
return json.dumps(data, sort_keys=True, separators=(',', ':'), ensure_ascii=False) return json.dumps(data, sort_keys=True, separators=(',', ':'))
if isinstance(data, str): if isinstance(data, str):
return data return data
if not data: if not data:

View File

@ -23,7 +23,7 @@
}, },
"$SHOW_MAGIC": { "$SHOW_MAGIC": {
"pattern": "^(?!.*纯享)(?!.*加更)(?!.*抢先)(?!.*预告).*?第\\d+期.*", "pattern": "^(?!.*纯享)(?!.*加更)(?!.*抢先)(?!.*预告).*?第\\d+期.*",
"replace": "{TASKNAME}.{SXX}E{II}.第{E}期{PART}.{EXT}" "replace": "{II}.{TASKNAME}.{DATE}.第{E}期{PART}.{EXT}"
}, },
"$TV_MAGIC": { "$TV_MAGIC": {
"pattern": "", "pattern": "",