import re import os import os.path import shutil from PIL import Image import time import javbus import json import fc2fans_club import siro from ADC_function import * from configparser import ConfigParser import argparse import javdb #初始化全局变量 title='' studio='' year='' outline='' runtime='' director='' actor_list=[] actor='' release='' number='' cover='' imagecut='' tag=[] cn_sub='' path='' houzhui='' naming_rule =''#eval(config['Name_Rule']['naming_rule']) location_rule=''#eval(config['Name_Rule']['location_rule']) #=====================本地文件处理=========================== def argparse_get_file(): parser = argparse.ArgumentParser() parser.add_argument("--number", help="Enter Number on here", default='') parser.add_argument("file", help="Write the file path on here") args = parser.parse_args() return (args.file, args.number) def CreatFailedFolder(): if not os.path.exists('failed/'): # 新建failed文件夹 try: os.makedirs('failed/') except: print("[-]failed!can not be make folder 'failed'\n[-](Please run as Administrator)") os._exit(0) def getDataFromJSON(file_number): #从JSON返回元数据 global title global studio global year global outline global runtime global director global actor_list global actor global release global number global cover global imagecut global tag global image_main global cn_sub global naming_rule global location_rule try: # 添加 需要 正则表达式的规则 # =======================javdb.py======================= if re.search('^\d{5,}', file_number).group() in file_number: json_data = json.loads(javdb.main(file_number)) # ======================siro.py========================== elif re.search('\d+\D+', file_number).group() in file_number: json_data = json.loads(siro.main(file_number)) except: # 添加 无需 正则表达式的规则 # ====================fc2fans_club.py==================== if 'fc2' in file_number: json_data = json.loads(fc2fans_club.main( file_number.strip('fc2_').strip('fc2-').strip('ppv-').strip('PPV-').strip('FC2_').strip('FC2-').strip('ppv-').strip('PPV-'))) elif 'FC2' in file_number: json_data = json.loads(fc2fans_club.main( file_number.strip('FC2_').strip('FC2-').strip('ppv-').strip('PPV-').strip('fc2_').strip('fc2-').strip('ppv-').strip('PPV-'))) # print(file_number.strip('FC2_').strip('FC2-').strip('ppv-').strip('PPV-')) # =======================javbus.py======================= else: json_data = json.loads(javbus.main(file_number)) # ================================================网站规则添加结束================================================ title = str(json_data['title']).replace(' ','') studio = json_data['studio'] year = json_data['year'] outline = json_data['outline'] runtime = json_data['runtime'] director = json_data['director'] actor_list = str(json_data['actor']).strip("[ ]").replace("'", '').replace(" ", '').split(',') # 字符串转列表 release = json_data['release'] number = json_data['number'] cover = json_data['cover'] imagecut = json_data['imagecut'] tag = str(json_data['tag']).strip("[ ]").replace("'", '').replace(" ", '').split(',') # 字符串转列表 actor = str(actor_list).strip("[ ]").replace("'", '').replace(" ", '') # ====================处理异常字符====================== #\/:*?"<>| if '\\' in title: title=title.replace('\\', ' ') elif '/' in title: title=title.replace('/', '') elif ':' in title: title=title.replace('/', '') elif '*' in title: title=title.replace('*', '') elif '?' in title: title=title.replace('?', '') elif '"' in title: title=title.replace('"', '') elif '<' in title: title=title.replace('<', '') elif '>' in title: title=title.replace('>', '') elif '|' in title: title=title.replace('|', '') # ====================处理异常字符 END================== #\/:*?"<>| naming_rule = eval(config['Name_Rule']['naming_rule']) location_rule = eval(config['Name_Rule']['location_rule']) def creatFolder(): #创建文件夹 global actor global path if len(actor) > 240: #新建成功输出文件夹 path = location_rule.replace("'actor'","'超多人'",3).replace("actor","'超多人'",3) #path为影片+元数据所在目录 #print(path) else: path = location_rule #print(path) if not os.path.exists(path): try: os.makedirs(path) except: path = location_rule.replace('/['+number+']-'+title,"/number") #print(path) os.makedirs(path) #=====================资源下载部分=========================== def DownloadFileWithFilename(url,filename,path): #path = examle:photo , video.in the Project Folder! config = ConfigParser() config.read('proxy.ini', encoding='UTF-8') proxy = str(config['proxy']['proxy']) timeout = int(config['proxy']['timeout']) retry_count = int(config['proxy']['retry']) i = 0 while i < retry_count: try: if not str(config['proxy']['proxy']) == '': if not os.path.exists(path): os.makedirs(path) headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'} r = requests.get(url, headers=headers, timeout=timeout,proxies={"http": "http://" + str(proxy), "https": "https://" + str(proxy)}) with open(str(path) + "/" + filename, "wb") as code: code.write(r.content) return # print(bytes(r),file=code) else: if not os.path.exists(path): os.makedirs(path) headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'} r = requests.get(url, timeout=timeout, headers=headers) with open(str(path) + "/" + filename, "wb") as code: code.write(r.content) return # print(bytes(r),file=code) except requests.exceptions.RequestException: i += 1 print('[-]Image Download : Connect retry '+str(i)+'/'+str(retry_count)) except requests.exceptions.ConnectionError: i += 1 print('[-]Image Download : Connect retry '+str(i)+'/'+str(retry_count)) except requests.exceptions.ProxyError: i += 1 print('[-]Image Download : Connect retry '+str(i)+'/'+str(retry_count)) except requests.exceptions.ConnectTimeout: i += 1 print('[-]Image Download : Connect retry '+str(i)+'/'+str(retry_count)) def imageDownload(filepath): #封面是否下载成功,否则移动到failed global path if DownloadFileWithFilename(cover,naming_rule+'.jpg', path) == 'failed': shutil.move(filepath, 'failed/') os._exit(0) DownloadFileWithFilename(cover, naming_rule+'.jpg', path) print('[+]Image Downloaded!', path +'/'+naming_rule+'.jpg') def PrintFiles(filepath): #global path global title global cn_sub try: if not os.path.exists(path): os.makedirs(path) with open(path + "/" + naming_rule + ".nfo", "wt", encoding='UTF-8') as code: print("", file=code) print(" " + naming_rule + "", file=code) print(" ", file=code) print(" ", file=code) print(" " + studio + "+", file=code) print(" " + year + "", file=code) print(" "+outline+"", file=code) print(" "+outline+"", file=code) print(" "+str(runtime).replace(" ","")+"", file=code) print(" " + director + "", file=code) print(" " + naming_rule + ".png", file=code) print(" " + naming_rule + ".png", file=code) print(" "+naming_rule + '.jpg'+"", file=code) try: for u in actor_list: print(" ", file=code) print(" " + u + "", file=code) print(" ", file=code) except: aaaa='' print(" " + studio + "", file=code) print(" ", file=code) if cn_sub == '1': print(" 中文字幕", file=code) try: for i in tag: print(" " + i + "", file=code) except: aaaaa='' try: for i in tag: print(" " + i + "", file=code) except: aaaaaaaa='' if cn_sub == '1': print(" 中文字幕", file=code) print(" " + number + "", file=code) print(" " + release + "", file=code) print(" "+cover+"", file=code) print(" " + "https://www.javbus.com/"+number + "", file=code) print("", file=code) print("[+]Writeed! "+path + "/" + naming_rule + ".nfo") except IOError as e: print("[-]Write Failed!") print(e) shutil.move(filepath, str(os.getcwd()) + '/' + 'failed/') os._exit(0) except Exception as e1: print(e1) print("[-]Write Failed!") shutil.move(filepath, str(os.getcwd()) + '/' + 'failed/') os._exit(0) def cutImage(): if imagecut == 1: try: img = Image.open(path + '/' + naming_rule + '.jpg') imgSize = img.size w = img.width h = img.height img2 = img.crop((w / 1.9, 0, w, h)) img2.save(path + '/' + naming_rule + '.png') except: print('[-]Cover cut failed!') else: img = Image.open(path + '/' + naming_rule + '.jpg') w = img.width h = img.height img.save(path + '/' + naming_rule + '.png') def pasteFileToFolder(filepath, path): #文件路径,番号,后缀,要移动至的位置 global houzhui houzhui = str(re.search('[.](AVI|RMVB|WMV|MOV|MP4|MKV|FLV|TS|avi|rmvb|wmv|mov|mp4|mkv|flv|ts)$', filepath).group()) os.rename(filepath, naming_rule + houzhui) shutil.move(naming_rule + houzhui, path) def renameJpgToBackdrop_copy(): shutil.copy(path+'/'+naming_rule + '.jpg', path+'/Backdrop.jpg') if __name__ == '__main__': filepath=argparse_get_file()[0] #影片的路径 if '-c.' in filepath or '-C.' in filepath: cn_sub='1' if argparse_get_file()[1] == '': #获取手动拉去影片获取的番号 try: number = str(re.findall(r'(.+?)\.',str(re.search('([^<>/\\\\|:""\\*\\?]+)\\.\\w+$',filepath).group()))).strip("['']").replace('_','-') print("[!]Making Data for [" + number + "]") except: print("[-]failed!Please rename the filename again!") shutil.move(filepath,'failed/') else: number = argparse_get_file()[1] CreatFailedFolder() getDataFromJSON(number) # 定义番号 creatFolder() # 创建文件夹 imageDownload(filepath) # creatFoder会返回番号路径 PrintFiles(filepath) # 打印文件 cutImage() # 裁剪图 pasteFileToFolder(filepath, path) # 移动文件 renameJpgToBackdrop_copy() # time.sleep(20)