tmdb-person/utils/scrape.py
2023-09-14 15:27:42 +08:00

70 lines
3.5 KiB
Python

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import shutil
import threading
import uuid
from utils.analyze import Analyze
from utils.tmdb import Tmdb
thread_lock = threading.Lock()
class Scrape(threading.Thread):
def __init__(self, log, dir_path, output, tmdb_token, language="zh-CN", thread_id=uuid.uuid4()):
threading.Thread.__init__(self)
self.thread_id = thread_id
self.log = log
self.dir_path = dir_path
self.output = output
self.tmdb_token = tmdb_token
self.language = language
def run(self):
self.log.logger.info("------------------- 开始获取演员元数据及海报:{0} -------------------".format(self.thread_id))
__file_paths = []
self.log.logger.info("当前执行元数据刮削识别的根文件夹:{0}".format(self.dir_path))
for folder in os.listdir(self.dir_path):
__folder2 = os.path.join(self.dir_path, folder)
# 判断是否文件夹
if os.path.isdir(__folder2):
for nfo_file in os.listdir(__folder2):
__child_file_path = os.path.join(__folder2, nfo_file)
if ".nfo" in os.path.basename(__child_file_path):
__file_paths.append(__child_file_path)
elif os.path.isfile(__folder2):
__file_name = os.path.basename(__folder2)
if ".nfo" in __file_name:
__file_paths.append(__folder2)
for __file_path in __file_paths:
self.log.logger.info("开始处理元数据刮削识别:{0}".format(__file_path))
# __file_path = "example/神出鬼没 (2023) - 2160p.nfo"
__nfo_data = Analyze(file_path=__file_path).analyze()
for __actor in __nfo_data["actors"]:
self.log.logger.info("当前解析的演员信息: {0}".format(__actor))
if "tmdbid" in __actor.keys():
__tmdbid = __actor["tmdbid"]
__actor_name = __actor["name"]
__name = __actor_name[0].lower()
__full_actor_name = __actor_name + "-tmdb-" + __tmdbid
__path_dir = os.path.join(self.output, __name, __full_actor_name)
thread_lock.acquire()
if not os.path.exists(__path_dir):
os.makedirs(__path_dir)
thread_lock.release()
# 如果存在元数据则不再进行刮削
if "person.nfo" not in os.listdir(__path_dir):
Tmdb(log=self.log, tmdb_id=__tmdbid, actor_path=__path_dir, tmdb_token=self.tmdb_token,
language=self.language).create_actor_nfo()
else:
self.log.logger.info("当前路径已存在person.nfo文件, 跳过刮削:{0}".format(__path_dir))
# 如果存在海报则不再进行刮削
if "folder.jpg" not in os.listdir(__path_dir):
Tmdb(log=self.log, tmdb_id=__tmdbid, actor_path=__path_dir, tmdb_token=self.tmdb_token,
language=self.language).get_actor_image()
else:
self.log.logger.info("当前路径已存在folder.jpg文件, 跳过刮削:{0}".format(__path_dir))
# 移动完成刮削的nfo文件到complete文件夹
shutil.move(__file_path, "complete/")
self.log.logger.info("------------------- 结束获取演员元数据及海报:{0} -------------------".format(self.thread_id))