新增 Docker 部署重命名

This commit is contained in:
EstrellaXD
2022-05-16 18:38:18 +08:00
parent 2b70e7e639
commit 1957d556ca
5 changed files with 130 additions and 0 deletions

12
Docker/Dockerfile Normal file
View 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
View 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
View File

@@ -0,0 +1 @@
qbittorrent_api==2022.4.30

View File

@@ -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
View File

@@ -0,0 +1 @@
qbittorrent_api==2022.4.30