mirror of
https://github.com/Cp0204/quark-auto-save.git
synced 2026-01-18 19:00:44 +08:00
Compare commits
1 Commits
a4b0a7f220
...
6ed5d310c6
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6ed5d310c6 |
@ -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块钱,让我知道开源有价值。谢谢!
|
||||||
|
|||||||
@ -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:
|
||||||
|
|||||||
@ -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": "",
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user