From 71d44bf90cad86bfbf1652d40def79a07d42fe8f Mon Sep 17 00:00:00 2001
From: Yoshiko <42309414+yoshiko2@users.noreply.github.com>
Date: Mon, 4 Nov 2019 13:34:07 +0800
Subject: [PATCH] Update 1.4
---
ADC_function.py | 26 +-
AV_Data_Capture.py | 36 +-
core.py | 1245 +++++++++++++++++++++++---------------------
girl.py | 90 ++++
4 files changed, 766 insertions(+), 631 deletions(-)
create mode 100644 girl.py
diff --git a/ADC_function.py b/ADC_function.py
index 2b76958..6cbde73 100755
--- a/ADC_function.py
+++ b/ADC_function.py
@@ -17,10 +17,15 @@ if os.path.exists(config_file):
except:
print('[-]Config.ini read failed! Please use the offical file!')
else:
- print('[+]config.ini: not found, creating...')
+ print('[+]config.ini: not found, creating...',end='')
with open("config.ini", "wt", encoding='UTF-8') as code:
+ print("[common]", file=code)
+ print("main_mode = 1", file=code)
+ print("failed_output_folder = failed", file=code)
+ print("success_output_folder = JAV_output", file=code)
+ print("", file=code)
print("[proxy]",file=code)
- print("proxy=127.0.0.1:1080",file=code)
+ print("proxy=127.0.0.1:1081",file=code)
print("timeout=10", file=code)
print("retry=3", file=code)
print("", file=code)
@@ -33,16 +38,21 @@ else:
print("", file=code)
print("[media]", file=code)
print("media_warehouse=emby", file=code)
- print("#emby or plex", file=code)
- print("#plex only test!", file=code)
+ print("#emby plex kodi", file=code)
print("", file=code)
- print("[directory_capture]", file=code)
- print("switch=0", file=code)
- print("directory=", file=code)
+ print("[escape]", file=code)
+ print("literals=\\", file=code)
print("", file=code)
- print("everyone switch:1=on, 0=off", file=code)
+ print("[movie_location]", file=code)
+ print("path=", file=code)
+ print("", file=code)
+ print('.',end='')
time.sleep(2)
+ print('.')
print('[+]config.ini: created!')
+ print('[+]Please restart the program!')
+ time.sleep(4)
+ os._exit(0)
try:
config.read(config_file, encoding='UTF-8')
except:
diff --git a/AV_Data_Capture.py b/AV_Data_Capture.py
index 0aec9e6..6a40c4b 100755
--- a/AV_Data_Capture.py
+++ b/AV_Data_Capture.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python3
+#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import glob
@@ -9,23 +9,24 @@ import sys
from ADC_function import *
import json
import shutil
-from configparser import ConfigParser
import fnmatch
+from configparser import ConfigParser
os.chdir(os.getcwd())
# ============global var===========
-version='1.3'
+version='1.4'
config = ConfigParser()
config.read(config_file, encoding='UTF-8')
-fromPath=config['movie']['path']
+
Platform = sys.platform
# ==========global var end=========
-def moveMovies(fromPath):
+def moveMovies():
movieFiles = []
+ fromPath = config['movie_location']['path']
if Platform == 'win32':
movieFormat = ["avi", "rmvb", "wmv", "mov", "mp4", "mkv", "flv", "ts"]
else:
@@ -34,13 +35,10 @@ def moveMovies(fromPath):
movieFiles = movieFiles + [os.path.join(dirpath, f)
for dirpath, dirnames, files in os.walk(fromPath)
for f in fnmatch.filter(files, '*.' + fm)]
+ print(movieFiles)
for movie in movieFiles:
- movieName = movie.split('/')[-1]
- print("Move file " + movieName)
- if (os.path.exists(os.path.curdir + '/' + movieName)):
- print(movieName + "exists, skip.")
- else:
- shutil.move(movie, os.path.curdir)
+ print("Move file " + movie)
+ shutil.move(movie, os.path.curdir)
def UpdateCheck():
if UpdateCheckSwitch() == '1':
html2 = get_html('https://raw.githubusercontent.com/yoshiko2/AV_Data_Capture/master/update_check.json')
@@ -56,24 +54,12 @@ def UpdateCheck():
def movie_lists():
global exclude_directory_1
global exclude_directory_2
- directory = config['directory_capture']['directory']
total=[]
file_type = ['mp4','avi','rmvb','wmv','mov','mkv','flv','ts']
exclude_directory_1 = config['common']['failed_output_folder']
exclude_directory_2 = config['common']['success_output_folder']
- if directory=='*':
- remove_total = []
- for o in file_type:
- remove_total += glob.glob(r"./" + exclude_directory_1 + "/*." + o)
- remove_total += glob.glob(r"./" + exclude_directory_2 + "/*." + o)
- for i in os.listdir(os.getcwd()):
- for a in file_type:
- total += glob.glob(r"./" + i + "/*." + a)
- for b in remove_total:
- total.remove(b)
- return total
for a in file_type:
- total += glob.glob(r"./" + directory + "/*." + a)
+ total += glob.glob(r"./*." + a)
return total
def CreatFailedFolder():
if not os.path.exists('failed/'): # 新建failed文件夹
@@ -146,7 +132,7 @@ if __name__ =='__main__':
print('[*]=====================================')
CreatFailedFolder()
UpdateCheck()
- moveMovies(fromPath)
+ moveMovies()
os.chdir(os.getcwd())
count = 0
diff --git a/core.py b/core.py
index 859ec9b..d88e1e8 100755
--- a/core.py
+++ b/core.py
@@ -1,598 +1,647 @@
-# -*- coding: utf-8 -*-
-
-import re
-import os
-import os.path
-import shutil
-from PIL import Image
-import time
-import json
-from ADC_function import *
-from configparser import ConfigParser
-import argparse
-#=========website========
-import fc2fans_club
-import siro
-import avsox
-import javbus
-import javdb
-#=========website========
-
-#初始化全局变量
-Config = ConfigParser()
-Config.read(config_file, encoding='UTF-8')
-try:
- option = ReadMediaWarehouse()
-except:
- print('[-]Config media_warehouse read failed!')
-title=''
-studio=''
-year=''
-outline=''
-runtime=''
-director=''
-actor_list=[]
-actor=''
-release=''
-number=''
-cover=''
-imagecut=''
-tag=[]
-cn_sub=''
-multi_part=0
-part=''
-path=''
-houzhui=''
-website=''
-json_data={}
-actor_photo={}
-cover_small=''
-naming_rule =''#eval(config['Name_Rule']['naming_rule'])
-location_rule=''#eval(config['Name_Rule']['location_rule'])
-program_mode = Config['common']['main_mode']
-failed_folder = Config['common']['failed_output_folder']
-success_folder = Config['common']['success_output_folder']
-#=====================本地文件处理===========================
-
-def escapePath(path): # Remove escape literals
- escapeLiterals = Config['escape']['literals']
- backslash = '\\'
- for literal in escapeLiterals:
- path = path.replace(backslash+literal,'')
- return path
-def moveFailedFolder():
- global filepath
- print('[-]Move to Failed output folder')
- shutil.move(filepath, str(os.getcwd()) + '/' + failed_folder + '/')
- os._exit(0)
-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_folder+'/'): # 新建failed文件夹
- try:
- os.makedirs(failed_folder+'/')
- except:
- print("[-]failed!can not be make Failed output folder\n[-](Please run as Administrator)")
- os._exit(0)
-def getDataState(json_data): #元数据获取失败检测
- if json_data['title'] == '' or json_data['title'] == 'None' or json_data['title'] == 'null':
- return 0
- else:
- return 1
-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 website
- global actor_photo
- global cover_small
- global json_data
-
- global naming_rule
- global location_rule
-
- # ================================================网站规则添加开始================================================
-
- if re.match('^\d{5,}', file_number):
- json_data = json.loads(avsox.main(file_number))
- if getDataState(json_data) == 0: # 如果元数据获取失败,请求番号至其他网站抓取
- json_data = json.loads(javdb.main(file_number))
- #==
- elif re.match('\d+\D+', file_number):
- json_data = json.loads(siro.main(file_number))
- if getDataState(json_data) == 0: # 如果元数据获取失败,请求番号至其他网站抓取
- json_data = json.loads(javbus.main(file_number))
- elif getDataState(json_data) == 0: # 如果元数据获取失败,请求番号至其他网站抓取
- json_data = json.loads(javdb.main(file_number))
- # ==
- elif 'fc2' in file_number or 'FC2' in file_number:
- json_data = json.loads(fc2fans_club.main(file_number))
- # ==
- elif 'HEYZO' in number or 'heyzo' in number or 'Heyzo' in number:
- json_data = json.loads(avsox.main(file_number))
- # ==
- elif 'siro' in file_number or 'SIRO' in file_number or 'Siro' in file_number:
- json_data = json.loads(siro.main(file_number))
- # ==
- else:
- json_data = json.loads(javbus.main(file_number))
- if getDataState(json_data) == 0: # 如果元数据获取失败,请求番号至其他网站抓取
- json_data = json.loads(avsox.main(file_number))
- elif getDataState(json_data) == 0: # 如果元数据获取失败,请求番号至其他网站抓取
- json_data = json.loads(javdb.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("'", '').split(',') # 字符串转列表
- release = json_data['release']
- number = json_data['number']
- cover = json_data['cover']
- try:
- cover_small = json_data['cover_small']
- except:
- cover_small=''
- imagecut = json_data['imagecut']
- tag = str(json_data['tag']).strip("[ ]").replace("'", '').replace(" ", '').split(',') # 字符串转列表 @
- actor = str(actor_list).strip("[ ]").replace("'", '').replace(" ", '')
- actor_photo = json_data['actor_photo']
- website = json_data['website']
- source = json_data['source']
-
- if title == '' or number == '':
- print('[-]Movie Data not found!')
- moveFailedFolder()
-
- if imagecut == '3':
- DownloadFileWithFilename()
-
-
- # ====================处理异常字符====================== #\/:*?"<>|
- title = title.replace('\\', '')
- title = title.replace('/', '')
- title = title.replace(':', '')
- title = title.replace('*', '')
- title = title.replace('?', '')
- title = title.replace('"', '')
- title = title.replace('<', '')
- title = title.replace('>', '')
- title = title.replace('|', '')
- tmpArr = cover_small.split(',')
- if len(tmpArr) > 0:
- cover_small = tmpArr[0].strip('\"').strip('\'')
- # ====================处理异常字符 END================== #\/:*?"<>|
-
- naming_rule = eval(config['Name_Rule']['naming_rule'])
- location_rule = eval(config['Name_Rule']['location_rule'])
-def smallCoverCheck():
- if imagecut == 3:
- if option == 'emby':
- DownloadFileWithFilename(cover_small, '1.jpg', path)
- try:
- img = Image.open(path + '/1.jpg')
- except Exception:
- img = Image.open('1.jpg')
- w = img.width
- h = img.height
- img.save(path + '/' + number + '.png')
- time.sleep(1)
- os.remove(path + '/1.jpg')
- if option == 'kodi':
- DownloadFileWithFilename(cover_small, '1.jpg', path)
- img = Image.open(path + '/1.jpg')
- w = img.width
- h = img.height
- img.save(path + '/' + number + '-poster.jpg')
- time.sleep(1)
- os.remove(path + '/1.jpg')
- if option == 'plex':
- DownloadFileWithFilename(cover_small, '1.jpg', path)
- try:
- img = Image.open(path + '/1.jpg')
- except Exception:
- img = Image.open('1.jpg')
- w = img.width
- h = img.height
- img.save(path + '/poster.png')
- os.remove(path + '/1.jpg')
-def creatFolder(): #创建文件夹
- global actor
- global path
- if len(os.getcwd()+path) > 240: #新建成功输出文件夹
- path = success_folder+'/'+location_rule.replace("'actor'","'超多人'",3).replace("actor","'超多人'",3) #path为影片+元数据所在目录
- else:
- path = success_folder+'/'+location_rule
- #print(path)
- if not os.path.exists(path):
- path = escapePath(path)
- try:
- os.makedirs(path)
- except:
- path = success_folder+'/'+location_rule.replace('/['+number+']-'+title,"/number")
- path = escapePath(path)
- #print(path)
- os.makedirs(path)
-#=====================资源下载部分===========================
-def DownloadFileWithFilename(url,filename,path): #path = examle:photo , video.in the Project Folder!
- try:
- proxy = Config['proxy']['proxy']
- timeout = int(Config['proxy']['timeout'])
- retry_count = int(Config['proxy']['retry'])
- except:
- print('[-]Proxy config error! Please check the config.')
- i = 0
-
- while i < retry_count:
- try:
- if not 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)})
- if r == '':
- print('[-]Movie Data not found!')
- os._exit(0)
- with open(str(path) + "/" + filename, "wb") as code:
- code.write(r.content)
- return
- 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)
- if r == '':
- print('[-]Movie Data not found!')
- os._exit(0)
- with open(str(path) + "/" + filename, "wb") as code:
- code.write(r.content)
- return
- 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))
- print('[-]Connect Failed! Please check your Proxy or Network!')
- moveFailedFolder()
-def imageDownload(filepath): #封面是否下载成功,否则移动到failed
- if option == 'emby':
- if DownloadFileWithFilename(cover, number + '.jpg', path) == 'failed':
- moveFailedFolder()
- DownloadFileWithFilename(cover, number + '.jpg', path)
- if multi_part == 1:
- old_name = os.path.join(path, number + '.jpg')
- new_name = os.path.join(path, number + part + '.jpg')
- os.rename(old_name, new_name)
- print('[+]Image Downloaded!', path + '/' + number + part + '.jpg')
- else:
- print('[+]Image Downloaded!', path + '/' + number + '.jpg')
- elif option == 'kodi':
- if DownloadFileWithFilename(cover, number + '-fanart.jpg', path) == 'failed':
- moveFailedFolder()
- DownloadFileWithFilename(cover, number + '-fanart.jpg', path)
- print('[+]Image Downloaded!', path + '/' + number + '-fanart.jpg')
- elif option == 'plex':
- if DownloadFileWithFilename(cover, 'fanart.jpg', path) == 'failed':
- moveFailedFolder()
- DownloadFileWithFilename(cover, 'fanart.jpg', path)
- print('[+]Image Downloaded!', path + '/fanart.jpg')
-def PrintFiles(filepath):
- try:
- if not os.path.exists(path):
- os.makedirs(path)
- if option == 'plex':
- with open(path + "/" + number + ".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(" poster.png", file=code)
- print(" thumb.png", file=code)
- print(" fanart.jpg", file=code)
- try:
- for key, value in actor_photo.items():
- print(" ", file=code)
- print(" " + key + "", file=code)
- if not actor_photo == '': # or actor_photo == []:
- print(" " + value + "", 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 str(json_data['tag']).strip("[ ]").replace("'", '').replace(" ", '').split(','):
- print(" " + i + "", file=code)
- except:
- aaaaa = ''
- try:
- for i in str(json_data['tag']).strip("[ ]").replace("'", '').replace(" ", '').split(','):
- 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(" " + website + "", file=code)
- print("", file=code)
- print("[+]Writeed! " + path + "/" + number + ".nfo")
- elif option == 'emby':
- with open(path + "/" + number + ".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(" " + number + ".png", file=code)
- print(" " + number + ".png", file=code)
- print(" " + number + '.jpg' + "", file=code)
- try:
- for key, value in actor_photo.items():
- print(" ", file=code)
- print(" " + key + "", file=code)
- if not actor_photo == '': # or actor_photo == []:
- print(" " + value + "", 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 + "/" + number + ".nfo")
- elif option == 'kodi':
- with open(path + "/" + number + ".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(" " + number + "-poster.jpg", file=code)
- print(" " + number + '-fanart.jpg' + "", file=code)
- try:
- for key, value in actor_photo.items():
- print(" ", file=code)
- print(" " + key + "", file=code)
- if not actor_photo == '': # or actor_photo == []:
- print(" " + value + "", 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 + "/" + number + ".nfo")
- except IOError as e:
- print("[-]Write Failed!")
- print(e)
- moveFailedFolder()
- except Exception as e1:
- print(e1)
- print("[-]Write Failed!")
- moveFailedFolder()
-def cutImage():
- if option == 'plex':
- if imagecut == 1:
- try:
- img = Image.open(path + '/fanart.jpg')
- imgSize = img.size
- w = img.width
- h = img.height
- img2 = img.crop((w / 1.9, 0, w, h))
- img2.save(path + '/poster.png')
- except:
- print('[-]Cover cut failed!')
- elif imagecut == 0:
- img = Image.open(path + '/fanart.jpg')
- w = img.width
- h = img.height
- img.save(path + '/poster.png')
- elif option == 'emby':
- if imagecut == 1:
- try:
- img = Image.open(path + '/' + number + '.jpg')
- imgSize = img.size
- w = img.width
- h = img.height
- img2 = img.crop((w / 1.9, 0, w, h))
- img2.save(path + '/' + number + '.png')
- except:
- print('[-]Cover cut failed!')
- elif imagecut == 0:
- img = Image.open(path + '/' + number + '.jpg')
- w = img.width
- h = img.height
- img.save(path + '/' + number + '.png')
- elif option == 'kodi':
- if imagecut == 1:
- try:
- img = Image.open(path + '/' + number + '-fanart.jpg')
- imgSize = img.size
- w = img.width
- h = img.height
- img2 = img.crop((w / 1.9, 0, w, h))
- img2.save(path + '/' + number + '-poster.jpg')
- except:
- print('[-]Cover cut failed!')
- elif imagecut == 0:
- img = Image.open(path + '/' + number + '-fanart.jpg')
- w = img.width
- h = img.height
- img.save(path + '/' + number + '-poster.jpg')
-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())
- if part == '-CD1' and option == 'kodi':
- global number
- number += part
- try:
- os.rename(filepath, path + '/' + number + houzhui)
- except FileExistsError:
- print('[-]File Exists! Please check your movie!')
- print('[-]move to the root folder of the program.')
- os._exit(0)
- except PermissionError:
- print('[-]Error! Please run as administrator!')
- os._exit(0)
-def renameJpgToBackdrop_copy():
- if option == 'plex':
- shutil.copy(path + '/fanart.jpg', path + '/Backdrop.jpg')
- shutil.copy(path + '/poster.png', path + '/thumb.png')
- if option == 'emby':
- shutil.copy(path + '/' + number + '.jpg', path + '/Backdrop.jpg')
- if option == 'kodi':
- shutil.copy(path + '/' + number + '-fanart.jpg', path + '/Backdrop.jpg')
-def renameBackdropToJpg_copy():
- if option == 'plex':
- shutil.copy(path + '/fanart.jpg', path + '/Backdrop.jpg')
- shutil.copy(path + '/poster.png', path + '/thumb.png')
- if option == 'emby':
- shutil.copy(path + '/Backdrop.jpg', path + '/' + number + '.jpg')
- print('[+]Image Downloaded!', path + '/' + number + '.jpg')
- if option == 'kodi':
- print('跳过分集图片下载')
-def get_part(filepath):
- try:
- if re.search('-CD\d+', filepath):
- return re.findall('-CD\d+', filepath)[0]
- except:
- print("[-]failed!Please rename the filename again!")
- moveFailedFolder()
-def debug_mode():
- try:
- if config['debug_mode']['switch'] == '1':
- print('[+] ---Debug info---')
- for i, v in json_data.items():
- if i == 'outline':
- print('[+] -', i, ':', len(v), 'characters')
- continue
- if i == 'actor_photo' or i == 'year':
- continue
- print('[+] -', i, ':', v)
- print('[+] ---Debug info---')
- except:
- aaa=''
-if __name__ == '__main__':
- filepath=argparse_get_file()[0] #影片的路径
-
- if '-CD' in filepath or '-cd' in filepath:
- multi_part = 1
- part = get_part(filepath)
- if '-c.' in filepath or '-C.' in filepath or '中文' in filepath or '字幕' 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!")
- moveFailedFolder()
- else:
- number = argparse_get_file()[1]
- CreatFailedFolder()
- getDataFromJSON(number) # 定义番号
- debug_mode()
- creatFolder() # 创建文件夹
- if program_mode == '1':
- if part == '-CD1' or multi_part == 0:
- smallCoverCheck()
- imageDownload(filepath) # creatFoder会返回番号路径
- if multi_part == 1 and option != 'kodi':
- number += part
- PrintFiles(filepath) # 打印文件
- cutImage() # 裁剪图
- renameJpgToBackdrop_copy()
- else:
- number += part
- renameBackdropToJpg_copy()
- pasteFileToFolder(filepath, path) # 移动文件
- elif program_mode == '2':
- pasteFileToFolder(filepath, path) # 移动文件
+# -*- coding: utf-8 -*-
+
+import re
+import os
+import os.path
+import shutil
+from PIL import Image
+import time
+import json
+from ADC_function import *
+from configparser import ConfigParser
+import argparse
+# =========website========
+import fc2fans_club
+import siro
+import avsox
+import javbus
+import javdb
+
+# =========website========
+
+# 初始化全局变量
+Config = ConfigParser()
+Config.read(config_file, encoding='UTF-8')
+try:
+ option = ReadMediaWarehouse()
+except:
+ print('[-]Config media_warehouse read failed!')
+title = '' #标题
+studio = '' #片商
+year = '' #年份
+outline = '' #简介
+runtime = '' #运行时间
+director = '' #导演
+actor_list = [] #演员列表
+actor = '' #演员
+release = '' #上市时间
+number = '' #番号
+cover = '' #封面URL
+imagecut = '' #封面裁剪指数
+tag = [] #标签
+cn_sub = '' #中文字幕
+c_word = '' #中文字幕后缀
+multi_part = 0 #多集
+part = '' #多集
+path = '' #路径
+houzhui = '' #后缀
+website = '' #网站
+json_data = {} #元数据集合
+actor_photo = {} #演员图片URL
+cover_small = '' #小封面链接
+naming_rule = '' #元数据内标题命名规则
+location_rule = ''#位置规则
+program_mode = Config['common']['main_mode'] #运行模式
+failed_folder = Config['common']['failed_output_folder'] #失败输出目录
+success_folder = Config['common']['success_output_folder'] #成功输出目录
+
+
+# =====================本地文件处理===========================
+
+def escapePath(path): # Remove escape literals
+ escapeLiterals = Config['escape']['literals']
+ backslash = '\\'
+ for literal in escapeLiterals:
+ path = path.replace(backslash+literal,'')
+ return path
+
+def moveFailedFolder():
+ global filepath
+ print('[-]Move to Failed output folder')
+ shutil.move(filepath, str(os.getcwd()) + '/' + failed_folder + '/')
+ os._exit(0)
+
+
+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_folder + '/'): # 新建failed文件夹
+ try:
+ os.makedirs(failed_folder + '/')
+ except:
+ print("[-]failed!can not be make Failed output folder\n[-](Please run as Administrator)")
+ os._exit(0)
+
+
+def getDataState(json_data): # 元数据获取失败检测
+ if json_data['title'] == '' or json_data['title'] == 'None' or json_data['title'] == 'null':
+ return 0
+ else:
+ return 1
+
+
+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 website
+ global actor_photo
+ global cover_small
+ global json_data
+
+ global naming_rule
+ global location_rule
+
+ # ================================================网站规则添加开始================================================
+
+ if re.match('^\d{5,}', file_number):
+ json_data = json.loads(avsox.main(file_number))
+ if getDataState(json_data) == 0: # 如果元数据获取失败,请求番号至其他网站抓取
+ json_data = json.loads(javdb.main(file_number))
+ # ==
+ elif re.match('\d+\D+', file_number):
+ json_data = json.loads(siro.main(file_number))
+ if getDataState(json_data) == 0: # 如果元数据获取失败,请求番号至其他网站抓取
+ json_data = json.loads(javbus.main(file_number))
+ elif getDataState(json_data) == 0: # 如果元数据获取失败,请求番号至其他网站抓取
+ json_data = json.loads(javdb.main(file_number))
+ # ==
+ elif 'fc2' in file_number or 'FC2' in file_number:
+ json_data = json.loads(fc2fans_club.main(file_number))
+ # ==
+ elif 'HEYZO' in number or 'heyzo' in number or 'Heyzo' in number:
+ json_data = json.loads(avsox.main(file_number))
+ # ==
+ elif 'siro' in file_number or 'SIRO' in file_number or 'Siro' in file_number:
+ json_data = json.loads(siro.main(file_number))
+ # ==
+ else:
+ json_data = json.loads(javbus.main(file_number))
+ if getDataState(json_data) == 0: # 如果元数据获取失败,请求番号至其他网站抓取
+ json_data = json.loads(avsox.main(file_number))
+ elif getDataState(json_data) == 0: # 如果元数据获取失败,请求番号至其他网站抓取
+ json_data = json.loads(javdb.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("'", '').split(',') # 字符串转列表
+ release = json_data['release']
+ number = json_data['number']
+ cover = json_data['cover']
+ try:
+ cover_small = json_data['cover_small']
+ except:
+ cover_small = ''
+ imagecut = json_data['imagecut']
+ tag = str(json_data['tag']).strip("[ ]").replace("'", '').replace(" ", '').split(',') # 字符串转列表 @
+ actor = str(actor_list).strip("[ ]").replace("'", '').replace(" ", '')
+ actor_photo = json_data['actor_photo']
+ website = json_data['website']
+ source = json_data['source']
+
+ if title == '' or number == '':
+ print('[-]Movie Data not found!')
+ moveFailedFolder()
+
+ if imagecut == '3':
+ DownloadFileWithFilename()
+
+ # ====================处理异常字符====================== #\/:*?"<>|
+ title = title.replace('\\', '')
+ title = title.replace('/', '')
+ title = title.replace(':', '')
+ title = title.replace('*', '')
+ title = title.replace('?', '')
+ title = title.replace('"', '')
+ title = title.replace('<', '')
+ title = title.replace('>', '')
+ title = title.replace('|', '')
+ tmpArr = cover_small.split(',')
+ if len(tmpArr) > 0:
+ cover_small = tmpArr[0].strip('\"').strip('\'')
+ # ====================处理异常字符 END================== #\/:*?"<>|
+
+ naming_rule = eval(config['Name_Rule']['naming_rule'])
+ location_rule = eval(config['Name_Rule']['location_rule'])
+
+
+def smallCoverCheck():
+ if imagecut == 3:
+ if option == 'emby':
+ DownloadFileWithFilename(cover_small, '1.jpg', path)
+ try:
+ img = Image.open(path + '/1.jpg')
+ except Exception:
+ img = Image.open('1.jpg')
+ w = img.width
+ h = img.height
+ img.save(path + '/' + number + c_word + '.png')
+ time.sleep(1)
+ os.remove(path + '/1.jpg')
+ if option == 'kodi':
+ DownloadFileWithFilename(cover_small, '1.jpg', path)
+ try:
+ img = Image.open(path + '/1.jpg')
+ except Exception:
+ img = Image.open('1.jpg')
+ w = img.width
+ h = img.height
+ img.save(path + '/' + number + c_word +'-poster.jpg')
+ time.sleep(1)
+ os.remove(path + '/1.jpg')
+ if option == 'plex':
+ DownloadFileWithFilename(cover_small, '1.jpg', path)
+ try:
+ img = Image.open(path + '/1.jpg')
+ except Exception:
+ img = Image.open('1.jpg')
+ w = img.width
+ h = img.height
+ img.save(path + '/poster.png')
+ os.remove(path + '/1.jpg')
+
+
+def creatFolder(): # 创建文件夹
+ global actor
+ global path
+ if len(os.getcwd() + path) > 240: # 新建成功输出文件夹
+ path = success_folder+'/'+location_rule.replace("'actor'","'manypeople'",3).replace("actor","'manypeople'",3) #path为影片+元数据所在目录
+ else:
+ path = success_folder + '/' + location_rule
+ # print(path)
+ if not os.path.exists(path):
+ path = escapePath(path)
+ try:
+ os.makedirs(path)
+ except:
+ path = success_folder + '/' + location_rule.replace('/[' + number + ']-' + title, "/number")
+ path = escapePath(path)
+ os.makedirs(path)
+
+
+# =====================资源下载部分===========================
+def DownloadFileWithFilename(url, filename, path): # path = examle:photo , video.in the Project Folder!
+ try:
+ proxy = Config['proxy']['proxy']
+ timeout = int(Config['proxy']['timeout'])
+ retry_count = int(Config['proxy']['retry'])
+ except:
+ print('[-]Proxy config error! Please check the config.')
+ i = 0
+
+ while i < retry_count:
+ try:
+ if not 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)})
+ if r == '':
+ print('[-]Movie Data not found!')
+ os._exit(0)
+ with open(str(path) + "/" + filename, "wb") as code:
+ code.write(r.content)
+ return
+ 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)
+ if r == '':
+ print('[-]Movie Data not found!')
+ os._exit(0)
+ with open(str(path) + "/" + filename, "wb") as code:
+ code.write(r.content)
+ return
+ 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))
+ print('[-]Connect Failed! Please check your Proxy or Network!')
+ moveFailedFolder()
+
+
+def imageDownload(): # 封面是否下载成功,否则移动到failed
+ if option == 'emby':
+ if DownloadFileWithFilename(cover, number + '.jpg', path) == 'failed':
+ moveFailedFolder()
+ DownloadFileWithFilename(cover, number + '.jpg', path)
+ if multi_part == 1:
+ old_name = os.path.join(path, number + '.jpg')
+ new_name = os.path.join(path, number + '.jpg')
+ os.rename(old_name, new_name)
+ print('[+]Image Downloaded!', path + '/' + number + '.jpg')
+ else:
+ print('[+]Image Downloaded!', path + '/' + number + '.jpg')
+ elif option == 'plex':
+ if DownloadFileWithFilename(cover, 'fanart.jpg', path) == 'failed':
+ moveFailedFolder()
+ DownloadFileWithFilename(cover, 'fanart.jpg', path)
+ print('[+]Image Downloaded!', path + '/fanart.jpg')
+ elif option == 'kodi':
+ if DownloadFileWithFilename(cover, number + '-fanart.jpg', path) == 'failed':
+ moveFailedFolder()
+ DownloadFileWithFilename(cover, number + '-fanart.jpg', path)
+ print('[+]Image Downloaded!', path + '/' + number + '-fanart.jpg')
+
+
+def PrintFiles():
+ try:
+ if not os.path.exists(path):
+ os.makedirs(path)
+ if option == 'plex':
+ with open(path + "/" + number + c_word + ".nfo", "wt", encoding='UTF-8') as code:
+ print("", file=code)
+ print(" " + naming_rule + part + "", 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(" poster.png", file=code)
+ print(" thumb.png", file=code)
+ print(" fanart.jpg", file=code)
+ try:
+ for key, value in actor_photo.items():
+ print(" ", file=code)
+ print(" " + key + "", file=code)
+ if not actor_photo == '': # or actor_photo == []:
+ print(" " + value + "", 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 str(json_data['tag']).strip("[ ]").replace("'", '').replace(" ", '').split(','):
+ print(" " + i + "", file=code)
+ except:
+ aaaaa = ''
+ try:
+ for i in str(json_data['tag']).strip("[ ]").replace("'", '').replace(" ", '').split(','):
+ 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(" " + website + "", file=code)
+ print("", file=code)
+ print("[+]Writeed! " + path + "/" + number + ".nfo")
+ elif option == 'emby':
+ with open(path + "/" + number + c_word + ".nfo", "wt", encoding='UTF-8') as code:
+ print("", file=code)
+ print(" " + naming_rule + part + "", 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(" " + number + ".png", file=code)
+ print(" " + number + ".png", file=code)
+ print(" " + number + '.jpg' + "", file=code)
+ try:
+ for key, value in actor_photo.items():
+ print(" ", file=code)
+ print(" " + key + "", file=code)
+ if not actor_photo == '': # or actor_photo == []:
+ print(" " + value + "", 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 + "/" + number + c_word + ".nfo")
+ elif option == 'kodi':
+ with open(path + "/" + number + c_word + ".nfo", "wt", encoding='UTF-8') as code:
+ print("", file=code)
+ print(" " + naming_rule + part + "", 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(" " + number + "-poster.jpg", file=code)
+ print(" " + number + '-fanart.jpg' + "", file=code)
+ try:
+ for key, value in actor_photo.items():
+ print(" ", file=code)
+ print(" " + key + "", file=code)
+ if not actor_photo == '': # or actor_photo == []:
+ print(" " + value + "", 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 + "/" + number + c_word + ".nfo")
+ except IOError as e:
+ print("[-]Write Failed!")
+ print(e)
+ moveFailedFolder()
+ except Exception as e1:
+ print(e1)
+ print("[-]Write Failed!")
+ moveFailedFolder()
+
+
+def cutImage():
+ if option == 'plex':
+ if imagecut == 1:
+ try:
+ img = Image.open(path + '/fanart.jpg')
+ imgSize = img.size
+ w = img.width
+ h = img.height
+ img2 = img.crop((w / 1.9, 0, w, h))
+ img2.save(path + '/poster.png')
+ except:
+ print('[-]Cover cut failed!')
+ elif imagecut == 0:
+ img = Image.open(path + '/fanart.jpg')
+ w = img.width
+ h = img.height
+ img.save(path + '/poster.png')
+ elif option == 'emby':
+ if imagecut == 1:
+ try:
+ img = Image.open(path + '/' + number + '.jpg')
+ imgSize = img.size
+ w = img.width
+ h = img.height
+ img2 = img.crop((w / 1.9, 0, w, h))
+ img2.save(path + '/' + number + '.png')
+ except:
+ print('[-]Cover cut failed!')
+ elif imagecut == 0:
+ img = Image.open(path + '/' + number + '.jpg')
+ w = img.width
+ h = img.height
+ img.save(path + '/' + number + '.png')
+ elif option == 'kodi':
+ if imagecut == 1:
+ try:
+ img = Image.open(path + '/' + number + '-fanart.jpg')
+ imgSize = img.size
+ w = img.width
+ h = img.height
+ img2 = img.crop((w / 1.9, 0, w, h))
+ img2.save(path + '/' + number + '-poster.jpg')
+ except:
+ print('[-]Cover cut failed!')
+ elif imagecut == 0:
+ img = Image.open(path + '/' + number + '-fanart.jpg')
+ w = img.width
+ h = img.height
+ try:
+ img = img.convert('RGB')
+ img.save(path + '/' + number + '-poster.jpg')
+ except:
+ img = img.convert('RGB')
+ img.save(path + '/' + number + '-poster.jpg')
+
+
+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())
+ try:
+ os.rename(filepath, path + '/' + number + c_word + houzhui)
+ except FileExistsError:
+ print('[-]File Exists! Please check your movie!')
+ print('[-]move to the root folder of the program.')
+ os._exit(0)
+ except PermissionError:
+ print('[-]Error! Please run as administrator!')
+ os._exit(0)
+
+
+def pasteFileToFolder_mode2(filepath, path): # 文件路径,番号,后缀,要移动至的位置
+ global houzhui
+ global number
+ if multi_part == 1:
+ number += part # 这时number会被附加上CD1后缀
+ houzhui = str(re.search('[.](AVI|RMVB|WMV|MOV|MP4|MKV|FLV|TS|avi|rmvb|wmv|mov|mp4|mkv|flv|ts)$', filepath).group())
+ path = success_folder + '/' + location_rule
+ try:
+ os.rename(filepath, path + '/' + number + part + c_word + houzhui)
+ print('[!]Success')
+ except FileExistsError:
+ print('[-]File Exists! Please check your movie!')
+ print('[-]move to the root folder of the program.')
+ os._exit(0)
+ except PermissionError:
+ print('[-]Error! Please run as administrator!')
+ os._exit(0)
+
+
+def copyRenameJpgToBackdrop():
+ if option == 'plex':
+ shutil.copy(path + '/fanart.jpg', path + '/Backdrop.jpg')
+ shutil.copy(path + '/poster.png', path + '/thumb.png')
+ if option == 'emby':
+ shutil.copy(path + '/' + number + '.jpg', path + '/Backdrop.jpg')
+ if option == 'kodi':
+ shutil.copy(path + '/' + number + '-fanart.jpg', path + '/Backdrop.jpg')
+
+
+def get_part(filepath):
+ try:
+ if re.search('-CD\d+', filepath):
+ return re.findall('-CD\d+', filepath)[0]
+ if re.search('-cd\d+', filepath):
+ return re.findall('-cd\d+', filepath)[0]
+ except:
+ print("[-]failed!Please rename the filename again!")
+ moveFailedFolder()
+
+
+def debug_mode():
+ try:
+ if config['debug_mode']['switch'] == '1':
+ print('[+] ---Debug info---')
+ for i, v in json_data.items():
+ if i == 'outline':
+ print('[+] -', i, ':', len(v), 'characters')
+ continue
+ if i == 'actor_photo' or i == 'year':
+ continue
+ print('[+] -', i, ':', v)
+ print('[+] ---Debug info---')
+ except:
+ aaa = ''
+
+
+if __name__ == '__main__':
+ filepath = argparse_get_file()[0] # 影片的路径
+
+ if '-CD' in filepath or '-cd' in filepath:
+ multi_part = 1
+ part = get_part(filepath)
+ if '-c.' in filepath or '-C.' in filepath or '中文' in filepath or '字幕' in filepath:
+ cn_sub = '1'
+ c_word = '-C'
+
+ 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!")
+ moveFailedFolder()
+ else:
+ number = argparse_get_file()[1]
+ CreatFailedFolder()
+ getDataFromJSON(number) # 定义番号
+ debug_mode()
+ creatFolder() # 创建文件夹
+ if program_mode == '1':
+ if multi_part == 1:
+ number += part # 这时number会被附加上CD1后缀
+ smallCoverCheck()
+ imageDownload() # creatFoder会返回番号路径
+ cutImage() # 裁剪图
+ copyRenameJpgToBackdrop()
+ PrintFiles() # 打印文件
+ # renameBackdropToJpg_copy()
+ pasteFileToFolder(filepath, path) # 移动文件
+ elif program_mode == '2':
+ pasteFileToFolder_mode2(filepath, path) # 移动文件
diff --git a/girl.py b/girl.py
new file mode 100644
index 0000000..b69d717
--- /dev/null
+++ b/girl.py
@@ -0,0 +1,90 @@
+# coding=utf-8
+import csv
+import re
+from lxml import etree
+import json
+from bs4 import BeautifulSoup
+from ADC_function import *
+import os
+import datetime
+
+def getActorURL(htmlcode):
+ html = etree.fromstring(htmlcode, etree.HTMLParser()) # //table/tr[1]/td[1]/text()
+ result1 = html.xpath('//*[@id="waterfall"]/div/a/@href')
+ return result1
+# =====
+def getName(htmlcode):
+ html = etree.fromstring(htmlcode, etree.HTMLParser())
+ result1 = str(html.xpath('//*[@id="waterfall"]/div[1]/div/div[2]/span/text()')).strip(" ['']")
+ return result1
+def getActorPhotoURL(htmlcode):
+ html = etree.fromstring(htmlcode, etree.HTMLParser())
+ result1 = str(html.xpath('//*[@id="waterfall"]/div[1]/div/div[1]/img/@src')).strip(" ['']")
+ return result1
+def getBirthday(htmlcode):
+ html = etree.fromstring(htmlcode, etree.HTMLParser())
+ result1 = str(html.xpath('//p[contains(text(),"生日: ")]/text()')).strip(" ['']")
+ return result1
+def getAge(htmlcode):
+ html = etree.fromstring(htmlcode, etree.HTMLParser())
+ result1 = str(html.xpath('//p[contains(text(),"年齡: ")]/text()')).strip(" ['']")
+ return result1
+def getHigh(htmlcode):
+ html = etree.fromstring(htmlcode, etree.HTMLParser())
+ result1 = str(html.xpath('//p[contains(text(),"身高: ")]/text()')).strip(" ['']")
+ return result1
+def getCup(htmlcode):
+ html = etree.fromstring(htmlcode, etree.HTMLParser())
+ result1 = str(html.xpath('//p[contains(text(),"罩杯: ")]/text()')).strip(" ['']")
+ return result1
+def getInfo(htmlcode,xpath):
+ html = etree.fromstring(htmlcode, etree.HTMLParser())
+ result1 = str(html.xpath(xpath)).strip(" ['']")
+ return result1
+
+# =====
+
+filename = '2.csv'
+
+def create_csv():
+ path = filename
+ with open(path, 'w') as f:
+ print("名称,头像URL,个人URL,生日,年龄,身高,罩杯", file=f, )
+
+
+def write_csv(htmlcode, url):
+ path = filename
+ with open(path, 'a+') as f:
+ print(getName(htmlcode), end=',', file=f)
+ print(getActorPhotoURL(htmlcode), end=',', file=f)
+ print(url, end=',', file=f)
+ print(getBirthday(htmlcode).strip('生日: '), end=',', file=f)
+ print(getAge(htmlcode).strip('年齡: '), end=',', file=f)
+ print(getHigh(htmlcode).strip('身高: ').strip('cm'), end=',', file=f)
+ print(getCup(htmlcode).strip('罩杯: '), file=f)
+
+def main(url):
+ actor_list = getActorURL(get_html(url))
+ b = 0
+ c = len(actor_list)
+ for i in actor_list:
+ try:
+ htmlcode = get_html(i)
+ write_csv(htmlcode, i)
+ b = b + 1
+ print('[' + str(b) + '/' + str(c) + ']', 'writed', getName(htmlcode))
+ except:
+ print('error')
+ b = b + 1
+ continue
+
+if os.path.exists(filename) == False:
+ print('create file')
+ create_csv()
+
+a = 198
+while a <= 202:
+ print('page:', a)
+ main('https://www.javbus.com/actresses/' + str(a))
+ print(datetime.datetime.now().strftime("%Y.%m.%d-%H:%M:%S"))
+ a = a + 1