Merge pull request #213 from 68cdrBxM8YdoJ/dev-config-manager
Create config.py
This commit is contained in:
@@ -1,39 +1,7 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
import requests
|
import requests
|
||||||
from configparser import ConfigParser
|
|
||||||
import os
|
|
||||||
import re
|
|
||||||
import time
|
|
||||||
import sys
|
|
||||||
from lxml import etree
|
from lxml import etree
|
||||||
import sys
|
|
||||||
import io
|
|
||||||
# sys.stdout = io.TextIOWrapper(sys.stdout.buffer, errors = 'replace', line_buffering = True)
|
|
||||||
# sys.setdefaultencoding('utf-8')
|
|
||||||
|
|
||||||
config_file = 'config.ini'
|
import config
|
||||||
config = ConfigParser()
|
|
||||||
|
|
||||||
if os.path.exists(config_file):
|
|
||||||
try:
|
|
||||||
config.read(config_file, encoding='UTF-8')
|
|
||||||
except Exception as e:
|
|
||||||
print('[-]'+e)
|
|
||||||
print('[-]Config.ini read failed! Please use the offical file!')
|
|
||||||
|
|
||||||
|
|
||||||
def get_network_settings():
|
|
||||||
try:
|
|
||||||
proxy = config["proxy"]["proxy"]
|
|
||||||
timeout = int(config["proxy"]["timeout"])
|
|
||||||
retry_count = int(config["proxy"]["retry"])
|
|
||||||
assert timeout > 0
|
|
||||||
assert retry_count > 0
|
|
||||||
except:
|
|
||||||
raise ValueError("[-]Proxy config error! Please check the config.")
|
|
||||||
return proxy, timeout, retry_count
|
|
||||||
|
|
||||||
|
|
||||||
def get_data_state(data: dict) -> bool: # 元数据获取失败检测
|
def get_data_state(data: dict) -> bool: # 元数据获取失败检测
|
||||||
@@ -45,27 +13,18 @@ def get_data_state(data: dict) -> bool: # 元数据获取失败检测
|
|||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def ReadMediaWarehouse():
|
|
||||||
return config['media']['media_warehouse']
|
|
||||||
|
|
||||||
def UpdateCheckSwitch():
|
|
||||||
check=str(config['update']['update_check'])
|
|
||||||
if check == '1':
|
|
||||||
return '1'
|
|
||||||
elif check == '0':
|
|
||||||
return '0'
|
|
||||||
elif check == '':
|
|
||||||
return '0'
|
|
||||||
|
|
||||||
def getXpathSingle(htmlcode,xpath):
|
def getXpathSingle(htmlcode,xpath):
|
||||||
html = etree.fromstring(htmlcode, etree.HTMLParser())
|
html = etree.fromstring(htmlcode, etree.HTMLParser())
|
||||||
result1 = str(html.xpath(xpath)).strip(" ['']")
|
result1 = str(html.xpath(xpath)).strip(" ['']")
|
||||||
return result1
|
return result1
|
||||||
|
|
||||||
def get_html(url,cookies = None):#网页请求核心
|
|
||||||
proxy, timeout, retry_count = get_network_settings()
|
# 网页请求核心
|
||||||
i = 0
|
def get_html(url, cookies=None):
|
||||||
while i < retry_count:
|
proxy, timeout, retry_count = config.Config().proxy()
|
||||||
|
|
||||||
|
for i in range(retry_count):
|
||||||
try:
|
try:
|
||||||
if not proxy == '':
|
if not proxy == '':
|
||||||
proxies = {"http": "http://" + proxy,"https": "https://" + proxy}
|
proxies = {"http": "http://" + proxy,"https": "https://" + proxy}
|
||||||
@@ -78,14 +37,15 @@ def get_html(url,cookies = None):#网页请求核心
|
|||||||
getweb = requests.get(str(url), headers=headers, timeout=timeout, cookies=cookies)
|
getweb = requests.get(str(url), headers=headers, timeout=timeout, cookies=cookies)
|
||||||
getweb.encoding = 'utf-8'
|
getweb.encoding = 'utf-8'
|
||||||
return getweb.text
|
return getweb.text
|
||||||
except:
|
except requests.exceptions.ProxyError:
|
||||||
i += 1
|
print("[-]Connect retry {}/{}".format(i + 1, retry_count))
|
||||||
print('[-]Connect retry '+str(i)+'/'+str(retry_count))
|
|
||||||
print('[-]Connect Failed! Please check your Proxy or Network!')
|
print('[-]Connect Failed! Please check your Proxy or Network!')
|
||||||
|
input("Press ENTER to exit!")
|
||||||
|
exit()
|
||||||
|
|
||||||
|
|
||||||
def post_html(url: str, query: dict) -> requests.Response:
|
def post_html(url: str, query: dict) -> requests.Response:
|
||||||
proxy, timeout, retry_count = get_network_settings()
|
proxy, timeout, retry_count = config.Config().proxy()
|
||||||
|
|
||||||
if proxy:
|
if proxy:
|
||||||
proxies = {"http": "http://" + proxy, "https": "https://" + proxy}
|
proxies = {"http": "http://" + proxy, "https": "https://" + proxy}
|
||||||
@@ -99,3 +59,5 @@ def post_html(url: str, query: dict) -> requests.Response:
|
|||||||
except requests.exceptions.ProxyError:
|
except requests.exceptions.ProxyError:
|
||||||
print("[-]Connect retry {}/{}".format(i+1, retry_count))
|
print("[-]Connect retry {}/{}".format(i+1, retry_count))
|
||||||
print("[-]Connect Failed! Please check your Proxy or Network!")
|
print("[-]Connect Failed! Please check your Proxy or Network!")
|
||||||
|
input("Press ENTER to exit!")
|
||||||
|
exit()
|
||||||
|
|||||||
@@ -1,33 +1,20 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
import glob
|
|
||||||
import os
|
|
||||||
import time
|
|
||||||
import re
|
|
||||||
from ADC_function import *
|
|
||||||
from core import *
|
|
||||||
import json
|
|
||||||
import shutil
|
|
||||||
from configparser import ConfigParser
|
|
||||||
import argparse
|
import argparse
|
||||||
|
from core import *
|
||||||
|
|
||||||
|
|
||||||
def check_update(current_version):
|
def check_update(current_version):
|
||||||
if UpdateCheckSwitch() == "1":
|
data = json.loads(get_html("https://api.github.com/repos/yoshiko2/AV_Data_Capture/releases/latest"))
|
||||||
data = json.loads(get_html("https://api.github.com/repos/yoshiko2/AV_Data_Capture/releases/latest"))
|
|
||||||
|
|
||||||
remote_version = data["tag_name"]
|
remote_version = data["tag_name"]
|
||||||
download_url = data["html_url"]
|
download_url = data["html_url"]
|
||||||
|
|
||||||
|
if current_version != remote_version:
|
||||||
|
line1 = "* New update " + remote_version + " *"
|
||||||
|
print("[*]" + line1.center(54))
|
||||||
|
print("[*]" + "↓ Download ↓".center(54))
|
||||||
|
print("[*] " + download_url)
|
||||||
|
print("[*]======================================================")
|
||||||
|
|
||||||
if current_version != remote_version:
|
|
||||||
line1 = "* New update " + remote_version + " *"
|
|
||||||
print("[*]" + line1.center(54))
|
|
||||||
print("[*]" + "↓ Download ↓".center(54))
|
|
||||||
print("[*] " + download_url)
|
|
||||||
print("[*]======================================================")
|
|
||||||
else:
|
|
||||||
print("[+]Update Check disabled!")
|
|
||||||
|
|
||||||
def argparse_function(switch):
|
def argparse_function(switch):
|
||||||
parser = argparse.ArgumentParser()
|
parser = argparse.ArgumentParser()
|
||||||
@@ -59,7 +46,7 @@ def movie_lists(root, escape_folder):
|
|||||||
return total
|
return total
|
||||||
|
|
||||||
|
|
||||||
def CreatFailedFolder(failed_folder):
|
def create_failed_folder(failed_folder):
|
||||||
if not os.path.exists(failed_folder + '/'): # 新建failed文件夹
|
if not os.path.exists(failed_folder + '/'): # 新建failed文件夹
|
||||||
try:
|
try:
|
||||||
os.makedirs(failed_folder + '/')
|
os.makedirs(failed_folder + '/')
|
||||||
@@ -101,22 +88,21 @@ def getNumber(filepath,absolute_path = False):
|
|||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
version = '3.2'
|
version = '3.2'
|
||||||
|
|
||||||
config_file = argparse_function(2)
|
config_file = argparse_function(2)
|
||||||
config = ConfigParser()
|
conf = config.Config(path=config_file)
|
||||||
config.read(argparse_function(2), encoding='UTF-8')
|
|
||||||
success_folder = config['common']['success_output_folder']
|
|
||||||
failed_folder = config['common']['failed_output_folder'] # 失败输出目录
|
|
||||||
escape_folder = config['escape']['folders'] # 多级目录刮削需要排除的目录
|
|
||||||
escape_folder = re.split('[,,]', escape_folder)
|
|
||||||
version_print = 'Version ' + version
|
version_print = 'Version ' + version
|
||||||
print('[*]================== AV Data Capture ===================')
|
print('[*]================== AV Data Capture ===================')
|
||||||
print('[*]' + version_print.center(54))
|
print('[*]' + version_print.center(54))
|
||||||
print('[*]======================================================')
|
print('[*]======================================================')
|
||||||
|
|
||||||
check_update(version)
|
if conf.update_check():
|
||||||
CreatFailedFolder(failed_folder)
|
check_update(version)
|
||||||
|
|
||||||
|
create_failed_folder(conf.failed_folder())
|
||||||
os.chdir(os.getcwd())
|
os.chdir(os.getcwd())
|
||||||
movie_list = movie_lists('.', escape_folder)
|
movie_list = movie_lists(".", re.split("[,,]", conf.escape_folder()))
|
||||||
|
|
||||||
#========== 野鸡番号拖动 ==========
|
#========== 野鸡番号拖动 ==========
|
||||||
number_argparse = argparse_function(1)
|
number_argparse = argparse_function(1)
|
||||||
@@ -124,8 +110,8 @@ if __name__ == '__main__':
|
|||||||
print("[!]Making Data for [" + number_argparse + "], the number is [" + getNumber(number_argparse,absolute_path = True) + "]")
|
print("[!]Making Data for [" + number_argparse + "], the number is [" + getNumber(number_argparse,absolute_path = True) + "]")
|
||||||
core_main(number_argparse, getNumber(number_argparse,absolute_path = True))
|
core_main(number_argparse, getNumber(number_argparse,absolute_path = True))
|
||||||
print("[*]======================================================")
|
print("[*]======================================================")
|
||||||
CEF(success_folder)
|
CEF(conf.success_folder())
|
||||||
CEF(failed_folder)
|
CEF(conf.failed_folder())
|
||||||
print("[+]All finished!!!")
|
print("[+]All finished!!!")
|
||||||
input("[+][+]Press enter key exit, you can check the error messge before you exit.")
|
input("[+][+]Press enter key exit, you can check the error messge before you exit.")
|
||||||
os._exit(0)
|
os._exit(0)
|
||||||
@@ -134,7 +120,7 @@ if __name__ == '__main__':
|
|||||||
count = 0
|
count = 0
|
||||||
count_all = str(len(movie_list))
|
count_all = str(len(movie_list))
|
||||||
print('[+]Find', count_all, 'movies')
|
print('[+]Find', count_all, 'movies')
|
||||||
if config['common']['soft_link'] == '1':
|
if conf.soft_link():
|
||||||
print('[!] --- Soft link mode is ENABLE! ----')
|
print('[!] --- Soft link mode is ENABLE! ----')
|
||||||
for i in movie_list: # 遍历电影列表 交给core处理
|
for i in movie_list: # 遍历电影列表 交给core处理
|
||||||
count = count + 1
|
count = count + 1
|
||||||
@@ -145,24 +131,24 @@ if __name__ == '__main__':
|
|||||||
# print("[*]======================================================")
|
# print("[*]======================================================")
|
||||||
try:
|
try:
|
||||||
print("[!]Making Data for [" + i + "], the number is [" + getNumber(i) + "]")
|
print("[!]Making Data for [" + i + "], the number is [" + getNumber(i) + "]")
|
||||||
core_main(i, getNumber(i), config_file=config_file)
|
core_main(i, getNumber(i), conf)
|
||||||
print("[*]======================================================")
|
print("[*]======================================================")
|
||||||
except Exception as e: # 番号提取异常
|
except Exception as e: # 番号提取异常
|
||||||
print('[-]' + i + ' ERROR :')
|
print('[-]' + i + ' ERROR :')
|
||||||
print('[-]',e)
|
print('[-]',e)
|
||||||
if config['common']['soft_link'] == '1':
|
if conf.soft_link():
|
||||||
print('[-]Link', i, 'to failed folder')
|
print('[-]Link', i, 'to failed folder')
|
||||||
os.symlink(i, str(os.getcwd()) + '/' + failed_folder + '/')
|
os.symlink(i, str(os.getcwd()) + '/' + conf.failed_folder() + '/')
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
print('[-]Move ' + i + ' to failed folder')
|
print('[-]Move ' + i + ' to failed folder')
|
||||||
shutil.move(i, str(os.getcwd()) + '/' + failed_folder + '/')
|
shutil.move(i, str(os.getcwd()) + '/' + conf.failed_folder() + '/')
|
||||||
except Exception as e2:
|
except Exception as e2:
|
||||||
print('[!]', e2)
|
print('[!]', e2)
|
||||||
continue
|
continue
|
||||||
|
|
||||||
CEF(success_folder)
|
CEF(conf.success_folder())
|
||||||
CEF(failed_folder)
|
CEF(conf.failed_folder())
|
||||||
print("[+]All finished!!!")
|
print("[+]All finished!!!")
|
||||||
if argparse_function(3) == True:
|
if argparse_function(3) == True:
|
||||||
os._exit(0)
|
os._exit(0)
|
||||||
|
|||||||
125
config.py
Normal file
125
config.py
Normal file
@@ -0,0 +1,125 @@
|
|||||||
|
import os
|
||||||
|
import configparser
|
||||||
|
|
||||||
|
|
||||||
|
class Config:
|
||||||
|
def __init__(self, path: str = "config.ini"):
|
||||||
|
if os.path.exists(path):
|
||||||
|
self.conf = configparser.ConfigParser()
|
||||||
|
self.conf.read(path, encoding="utf-8")
|
||||||
|
else:
|
||||||
|
print("[-] Config file not found! Use the default settings")
|
||||||
|
self.conf = self._default_config()
|
||||||
|
|
||||||
|
def main_mode(self) -> str:
|
||||||
|
try:
|
||||||
|
return self.conf.getint("common", "main_mode")
|
||||||
|
except ValueError:
|
||||||
|
self._exit("common:main_mode")
|
||||||
|
|
||||||
|
def failed_folder(self) -> str:
|
||||||
|
return self.conf.get("common", "failed_output_folder")
|
||||||
|
|
||||||
|
def success_folder(self) -> str:
|
||||||
|
return self.conf.get("common", "success_output_folder")
|
||||||
|
|
||||||
|
def soft_link(self) -> bool:
|
||||||
|
return self.conf.getboolean("common", "soft_link")
|
||||||
|
|
||||||
|
def proxy(self) -> [str, int, int]:
|
||||||
|
try:
|
||||||
|
sec = "proxy"
|
||||||
|
proxy = self.conf.get(sec, "proxy")
|
||||||
|
timeout = self.conf.getint(sec, "timeout")
|
||||||
|
retry = self.conf.getint(sec, "retry")
|
||||||
|
|
||||||
|
return proxy, timeout, retry
|
||||||
|
except ValueError:
|
||||||
|
self._exit("common")
|
||||||
|
|
||||||
|
def naming_rule(self) -> str:
|
||||||
|
return self.conf.get("Name_Rule", "naming_rule")
|
||||||
|
|
||||||
|
def location_rule(self) -> str:
|
||||||
|
return self.conf.get("Name_Rule", "location_rule")
|
||||||
|
|
||||||
|
def update_check(self) -> bool:
|
||||||
|
try:
|
||||||
|
return self.conf.getboolean("update", "update_check")
|
||||||
|
except ValueError:
|
||||||
|
self._exit("update:update_check")
|
||||||
|
|
||||||
|
def sources(self) -> str:
|
||||||
|
return self.conf.get("priority", "website")
|
||||||
|
|
||||||
|
def escape_literals(self) -> str:
|
||||||
|
return self.conf.get("escape", "literals")
|
||||||
|
|
||||||
|
def escape_folder(self) -> str:
|
||||||
|
return self.conf.get("escape", "folders")
|
||||||
|
|
||||||
|
def debug(self) -> bool:
|
||||||
|
return self.conf.getboolean("debug_mode", "switch")
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _exit(sec: str) -> None:
|
||||||
|
print("[-] Read config error! Please check the {} section in config.ini", sec)
|
||||||
|
input("[-] Press ENTER key to exit.")
|
||||||
|
exit()
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _default_config() -> configparser.ConfigParser:
|
||||||
|
conf = configparser.ConfigParser()
|
||||||
|
|
||||||
|
sec1 = "common"
|
||||||
|
conf.add_section(sec1)
|
||||||
|
conf.set(sec1, "main_mode", "1")
|
||||||
|
conf.set(sec1, "failed_output_folder", "failed")
|
||||||
|
conf.set(sec1, "success_output_folder", "JAV_output")
|
||||||
|
conf.set(sec1, "soft_link", "0")
|
||||||
|
|
||||||
|
sec2 = "proxy"
|
||||||
|
conf.add_section(sec2)
|
||||||
|
conf.set(sec2, "proxy", "127.0.0.1:1080")
|
||||||
|
conf.set(sec2, "timeout", "10")
|
||||||
|
conf.set(sec2, "retry", "3")
|
||||||
|
|
||||||
|
sec3 = "Name_Rule"
|
||||||
|
conf.add_section(sec3)
|
||||||
|
conf.set(sec3, "location_rule", "actor + '/' + number")
|
||||||
|
conf.set(sec3, "naming_rule", "number + '-' + title")
|
||||||
|
|
||||||
|
sec4 = "update"
|
||||||
|
conf.add_section(sec4)
|
||||||
|
conf.set(sec4, "update_check", "1")
|
||||||
|
|
||||||
|
sec5 = "priority"
|
||||||
|
conf.add_section(sec5)
|
||||||
|
conf.set(sec5, "website", "javbus,javdb,fanza,xcity,mgstage,fc2,avsox,jav321,xcity")
|
||||||
|
|
||||||
|
sec6 = "escape"
|
||||||
|
conf.add_section(sec6)
|
||||||
|
conf.set(sec6, "literals", "\()/") # noqa
|
||||||
|
conf.set(sec6, "folders", "failed, JAV_output")
|
||||||
|
|
||||||
|
sec7 = "debug_mode"
|
||||||
|
conf.add_section(sec7)
|
||||||
|
conf.set(sec7, "switch", "0")
|
||||||
|
|
||||||
|
return conf
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
config = Config()
|
||||||
|
print(config.main_mode())
|
||||||
|
print(config.failed_folder())
|
||||||
|
print(config.success_folder())
|
||||||
|
print(config.soft_link())
|
||||||
|
print(config.proxy())
|
||||||
|
print(config.naming_rule())
|
||||||
|
print(config.location_rule())
|
||||||
|
print(config.update_check())
|
||||||
|
print(config.sources())
|
||||||
|
print(config.escape_literals())
|
||||||
|
print(config.escape_folder())
|
||||||
|
print(config.debug())
|
||||||
186
core.py
186
core.py
@@ -1,33 +1,25 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
import re
|
|
||||||
import os
|
|
||||||
import os.path
|
|
||||||
import shutil
|
|
||||||
from PIL import Image
|
|
||||||
import time
|
|
||||||
import json
|
import json
|
||||||
|
import os.path
|
||||||
|
import re
|
||||||
|
import shutil
|
||||||
|
|
||||||
|
from PIL import Image
|
||||||
from ADC_function import *
|
from ADC_function import *
|
||||||
from configparser import ConfigParser
|
|
||||||
import argparse
|
|
||||||
import requests
|
|
||||||
import random
|
|
||||||
# =========website========
|
# =========website========
|
||||||
import fc2fans_club
|
|
||||||
import mgstage
|
|
||||||
import avsox
|
import avsox
|
||||||
|
import fanza
|
||||||
|
import fc2fans_club
|
||||||
|
import jav321
|
||||||
import javbus
|
import javbus
|
||||||
import javdb
|
import javdb
|
||||||
import fanza
|
import mgstage
|
||||||
import jav321
|
|
||||||
import xcity
|
import xcity
|
||||||
|
|
||||||
# =====================本地文件处理===========================
|
|
||||||
|
|
||||||
def escapePath(path, Config): # Remove escape literals
|
def escape_path(path, escape_literals: str): # Remove escape literals
|
||||||
escapeLiterals = Config['escape']['literals']
|
|
||||||
backslash = '\\'
|
backslash = '\\'
|
||||||
for literal in escapeLiterals:
|
for literal in escape_literals:
|
||||||
path = path.replace(backslash + literal, '')
|
path = path.replace(backslash + literal, '')
|
||||||
return path
|
return path
|
||||||
|
|
||||||
@@ -47,7 +39,7 @@ def CreatFailedFolder(failed_folder):
|
|||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
def getDataFromJSON(file_number, filepath, failed_folder, sources): # 从JSON返回元数据
|
def get_data_from_json(file_number, filepath, conf: config.Config): # 从JSON返回元数据
|
||||||
"""
|
"""
|
||||||
iterate through all services and fetch the data
|
iterate through all services and fetch the data
|
||||||
"""
|
"""
|
||||||
@@ -64,7 +56,7 @@ def getDataFromJSON(file_number, filepath, failed_folder, sources): # 从JSON
|
|||||||
}
|
}
|
||||||
|
|
||||||
# default fetch order list, from the begining to the end
|
# default fetch order list, from the begining to the end
|
||||||
sources = sources.split(',')
|
sources = conf.sources().split(',')
|
||||||
|
|
||||||
# if the input file name matches centain rules,
|
# if the input file name matches centain rules,
|
||||||
# move some web service to the begining of the list
|
# move some web service to the begining of the list
|
||||||
@@ -105,10 +97,9 @@ def getDataFromJSON(file_number, filepath, failed_folder, sources): # 从JSON
|
|||||||
tag = str(json_data['tag']).strip("[ ]").replace("'", '').replace(" ", '').split(',') # 字符串转列表 @
|
tag = str(json_data['tag']).strip("[ ]").replace("'", '').replace(" ", '').split(',') # 字符串转列表 @
|
||||||
actor = str(actor_list).strip("[ ]").replace("'", '').replace(" ", '')
|
actor = str(actor_list).strip("[ ]").replace("'", '').replace(" ", '')
|
||||||
|
|
||||||
|
|
||||||
if title == '' or number == '':
|
if title == '' or number == '':
|
||||||
print('[-]Movie Data not found!')
|
print('[-]Movie Data not found!')
|
||||||
moveFailedFolder(filepath, failed_folder)
|
moveFailedFolder(filepath, conf.failed_folder())
|
||||||
return
|
return
|
||||||
|
|
||||||
# if imagecut == '3':
|
# if imagecut == '3':
|
||||||
@@ -130,13 +121,12 @@ def getDataFromJSON(file_number, filepath, failed_folder, sources): # 从JSON
|
|||||||
cover_small = tmpArr[0].strip('\"').strip('\'')
|
cover_small = tmpArr[0].strip('\"').strip('\'')
|
||||||
# ====================处理异常字符 END================== #\/:*?"<>|
|
# ====================处理异常字符 END================== #\/:*?"<>|
|
||||||
|
|
||||||
naming_rule = eval(config['Name_Rule']['naming_rule'])
|
location_rule = eval(conf.location_rule())
|
||||||
location_rule = eval(config['Name_Rule']['location_rule'])
|
if 'actor' in conf.location_rule() and len(actor) > 100:
|
||||||
if 'actor' in config['Name_Rule']['location_rule'] and len(actor) > 100:
|
print(conf.location_rule())
|
||||||
print(config['Name_Rule']['location_rule'])
|
location_rule = eval(conf.location_rule().replace("actor","'多人作品'"))
|
||||||
location_rule = eval(config['Name_Rule']['location_rule'].replace("actor","'多人作品'"))
|
if 'title' in conf.location_rule() and len(title) > 100:
|
||||||
if 'title' in config['Name_Rule']['location_rule'] and len(title) > 100:
|
location_rule = eval(conf.location_rule().replace("title",'number'))
|
||||||
location_rule = eval(config['Name_Rule']['location_rule'].replace("title",'number'))
|
|
||||||
|
|
||||||
# 返回处理后的json_data
|
# 返回处理后的json_data
|
||||||
json_data['title'] = title
|
json_data['title'] = title
|
||||||
@@ -144,7 +134,7 @@ def getDataFromJSON(file_number, filepath, failed_folder, sources): # 从JSON
|
|||||||
json_data['release'] = release
|
json_data['release'] = release
|
||||||
json_data['cover_small'] = cover_small
|
json_data['cover_small'] = cover_small
|
||||||
json_data['tag'] = tag
|
json_data['tag'] = tag
|
||||||
json_data['naming_rule'] = naming_rule
|
json_data['naming_rule'] = eval(conf.naming_rule())
|
||||||
json_data['location_rule'] = location_rule
|
json_data['location_rule'] = location_rule
|
||||||
json_data['year'] = year
|
json_data['year'] = year
|
||||||
json_data['actor_list'] = actor_list
|
json_data['actor_list'] = actor_list
|
||||||
@@ -166,36 +156,36 @@ def get_info(json_data): # 返回json里的数据
|
|||||||
return title, studio, year, outline, runtime, director, actor_photo, release, number, cover, website
|
return title, studio, year, outline, runtime, director, actor_photo, release, number, cover, website
|
||||||
|
|
||||||
|
|
||||||
def smallCoverCheck(path, number, imagecut, cover_small, c_word, Config, filepath, failed_folder):
|
def small_cover_check(path, number, cover_small, c_word, conf: config.Config, filepath, failed_folder):
|
||||||
if imagecut == 3:
|
download_file_with_filename(cover_small, number + c_word + '-poster.jpg', path, conf, filepath, failed_folder)
|
||||||
DownloadFileWithFilename(cover_small, number + c_word + '-poster.jpg', path, Config, filepath, failed_folder)
|
print('[+]Image Downloaded! ' + path + '/' + number + c_word + '-poster.jpg')
|
||||||
print('[+]Image Downloaded! '+ path + '/' + number + c_word + '-poster.jpg')
|
|
||||||
|
|
||||||
|
|
||||||
def creatFolder(success_folder, location_rule, json_data, Config): # 创建文件夹
|
def create_folder(success_folder, location_rule, json_data, conf: config.Config): # 创建文件夹
|
||||||
title, studio, year, outline, runtime, director, actor_photo, release, number, cover, website= get_info(json_data)
|
title, studio, year, outline, runtime, director, actor_photo, release, number, cover, website= get_info(json_data)
|
||||||
if len(location_rule) > 240: # 新建成功输出文件夹
|
if len(location_rule) > 240: # 新建成功输出文件夹
|
||||||
path = success_folder + '/' + location_rule.replace("'actor'", "'manypeople'", 3).replace("actor","'manypeople'",3) # path为影片+元数据所在目录
|
path = success_folder + '/' + location_rule.replace("'actor'", "'manypeople'", 3).replace("actor","'manypeople'",3) # path为影片+元数据所在目录
|
||||||
else:
|
else:
|
||||||
path = success_folder + '/' + location_rule
|
path = success_folder + '/' + location_rule
|
||||||
if not os.path.exists(path):
|
if not os.path.exists(path):
|
||||||
path = escapePath(path, Config)
|
path = escape_path(path, conf.escape_literals())
|
||||||
try:
|
try:
|
||||||
os.makedirs(path)
|
os.makedirs(path)
|
||||||
except:
|
except:
|
||||||
path = success_folder + '/' + location_rule.replace('/[' + number + ']-' + title, "/number")
|
path = success_folder + '/' + location_rule.replace('/[' + number + ']-' + title, "/number")
|
||||||
path = escapePath(path, Config)
|
path = escape_path(path, conf.escape_literals())
|
||||||
|
|
||||||
os.makedirs(path)
|
os.makedirs(path)
|
||||||
return path
|
return path
|
||||||
|
|
||||||
|
|
||||||
# =====================资源下载部分===========================
|
# =====================资源下载部分===========================
|
||||||
def DownloadFileWithFilename(url, filename, path, Config, filepath, failed_folder): # path = examle:photo , video.in the Project Folder!
|
|
||||||
proxy, timeout, retry_count = get_network_settings()
|
|
||||||
i = 0
|
|
||||||
|
|
||||||
while i < retry_count:
|
# path = examle:photo , video.in the Project Folder!
|
||||||
|
def download_file_with_filename(url, filename, path, conf: config.Config, filepath, failed_folder):
|
||||||
|
proxy, timeout, retry_count = conf.proxy()
|
||||||
|
|
||||||
|
for i in range(retry_count):
|
||||||
try:
|
try:
|
||||||
if not proxy == '':
|
if not proxy == '':
|
||||||
if not os.path.exists(path):
|
if not os.path.exists(path):
|
||||||
@@ -239,16 +229,17 @@ def DownloadFileWithFilename(url, filename, path, Config, filepath, failed_folde
|
|||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
def imageDownload(cover, number, c_word, path, multi_part, Config, filepath, failed_folder): # 封面是否下载成功,否则移动到failed
|
# 封面是否下载成功,否则移动到failed
|
||||||
if DownloadFileWithFilename(cover, number + c_word + '-fanart.jpg', path, Config, filepath,failed_folder) == 'failed':
|
def image_download(cover, number, c_word, path, conf: config.Config, filepath, failed_folder):
|
||||||
|
if download_file_with_filename(cover, number + c_word + '-fanart.jpg', path, conf, filepath, failed_folder) == 'failed':
|
||||||
moveFailedFolder(filepath, failed_folder)
|
moveFailedFolder(filepath, failed_folder)
|
||||||
return
|
return
|
||||||
i = 1
|
|
||||||
while i <= int(config['proxy']['retry']):
|
_proxy, _timeout, retry = conf.proxy()
|
||||||
|
for i in range(retry):
|
||||||
if os.path.getsize(path + '/' + number + c_word + '-fanart.jpg') == 0:
|
if os.path.getsize(path + '/' + number + c_word + '-fanart.jpg') == 0:
|
||||||
print('[!]Image Download Failed! Trying again. [' + config['proxy']['retry'] + '/3]')
|
print('[!]Image Download Failed! Trying again. [{}/3]', i + 1)
|
||||||
DownloadFileWithFilename(cover, number + c_word + '-fanart.jpg', path, Config, filepath, failed_folder)
|
download_file_with_filename(cover, number + c_word + '-fanart.jpg', path, conf, filepath, failed_folder)
|
||||||
i = i + 1
|
|
||||||
continue
|
continue
|
||||||
else:
|
else:
|
||||||
break
|
break
|
||||||
@@ -339,10 +330,12 @@ def cutImage(imagecut, path, number, c_word):
|
|||||||
print('[+]Image Copyed! ' + path + '/' + number + c_word + '-poster.jpg')
|
print('[+]Image Copyed! ' + path + '/' + number + c_word + '-poster.jpg')
|
||||||
|
|
||||||
|
|
||||||
def pasteFileToFolder(filepath, path, number, c_word): # 文件路径,番号,后缀,要移动至的位置
|
def paste_file_to_folder(filepath, path, number, c_word, conf: config.Config): # 文件路径,番号,后缀,要移动至的位置
|
||||||
houzhui = str(re.search('[.](AVI|RMVB|WMV|MOV|MP4|MKV|FLV|TS|WEBM|avi|rmvb|wmv|mov|mp4|mkv|flv|ts|webm)$', filepath).group())
|
houzhui = str(re.search('[.](AVI|RMVB|WMV|MOV|MP4|MKV|FLV|TS|WEBM|avi|rmvb|wmv|mov|mp4|mkv|flv|ts|webm)$', filepath).group())
|
||||||
|
|
||||||
try:
|
try:
|
||||||
if config['common']['soft_link'] == '1': # 如果soft_link=1 使用软链接
|
# 如果soft_link=1 使用软链接
|
||||||
|
if conf.soft_link():
|
||||||
os.symlink(filepath, path + '/' + number + c_word + houzhui)
|
os.symlink(filepath, path + '/' + number + c_word + houzhui)
|
||||||
else:
|
else:
|
||||||
os.rename(filepath, path + '/' + number + c_word + houzhui)
|
os.rename(filepath, path + '/' + number + c_word + houzhui)
|
||||||
@@ -364,12 +357,13 @@ def pasteFileToFolder(filepath, path, number, c_word): # 文件路径,番号
|
|||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
def pasteFileToFolder_mode2(filepath, path, multi_part, number, part, c_word): # 文件路径,番号,后缀,要移动至的位置
|
def paste_file_to_folder_mode2(filepath, path, multi_part, number, part, c_word, conf): # 文件路径,番号,后缀,要移动至的位置
|
||||||
if multi_part == 1:
|
if multi_part == 1:
|
||||||
number += part # 这时number会被附加上CD1后缀
|
number += part # 这时number会被附加上CD1后缀
|
||||||
houzhui = str(re.search('[.](AVI|RMVB|WMV|MOV|MP4|MKV|FLV|TS|WEBM|avi|rmvb|wmv|mov|mp4|mkv|flv|ts|webm)$', filepath).group())
|
houzhui = str(re.search('[.](AVI|RMVB|WMV|MOV|MP4|MKV|FLV|TS|WEBM|avi|rmvb|wmv|mov|mp4|mkv|flv|ts|webm)$', filepath).group())
|
||||||
|
|
||||||
try:
|
try:
|
||||||
if config['common']['soft_link'] == '1':
|
if conf.soft_link():
|
||||||
os.symlink(filepath, path + '/' + number + part + c_word + houzhui)
|
os.symlink(filepath, path + '/' + number + part + c_word + houzhui)
|
||||||
else:
|
else:
|
||||||
os.rename(filepath, path + '/' + number + part + c_word + houzhui)
|
os.rename(filepath, path + '/' + number + part + c_word + houzhui)
|
||||||
@@ -403,43 +397,37 @@ def get_part(filepath, failed_folder):
|
|||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
def debug_mode(json_data):
|
def debug_print(data: json):
|
||||||
try:
|
try:
|
||||||
if config['debug_mode']['switch'] == '1':
|
print("[+] ---Debug info---")
|
||||||
print('[+] ---Debug info---')
|
for i, v in data.items():
|
||||||
for i, v in json_data.items():
|
if i == "outline":
|
||||||
if i == 'outline':
|
print("[+] -", i, " :", len(v), "characters")
|
||||||
print('[+] -', i, ' :', len(v), 'characters')
|
continue
|
||||||
continue
|
if i == "actor_photo" or i == "year":
|
||||||
if i == 'actor_photo' or i == 'year':
|
continue
|
||||||
continue
|
print("[+] -", "%-11s" % i, ":", v)
|
||||||
print('[+] -', "%-11s" % i, ':', v)
|
print("[+] ---Debug info---")
|
||||||
print('[+] ---Debug info---')
|
|
||||||
except:
|
except:
|
||||||
aaa = ''
|
pass
|
||||||
|
|
||||||
|
|
||||||
def core_main(file_path, number_th, config_file):
|
def core_main(file_path, number_th, conf: config.Config):
|
||||||
# =======================================================================初始化所需变量
|
# =======================================================================初始化所需变量
|
||||||
multi_part = 0
|
multi_part = 0
|
||||||
part = ''
|
part = ''
|
||||||
c_word = ''
|
c_word = ''
|
||||||
cn_sub = ''
|
cn_sub = ''
|
||||||
liuchu = ''
|
liuchu = ''
|
||||||
Config = ConfigParser()
|
|
||||||
Config.read(config_file, encoding='UTF-8')
|
|
||||||
program_mode = Config['common']['main_mode'] # 运行模式
|
|
||||||
failed_folder = Config['common']['failed_output_folder'] # 失败输出目录
|
|
||||||
success_folder = Config['common']['success_output_folder'] # 成功输出目录
|
|
||||||
sources = Config['priority']['website'] # 网站优先级
|
|
||||||
filepath = file_path # 影片的路径
|
filepath = file_path # 影片的路径
|
||||||
number = number_th
|
number = number_th
|
||||||
json_data = getDataFromJSON(number, filepath, failed_folder, sources) # 定义番号
|
json_data = get_data_from_json(number, filepath, conf) # 定义番号
|
||||||
if json_data["number"] != number:
|
if json_data["number"] != number:
|
||||||
# fix issue #119
|
# fix issue #119
|
||||||
# the root cause is we normalize the search id
|
# the root cause is we normalize the search id
|
||||||
# PrintFiles() will use the normalized id from website,
|
# PrintFiles() will use the normalized id from website,
|
||||||
# but pasteFileToFolder() still use the input raw search id
|
# but paste_file_to_folder() still use the input raw search id
|
||||||
# so the solution is: use the normalized search id
|
# so the solution is: use the normalized search id
|
||||||
number = json_data["number"]
|
number = json_data["number"]
|
||||||
imagecut = json_data['imagecut']
|
imagecut = json_data['imagecut']
|
||||||
@@ -447,25 +435,45 @@ def core_main(file_path, number_th, config_file):
|
|||||||
# =======================================================================判断-C,-CD后缀
|
# =======================================================================判断-C,-CD后缀
|
||||||
if '-CD' in filepath or '-cd' in filepath:
|
if '-CD' in filepath or '-cd' in filepath:
|
||||||
multi_part = 1
|
multi_part = 1
|
||||||
part = get_part(filepath, failed_folder)
|
part = get_part(filepath, conf.failed_folder())
|
||||||
if '-c.' in filepath or '-C.' in filepath or '中文' in filepath or '字幕' in filepath:
|
if '-c.' in filepath or '-C.' in filepath or '中文' in filepath or '字幕' in filepath:
|
||||||
cn_sub = '1'
|
cn_sub = '1'
|
||||||
c_word = '-C' # 中文字幕影片后缀
|
c_word = '-C' # 中文字幕影片后缀
|
||||||
if '流出' in filepath:
|
if '流出' in filepath:
|
||||||
liuchu = '流出'
|
liuchu = '流出'
|
||||||
|
|
||||||
CreatFailedFolder(failed_folder) # 创建输出失败目录
|
# 创建输出失败目录
|
||||||
debug_mode(json_data) # 调试模式检测
|
CreatFailedFolder(conf.failed_folder())
|
||||||
path = creatFolder(success_folder, json_data['location_rule'], json_data, Config) # 创建文件夹
|
|
||||||
# =======================================================================刮削模式
|
# 调试模式检测
|
||||||
if program_mode == '1':
|
if conf.debug():
|
||||||
|
debug_print(json_data)
|
||||||
|
|
||||||
|
# 创建文件夹
|
||||||
|
path = create_folder(conf.success_folder(), json_data['location_rule'], json_data, conf)
|
||||||
|
|
||||||
|
# main_mode
|
||||||
|
# 1: 刮削模式 / Scraping mode
|
||||||
|
# 2: 整理模式 / Organizing mode
|
||||||
|
if conf.main_mode() == 1:
|
||||||
if multi_part == 1:
|
if multi_part == 1:
|
||||||
number += part # 这时number会被附加上CD1后缀
|
number += part # 这时number会被附加上CD1后缀
|
||||||
smallCoverCheck(path, number, imagecut, json_data['cover_small'], c_word, Config, filepath, failed_folder) # 检查小封面
|
|
||||||
imageDownload(json_data['cover'], number, c_word, path, multi_part, Config, filepath, failed_folder) # creatFoder会返回番号路径
|
# 检查小封面
|
||||||
cutImage(imagecut, path, number, c_word) # 裁剪图
|
if imagecut == 3:
|
||||||
PrintFiles(path, c_word, json_data['naming_rule'], part, cn_sub, json_data, filepath, failed_folder, tag, json_data['actor_list'],liuchu) # 打印文件
|
small_cover_check(path, number, json_data['cover_small'], c_word, conf, filepath, conf.failed_folder())
|
||||||
pasteFileToFolder(filepath, path, number, c_word) # 移动文件
|
|
||||||
# =======================================================================整理模式
|
# creatFolder会返回番号路径
|
||||||
elif program_mode == '2':
|
image_download(json_data['cover'], number, c_word, path, conf, filepath, conf.failed_folder())
|
||||||
pasteFileToFolder_mode2(filepath, path, multi_part, number, part, c_word) # 移动文件
|
|
||||||
|
# 裁剪图
|
||||||
|
cutImage(imagecut, path, number, c_word)
|
||||||
|
|
||||||
|
# 打印文件
|
||||||
|
PrintFiles(path, c_word, json_data['naming_rule'], part, cn_sub, json_data, filepath, conf.failed_folder(), tag, json_data['actor_list'], liuchu)
|
||||||
|
|
||||||
|
# 移动文件
|
||||||
|
paste_file_to_folder(filepath, path, number, c_word, conf)
|
||||||
|
elif conf.main_mode() == 2:
|
||||||
|
# 移动文件
|
||||||
|
paste_file_to_folder_mode2(filepath, path, multi_part, number, part, c_word, conf)
|
||||||
|
|||||||
Reference in New Issue
Block a user