mirror of
https://github.com/EstrellaXD/Auto_Bangumi.git
synced 2026-04-23 18:11:37 +08:00
新增 Docker 部署重命名
This commit is contained in:
12
Docker/Dockerfile
Normal file
12
Docker/Dockerfile
Normal file
@@ -0,0 +1,12 @@
|
||||
# syntax=docker/dockerfile:1
|
||||
|
||||
FROM python:3.10-slim-buster
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
COPY requirements.txt requirements.txt
|
||||
RUN pip3 install -r requirements.txt
|
||||
|
||||
COPY . .
|
||||
|
||||
CMD [ "python3", "rename_qb.py"]
|
||||
103
Docker/rename_qb.py
Normal file
103
Docker/rename_qb.py
Normal file
@@ -0,0 +1,103 @@
|
||||
import argparse
|
||||
import re
|
||||
import io
|
||||
import sys
|
||||
import qbittorrentapi
|
||||
from os import environ
|
||||
import time
|
||||
|
||||
host_ip = environ['HOST']
|
||||
user_name = environ['USER']
|
||||
password = environ['PASSWORD']
|
||||
method = environ['METHOD']
|
||||
delay_time = environ['TIME']
|
||||
|
||||
# Episode Regular Expression Matching Rules
|
||||
episode_rules = [r'(.*)\[(\d{1,3}|\d{1,3}\.\d{1,2})(?:v\d{1,2})?(?:END)?\](.*)',
|
||||
r'(.*)\[E(\d{1,3}|\d{1,3}\.\d{1,2})(?:v\d{1,2})?(?:END)?\](.*)',
|
||||
r'(.*)\[第(\d*\.*\d*)话(?:END)?\](.*)',
|
||||
r'(.*)\[第(\d*\.*\d*)話(?:END)?\](.*)',
|
||||
r'(.*)第(\d*\.*\d*)话(?:END)?(.*)',
|
||||
r'(.*)第(\d*\.*\d*)話(?:END)?(.*)',
|
||||
r'(.*)- (\d{1,3}|\d{1,3}\.\d{1,2})(?:v\d{1,2})?(?:END)? (.*)']
|
||||
# Suffixs of files we are going to rename
|
||||
suffixs = ['mp4', 'mkv', 'avi', 'mov', 'flv', 'rmvb', 'ass', 'idx']
|
||||
sys.stdout = io.TextIOWrapper(buffer=sys.stdout.buffer, encoding='utf8')
|
||||
parser = argparse.ArgumentParser(description='Regular Expression Match')
|
||||
parser.add_argument('--hash', default='',
|
||||
help='The torrent Hash value.')
|
||||
args = parser.parse_args()
|
||||
|
||||
|
||||
class QbittorrentRename:
|
||||
def __init__(self, rename_method):
|
||||
self.qbt_client = qbittorrentapi.Client(host=host_ip, username=user_name, password=password)
|
||||
try:
|
||||
self.qbt_client.auth_log_in()
|
||||
except qbittorrentapi.LoginFailed as e:
|
||||
print(e)
|
||||
self.recent_info = self.qbt_client.torrents_info(status_filter='completed')
|
||||
self.hash = None
|
||||
self.name = None
|
||||
self.new_name = None
|
||||
self.count = 0
|
||||
self.rename_count = 0
|
||||
self.torrent_count = len(self.recent_info)
|
||||
self.method = rename_method
|
||||
|
||||
def rename_normal(self, idx):
|
||||
self.name = self.recent_info[idx].name
|
||||
file_name = self.name
|
||||
for rule in episode_rules:
|
||||
matchObj = re.match(rule, file_name, re.I)
|
||||
if matchObj is not None:
|
||||
self.new_name = f'{matchObj.group(1)} E{matchObj.group(2)} {matchObj.group(3)}'
|
||||
|
||||
def rename_pn(self, idx):
|
||||
self.name = self.recent_info[idx].name
|
||||
n = re.split(r'\[|\]', self.name)
|
||||
file_name = self.name.replace(f'[{n[1]}]', '')
|
||||
for rule in episode_rules:
|
||||
matchObj = re.match(rule, file_name, re.I)
|
||||
if matchObj is not None:
|
||||
self.new_name = re.sub(r'\[|\]', '', f'{matchObj.group(1)} E{matchObj.group(2)}.{n[-1]}')
|
||||
|
||||
def rename_hash(self, torrent_hash):
|
||||
self.hash = torrent_hash
|
||||
try:
|
||||
self.qbt_client.torrents_rename_file(torrent_hash=self.hash, old_path=self.name, new_path=self.new_name)
|
||||
self.count += 1
|
||||
print(f'{self.name} >> {self.new_name}')
|
||||
except:
|
||||
return
|
||||
|
||||
def rename_app(self):
|
||||
if self.method not in ['pn', 'normal', 'hash']:
|
||||
print('error method')
|
||||
elif self.method == 'normal':
|
||||
for i in range(0, self.torrent_count + 1):
|
||||
try:
|
||||
self.rename_normal(i)
|
||||
except:
|
||||
sys.stdout.write(f"-----已完成对{i + 1}个文件的检查,已对其中{self.count}个文件进行重命名-----" + '\n')
|
||||
sys.stdout.write("------------------------完成------------------------" + '\n')
|
||||
sys.stdout.flush()
|
||||
elif self.method == 'pn':
|
||||
for i in range(0, self.torrent_count + 1):
|
||||
try:
|
||||
self.rename_pn(i)
|
||||
except:
|
||||
sys.stdout.write(f"-----已完成对{i + 1}个文件的检查,已对其中{self.count}个文件进行重命名-----" + '\n')
|
||||
sys.stdout.write("------------------------完成------------------------" + '\n')
|
||||
sys.stdout.flush()
|
||||
elif self.method == 'hash':
|
||||
self.rename_hash(args.hash)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.stdout.write('Program start.' + '\n')
|
||||
sys.stdout.flush()
|
||||
while True:
|
||||
rename = QbittorrentRename(method)
|
||||
rename.rename_app()
|
||||
time.sleep(float(delay_time))
|
||||
1
Docker/requirements.txt
Normal file
1
Docker/requirements.txt
Normal file
@@ -0,0 +1 @@
|
||||
qbittorrent_api==2022.4.30
|
||||
13
README.md
13
README.md
@@ -55,5 +55,18 @@ hash = $1
|
||||
```
|
||||
QB 中调用该脚本并且引入 **%I** 属性
|
||||
|
||||
## Docker 部署
|
||||
可以使用 Docker 部署重命名应用:
|
||||
```shell
|
||||
docker run -d \
|
||||
--name=Bangumi_rename \
|
||||
-e HOST=192.168.31.10:8181 \
|
||||
-e USER=admin \
|
||||
-e PASSWORD=adminadmin \
|
||||
-e METHOD=pn \
|
||||
-e TIME=1800 \
|
||||
estrellaxd/bangumi_rename_qb:latest
|
||||
```
|
||||
|
||||
# 声明
|
||||
本项目的自动改名规则根据 [miracleyoo/anime_renamer](https://github.com/miracleyoo/anime_renamer) 项目
|
||||
|
||||
1
requirements.txt
Normal file
1
requirements.txt
Normal file
@@ -0,0 +1 @@
|
||||
qbittorrent_api==2022.4.30
|
||||
Reference in New Issue
Block a user