diff --git a/ADC_function.py b/ADC_function.py index d807061..0158bbf 100755 --- a/ADC_function.py +++ b/ADC_function.py @@ -10,7 +10,8 @@ import sys from lxml import etree import sys import io -sys.stdout = io.TextIOWrapper(sys.stdout.buffer, errors = 'replace', line_buffering = True) +# sys.stdout = io.TextIOWrapper(sys.stdout.buffer, errors = 'replace', line_buffering = True) +# sys.setdefaultencoding('utf-8') config_file='config.ini' config = ConfigParser() diff --git a/AV_Data_Capture.py b/AV_Data_Capture.py index 40f194e..0bf6f51 100755 --- a/AV_Data_Capture.py +++ b/AV_Data_Capture.py @@ -5,7 +5,6 @@ import glob import os import time import re -import sys from ADC_function import * import json import shutil @@ -15,7 +14,7 @@ os.chdir(os.getcwd()) # ============global var=========== -version='1.9' +version='2.0' config = ConfigParser() config.read(config_file, encoding='UTF-8') @@ -44,10 +43,10 @@ def UpdateCheck(): html = json.loads(str(html2)) if not version == html['version']: - print('[*] * New update ' + html['version'] + ' *') - print('[*] * Download *') + print('[*] * New update ' + html['version'] + ' *') + print('[*] ↓ Download ↓') print('[*] ' + html['download']) - print('[*]=====================================') + print('[*]======================================================') else: print('[+]Update Check disabled!') def movie_lists(): @@ -91,6 +90,8 @@ def getNumber(filepath): filepath = filepath.replace("_", "-") filepath.strip('22-sht.me').strip('-HD').strip('-hd') filename = str(re.sub("\[\d{4}-\d{1,2}-\d{1,2}\] - ", "", filepath)) # 去除文件名中时间 + if 'FC2' or 'fc2' in filename: + filename=filename.replace('-PPV','').replace('PPV-','') try: file_number = re.search('\w+-\d+', filename).group() except: # 提取类似mkbd-s120番号 @@ -126,9 +127,9 @@ def RunCore(): os.system('python3 core.py' + ' "' + i + '" --number "' + getNumber(i) + '"') # 从py文件启动(用于源码py) if __name__ =='__main__': - print('[*]===========AV Data Capture===========') - print('[*] Version '+version) - print('[*]=====================================') + print('[*]================== AV Data Capture ===================') + print('[*] Version '+version) + print('[*]======================================================') CreatFailedFolder() UpdateCheck() moveMovies() @@ -137,6 +138,8 @@ if __name__ =='__main__': count = 0 count_all = str(len(movie_lists())) print('[+]Find',str(len(movie_lists())),'movies') + if config['common']['soft_link'] == '1': + print('[!] --- Soft link mode is ENABLE! ----') for i in movie_lists(): #遍历电影列表 交给core处理 count = count + 1 percentage = str(count/int(count_all)*100)[:4]+'%' @@ -144,14 +147,18 @@ if __name__ =='__main__': try: print("[!]Making Data for [" + i + "], the number is [" + getNumber(i) + "]") RunCore() - print("[*]=====================================") + print("[*]======================================================") except: # 番号提取异常 print('[-]' + i + ' Cannot catch the number :') - print('[-]Move ' + i + ' to failed folder') - shutil.move(i, str(os.getcwd()) + '/' + 'failed/') + if config['common']['soft_link'] == '1': + print('[-]Link',i,'to failed folder') + os.symlink(i,str(os.getcwd()) + '/' + 'failed/') + else: + print('[-]Move ' + i + ' to failed folder') + shutil.move(i, str(os.getcwd()) + '/' + 'failed/') continue CEF(exclude_directory_1) CEF(exclude_directory_2) print("[+]All finished!!!") - input("[+][+]Press enter key exit, you can check the error messge before you exit.\n[+][+]按回车键结束,你可以在结束之前查看和错误信息。") \ No newline at end of file + input("[+][+]Press enter key exit, you can check the error messge before you exit.") \ No newline at end of file diff --git a/config.ini b/config.ini index 5446524..75ddbf2 100644 --- a/config.ini +++ b/config.ini @@ -2,6 +2,7 @@ main_mode=1 failed_output_folder=failed success_output_folder=JAV_output +soft_link=0 [proxy] proxy=127.0.0.1:1081 @@ -17,7 +18,7 @@ update_check=1 [media] media_warehouse=emby -#emby or plex or kodi +#emby or plex or kodi ,emby=jellyfin [escape] literals=\() diff --git a/core.py b/core.py index f0c83ed..66414b4 100755 --- a/core.py +++ b/core.py @@ -128,7 +128,7 @@ def getDataFromJSON(file_number): # 从JSON返回元数据 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)) + json_data = json.loads(fc2fans_club.main(file_number.replace('fc2-','').replace('fc2_','').replace('FC2-','').replace('fc2_',''))) # == elif 'HEYZO' in number or 'heyzo' in number or 'Heyzo' in number: json_data = json.loads(avsox.main(file_number)) @@ -537,7 +537,19 @@ 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) + if config['common']['soft_link'] == '1': #如果soft_link=1 使用软链接 + os.symlink(filepath, path + '/' + number + c_word + houzhui) + else: + os.rename(filepath, path + '/' + number + c_word + houzhui) + if os.path.exists(os.getcwd()+'/'+number + c_word + '.srt'): #字幕移动 + os.rename(os.getcwd()+'/'+number + c_word + '.srt', path + '/' + number + c_word + '.srt') + print('[+]Sub moved!') + elif os.path.exists(os.getcwd()+'/'+number + c_word + '.ssa'): + os.rename(os.getcwd()+'/'+number + c_word + '.ssa', path + '/' + number + c_word + '.ssa') + print('[+]Sub moved!') + elif os.path.exists(os.getcwd()+'/'+number + c_word + '.sub'): + os.rename(os.getcwd()+'/'+number + c_word + '.sub', path + '/' + number + c_word + '.sub') + print('[+]Sub moved!') except FileExistsError: print('[-]File Exists! Please check your movie!') print('[-]move to the root folder of the program.') @@ -555,7 +567,19 @@ def pasteFileToFolder_mode2(filepath, path): # 文件路径,番号,后缀 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) + if config['common']['soft_link'] == '1': + os.symlink(filepath, path + '/' + number + part + c_word + houzhui) + else: + os.rename(filepath, path + '/' + number + part + c_word + houzhui) + if os.path.exists(number+'.srt'): #字幕移动 + os.rename(number + part + c_word + '.srt', path + '/' + number + part + c_word + '.srt') + print('[+]Sub moved!') + elif os.path.exists(number + part + c_word+'.ass'): + os.rename(number + part + c_word + '.ass', path + '/' + number + part + c_word + '.ass') + print('[+]Sub moved!') + elif os.path.exists(number + part + c_word+'.sub'): + os.rename(number + part + c_word + '.sub', path + '/' + number + part + c_word + '.sub') + print('[+]Sub moved!') print('[!]Success') except FileExistsError: print('[-]File Exists! Please check your movie!') @@ -597,7 +621,7 @@ def debug_mode(): continue if i == 'actor_photo' or i == 'year': continue - print('[+] -', i, ':', v) + print('[+] -', i+str(9-len(i)*'-'), ':', v) print('[+] ---Debug info---') except: aaa = '' diff --git a/fc2fans_club.py b/fc2fans_club.py index 747fa4c..72cb773 100755 --- a/fc2fans_club.py +++ b/fc2fans_club.py @@ -4,43 +4,50 @@ import json import ADC_function def getTitle(htmlcode): #获取厂商 + #print(htmlcode) html = etree.fromstring(htmlcode,etree.HTMLParser()) - result = str(html.xpath('//*[@id="container"]/div[1]/div/article/section[1]/h2/text()')).strip(" ['']") - return result + result = str(html.xpath('/html/body/div[2]/div/div[1]/h3/text()')).strip(" ['']") + result2 = str(re.sub('\D{2}2-\d+','',result)).replace(' ','',1) + #print(result2) + return result2 def getActor(htmlcode): try: html = etree.fromstring(htmlcode, etree.HTMLParser()) - result = str(html.xpath('//*[@id="container"]/div[1]/div/article/section[1]/div/div[2]/dl/dd[5]/a/text()')).strip(" ['']") + result = str(html.xpath('/html/body/div[2]/div/div[1]/h5[5]/a/text()')).strip(" ['']") return result except: return '' def getStudio(htmlcode): #获取厂商 - try: - html = etree.fromstring(htmlcode, etree.HTMLParser()) - result = str(html.xpath('//*[@id="container"]/div[1]/div/article/section[1]/div/div[2]/dl/dd[5]/a/text()')).strip(" ['']") - return result - except: - return '' + html = etree.fromstring(htmlcode,etree.HTMLParser()) + result = str(html.xpath('/html/body/div[2]/div/div[1]/h5[3]/a[1]/text()')).strip(" ['']") + return result def getNum(htmlcode): #获取番号 html = etree.fromstring(htmlcode, etree.HTMLParser()) result = str(html.xpath('/html/body/div[5]/div[1]/div[2]/p[1]/span[2]/text()')).strip(" ['']") + #print(result) return result def getRelease(htmlcode2): # + #a=ADC_function.get_html('http://adult.contents.fc2.com/article_search.php?id='+str(number).lstrip("FC2-").lstrip("fc2-").lstrip("fc2_").lstrip("fc2-")+'&utm_source=aff_php&utm_medium=source_code&utm_campaign=from_aff_php') html=etree.fromstring(htmlcode2,etree.HTMLParser()) result = str(html.xpath('//*[@id="container"]/div[1]/div/article/section[1]/div/div[2]/dl/dd[4]/text()')).strip(" ['']") return result -def getCover(htmlcode2): #获取厂商 # +def getCover(htmlcode,number,htmlcode2): #获取厂商 # + #a = ADC_function.get_html('http://adult.contents.fc2.com/article_search.php?id=' + str(number).lstrip("FC2-").lstrip("fc2-").lstrip("fc2_").lstrip("fc2-") + '&utm_source=aff_php&utm_medium=source_code&utm_campaign=from_aff_php') html = etree.fromstring(htmlcode2, etree.HTMLParser()) result = str(html.xpath('//*[@id="container"]/div[1]/div/article/section[1]/div/div[1]/a/img/@src')).strip(" ['']") + if result == '': + html = etree.fromstring(htmlcode, etree.HTMLParser()) + result2 = str(html.xpath('//*[@id="slider"]/ul[1]/li[1]/img/@src')).strip(" ['']") + return 'https://fc2club.com' + result2 return 'http:' + result def getOutline(htmlcode2): #获取番号 # html = etree.fromstring(htmlcode2, etree.HTMLParser()) - result = str(html.xpath('//*[@id="container"]/div[1]/div/article/section[4]/p/text()')).strip(" ['']").replace("\\n",'',10000).replace("'",'',10000).replace(', ,','').strip(' ').replace('。,',',') + result = str(html.xpath('/html/body/div[1]/div[2]/div[2]/div[1]/div/article/section[4]/p/text()')).strip(" ['']").replace("\\n",'',10000).replace("'",'',10000).replace(', ,','').strip(' ').replace('。,',',') return result def getTag(htmlcode): #获取番号 html = etree.fromstring(htmlcode, etree.HTMLParser()) - result = html.xpath('//*[@id="container"]/div[1]/div/article/section[6]/ul/li/a/text()') - return result + result = str(html.xpath('/html/body/div[2]/div/div[1]/h5[4]/a/text()')) + return result.strip(" ['']").replace("'",'').replace(' ','') def getYear(release): try: result = re.search('\d{4}',release).group() @@ -49,25 +56,29 @@ def getYear(release): return '' def main(number): - number=number.replace('PPV','').replace('ppv','').strip('fc2_').strip('fc2-').strip('ppv-').strip('PPV-').strip('FC2_').strip('FC2-').strip('ppv-').strip('PPV-').replace('fc2ppv-','').replace('FC2PPV-','') - htmlcode2 = ADC_function.get_html('http://adult.contents.fc2.com/article_search.php?id='+str(number).lstrip("FC2-").lstrip("fc2-").lstrip("fc2_").lstrip("fc2-")+'') - #htmlcode = ADC_function.get_html('http://fc2fans.club/html/FC2-' + number + '.html') + htmlcode2 = ADC_function.get_html('http://adult.contents.fc2.com/article_search.php?id='+number+'&utm_source=aff_php&utm_medium=source_code&utm_campaign=from_aff_php') + htmlcode = ADC_function.get_html('https://fc2club.com//html/FC2-' + number + '.html') + actor = getActor(htmlcode) + if getActor(htmlcode) == '': + actor = 'FC2系列' dic = { - 'title': getTitle(htmlcode2), - 'studio': getStudio(htmlcode2), - 'year': getYear(getRelease(htmlcode2)), + 'title': getTitle(htmlcode), + 'studio': getStudio(htmlcode), + 'year': '',#str(re.search('\d{4}',getRelease(number)).group()), 'outline': getOutline(htmlcode2), - 'runtime': getYear(getRelease(htmlcode2)), - 'director': getStudio(htmlcode2), - 'actor': getStudio(htmlcode2), - 'release': getRelease(htmlcode2), + 'runtime': getYear(getRelease(htmlcode)), + 'director': getStudio(htmlcode), + 'actor': actor, + 'release': getRelease(number), 'number': 'FC2-'+number, - 'cover': getCover(htmlcode2), + 'cover': getCover(htmlcode,number,htmlcode2), 'imagecut': 0, - 'tag': getTag(htmlcode2), + 'tag': getTag(htmlcode), 'actor_photo':'', - 'website': 'http://adult.contents.fc2.com/article_search.php?id=' + number, - 'source': 'fc2fans_club.py', + 'website': 'https://fc2club.com//html/FC2-' + number + '.html', + 'source':'https://fc2club.com//html/FC2-' + number + '.html', } js = json.dumps(dic, ensure_ascii=False, sort_keys=True, indent=4, separators=(',', ':'),)#.encode('UTF-8') - return js \ No newline at end of file + return js + +#print(main('1051725')) diff --git a/siro.py b/siro.py index bc4444a..c16537f 100755 --- a/siro.py +++ b/siro.py @@ -101,3 +101,5 @@ def main(number2): } js = json.dumps(dic, ensure_ascii=False, sort_keys=True, indent=4, separators=(',', ':'), ) # .encode('UTF-8') return js + +#print(main('SIRO-3607')) \ No newline at end of file diff --git a/update_check.json b/update_check.json index d1870d5..d091542 100644 --- a/update_check.json +++ b/update_check.json @@ -1,5 +1,5 @@ { - "version": "1.9", - "version_show":"1.9", + "version": "2.0", + "version_show":"2.0", "download": "https://github.com/yoshiko2/AV_Data_Capture/releases" }