diff --git a/lib_pornhub.py b/lib_pornhub.py index 488fff2..d233229 100644 --- a/lib_pornhub.py +++ b/lib_pornhub.py @@ -13,7 +13,7 @@ from tqdm import tqdm def ascii_banner(text): - print('\n\n########################################################\n\n\n') + print('\n########################################################\n\n\n') ascii_banner = pyfiglet.figlet_format(text) print(ascii_banner) ################################ @@ -27,11 +27,11 @@ def ph_config_dl_dir(dir): global download_dir if (dir != None): download_dir = dir - print("Output directory: " + download_dir + "\model\\") + print("Output directory: " + download_dir + "\\model\\") if (os.path.exists(download_dir) != True): print('Invalid Directory!') sys.exit() - download_dir = download_dir + "\model\\" + download_dir = download_dir + "\\model\\" if (os.path.exists(download_dir) != True): os.mkdir(download_dir) @@ -86,7 +86,7 @@ def download_video(url, filename): state = 0 print('[+] Save as: ' + filename + '\n') try: - run_command(['.\yt-dlp', '--downloader', 'aria2c', '--downloader-args', + run_command(['.\\yt-dlp', '--downloader', 'aria2c', '--downloader-args', 'aria2c:-x 8 --log-level=info --file-allocation=none --summary-interval=1', '--no-warnings', '--newline', '-o', filename, url]) print("[$] Video download successfully!") except KeyboardInterrupt: @@ -129,7 +129,7 @@ def ph_download_playlist(url, model_name, limit): # tmp_playlist download print('... Getting playlist information...') try: - playlist_download_command = [".\yt-dlp", "-j", + playlist_download_command = [".\\yt-dlp", "-j", "--flat-playlist", "--no-check-certificate", url] res = subprocess.run(playlist_download_command, capture_output=True, text=True).stdout.split("\n") @@ -152,13 +152,13 @@ def ph_download_playlist(url, model_name, limit): # video_dict = ast.literal_eval(res[i]) video_dict = json.loads(res[i]) url = video_dict['url'] - p = subprocess.Popen(['.\yt-dlp', '--no-warnings', '--dump-json', + p = subprocess.Popen(['.\\yt-dlp', '--no-warnings', '--dump-json', '--skip-download', url], stdout=subprocess.PIPE, stderr=None, shell=True) output = p.communicate()[0] info = json.loads(output.decode('utf-8')) # duration = int(info['duration']) - filename = os.path.join(download_dir, model_name, fix_title( - str(info["title"])) + '.' + str(info['ext'])) + filename = os.path.join(download_dir, model_name, + fix_title(str(info["title"])) + '.' + str(info['ext'])) print("\n\n==========================================\n[+] File #{}: {}".format( count, fix_title(str(info["title"])) + '.' + str(info['ext']))) ph_download_video(url, model_name, filename) @@ -172,7 +172,7 @@ def fix_url(url, type): url = ph_check_valid_pornhub_url(url) if '/model/' not in url: - p = subprocess.Popen(['.\yt-dlp', '--no-warnings', '--dump-json', + p = subprocess.Popen(['.\\yt-dlp', '--no-warnings', '--dump-json', '--skip-download', url], stdout=subprocess.PIPE, stderr=None, shell=True) output = p.communicate()[0] info = json.loads(output.decode('utf-8')) @@ -195,7 +195,7 @@ def ph_get_video(url): # global duration url = ph_check_valid_pornhub_url(url) - p = subprocess.Popen(['.\yt-dlp', '--no-warnings', '--dump-json', + p = subprocess.Popen(['.\\yt-dlp', '--no-warnings', '--dump-json', '--skip-download', url], stdout=subprocess.PIPE, stderr=None, shell=True) output = p.communicate()[0] info = json.loads(output.decode('utf-8')) diff --git a/pornhub_dl.py b/pornhub_dl.py index b73afa1..0737595 100644 --- a/pornhub_dl.py +++ b/pornhub_dl.py @@ -1,8 +1,10 @@ #!/usr/bin/env python from sys import exit as sysexit -from json import decoder, load, dump from os.path import isfile -from lib_pornhub import ph_config_dl_dir, ph_get_video +from lib_pornhub import ( + ascii_banner, ph_config_dl_dir, ph_get_playlist, ph_get_video +) +from argparse import ArgumentParser import ssl @@ -16,45 +18,57 @@ else: ssl._create_default_https_context = _create_unverified_https_context -filename = "video_list.json" -video_list = [] -fl_video_list = [] - - -def save_file(): - global filename, fl_video_list +def save_file(filename, list_to_file): with open(filename, encoding="utf-8", mode="w") as f: - dump(fl_video_list, f, indent=4) + for url in list_to_file: + f.write(url + "\n") def main(): - global filename, video_list, fl_video_list - if not isfile(filename): - print("file not found") - sysexit() - try: - with open(filename, encoding="utf-8") as f: - temp = load(f) - video_list = temp.copy() - fl_video_list = temp.copy() - except decoder.JSONDecodeError: - print("syntax error, check file") - sysexit() - ph_config_dl_dir(None) - video_len = len(video_list) - count = 0 - for url in video_list: - print('[+] URL: ' + url) - ph_get_video(url) - fl_video_list.remove(url) - count += 1 - print("\nDownloaded: {}/{}\n".format(count, video_len)) - save_file() + parser = ArgumentParser() + parser.add_argument('--url', type=str, help='URL of Pornhub video') + parser.add_argument('--playlist', nargs='?', const='best', choices=['most-viewed', 'best', 'top-rated', 'longest'], help='Optional ordering of videos') + parser.add_argument('--limit', type=int, help='Maximum number of videos', default=0) + parser.add_argument('--dir', type=str, help='Output directory') + parser.add_argument('--file', type=str, help='File with links to download') + args = parser.parse_args() + ################################ + ascii_banner("PornHub-dl") + print("\t\tMade by tnt2402\n") + print("\t\tModified by JDM17") + print("\n\n\n########################################################\n") + ################################ -if __name__ == "__main__": - try: - main() - except KeyboardInterrupt: - save_file() - sysexit() + ph_config_dl_dir(args.dir) + if (args.url == None and args.playlist != None): + print("URL cannot be empty!") + sys.exit() + elif (args.playlist != None): + ph_get_playlist(args.url, args.playlist, args.limit) + elif (args.url != None): + ph_get_video(args.url) + elif (args.file != None): + if not isfile(args.file): + print("file not found") + sysexit() + with open(args.file, encoding="utf-8") as f: + temp = list(filter(None, f.read().strip().split("\n"))) + list_from_file = temp.copy() + new_file = temp.copy() + video_len = len(list_from_file) + count = 0 + try: + for url in list_from_file: + print('[+] URL: ' + url) + ph_get_video(url) + new_file.remove(url) + count += 1 + print("\nProcessed: {}/{}\n".format(count, video_len)) + except KeyboardInterrupt: + pass + save_file(args.file, new_file) + + +if __name__ == '__main__': + main() diff --git a/pornhub_dl_old.py b/pornhub_dl_old.py deleted file mode 100644 index 0cd8614..0000000 --- a/pornhub_dl_old.py +++ /dev/null @@ -1,39 +0,0 @@ -#!/usr/bin/env python -from lib_pornhub import * -import argparse - -import ssl - -try: - _create_unverified_https_context = ssl._create_unverified_context -except AttributeError: - # Legacy Python that doesn't verify HTTPS certificates by default - pass -else: - # Handle target environment that doesn't support HTTPS verification - ssl._create_default_https_context = _create_unverified_https_context - -def main(): - parser = argparse.ArgumentParser() - parser.add_argument('--url', type=str, help='URL of Pornhub video') - parser.add_argument('--playlist', nargs='?', const='best', choices=['most-viewed', 'best', 'top-rated', 'longest'], help='Optional ordering of videos') - parser.add_argument('--limit', type=int, help='Maximum number of videos', default=0) - parser.add_argument('--dir', type=str, help='Output directory') - args = parser.parse_args() - - ################################ - ascii_banner("PornHub-dl") - print(" Made by tnt2402\n\n\n########################################################") - ################################ - ph_config_dl_dir(args.dir) - if (args.url == None and args.playlist != None): - print("URL cannot be empty !") - sys.exit() - elif (args.playlist != None): - ph_get_playlist(args.url, args.playlist, args.limit) - elif (args.url != None): - ph_get_video(args.url) - - -if __name__ == '__main__': - main() diff --git a/pornhub_dl_only_file.py b/pornhub_dl_only_file.py new file mode 100644 index 0000000..ecaa2eb --- /dev/null +++ b/pornhub_dl_only_file.py @@ -0,0 +1,61 @@ +#!/usr/bin/env python +from sys import exit as sysexit +from json import decoder, load, dump +from os.path import isfile +from lib_pornhub import ph_config_dl_dir, ph_get_video +import ssl + + +try: + _create_unverified_https_context = ssl._create_unverified_context +except AttributeError: + # Legacy Python that doesn't verify HTTPS certificates by default + pass +else: + # Handle target environment that doesn't support HTTPS verification + ssl._create_default_https_context = _create_unverified_https_context + + +filename = "video_list.json" +video_list = [] +fl_video_list = [] + + +def save_file(): + global filename, fl_video_list + with open(filename, encoding="utf-8", mode="w") as f: + dump(fl_video_list, f, indent=4) + + +def main(): + global filename, video_list, fl_video_list + if not isfile(filename): + print("file not found") + sysexit() + try: + with open(filename, encoding="utf-8") as f: + temp = load(f) + video_list = temp.copy() + fl_video_list = temp.copy() + except decoder.JSONDecodeError: + print("syntax error, check file") + sysexit() + ph_config_dl_dir(None) + video_len = len(video_list) + count = 0 + for url in video_list: + print('[+] URL: ' + url) + ph_get_video(url) + fl_video_list.remove(url) + count += 1 + print("\nDownloaded: {}/{}\n".format(count, video_len)) + save_file() + + +if __name__ == "__main__": + try: + main() + except KeyboardInterrupt: + save_file() + sysexit() + save_file() diff --git a/yt-dlp.exe b/yt-dlp.exe index d5bac0b..a1e4a31 100644 Binary files a/yt-dlp.exe and b/yt-dlp.exe differ