diff --git a/main.py b/main.py index 62eaf49..c7a2102 100644 --- a/main.py +++ b/main.py @@ -3,45 +3,65 @@ from rich.console import Console from pathlib import Path import os import json +import argparse from getch import getch -import keyboard import youtube_dl from get_channels import retrieve_youtube_subscriptions -output_dir = 'output' +parser = argparse.ArgumentParser() +parser.add_argument('-i', '--input', action='store', type=str, + help='Path to json file generated by previously running this program.') +parser.add_argument('-o', '--output', action='store', type=str, + help='Output folder.') +parser.add_argument('-a', '--all', action='store_true', + help='Download all subscriptions.') + +args = parser.parse_args() + +json_input = args.input +output_dir = args.output or 'output' +download_all = args.all + c = Console() ydl_opts = { - 'format': 'best', - 'outtmpl': '%(id)s.%(ext)s' + 'format': 'best' } -all_channels = retrieve_youtube_subscriptions() -curr_channel = 0 -c.print(f'You will be prompted if you want to download \ -a channel for each of your subscriptions. (total {len(all_channels)})') -for ch in all_channels: - curr_channel += 1 - c.print(f'[dim][{curr_channel}/{len(all_channels)}]:[/dim] {ch["title"]} [cyan]\[y/n]') - while True: - key = getch() - if key == "y": +if json_input: + f = open(json_input, "r", encoding='utf-8') + all_channels = json.loads(f.read()) + f.close() +else: + all_channels = retrieve_youtube_subscriptions() + curr_channel = 0 + c.print(f'You will be prompted if you want to download \ + a channel for each of your subscriptions. (total {len(all_channels)})') + for ch in all_channels: + if download_all: ch['download'] = True - break - elif key == "n": - ch['download'] = False - break else: - c.print('Press "y" or "n"', style='orange') + curr_channel += 1 + c.print(f'[dim][{curr_channel}/{len(all_channels)}]:[/dim] {ch["title"]} [cyan]\[y/n]') + while True: + key = getch() + if key == "y": + ch['download'] = True + break + elif key == "n": + ch['download'] = False + break + else: + c.print('Press "y" or "n"', style='orange') -c.print('All done! 🎉') -c.print('Saving to output.json...', style='italic') -f = open("output.json", "a", encoding='utf-8') -f.write(json.dumps(all_channels)) -f.close() + c.print('All done! 🎉') + c.print('Saving to download_list.json...', style='italic') + f = open("download_list.json", "w", encoding='utf-8') + f.write(json.dumps(all_channels)) + f.close() for ch in all_channels: if ch['download']: - ydl_opts['outtmpl'] = '{}/{}/%(id)s.%(ext)s'.format(output_dir, ch['title']) + ydl_opts['outtmpl'] = '{}/{}/%(title)s.%(ext)s'.format(output_dir, ch['title']) with youtube_dl.YoutubeDL(ydl_opts) as ydl: Path(os.path.join(output_dir, ch['title'])).mkdir(parents=True, exist_ok=True) ydl.download(['https://www.youtube.com/channel/{}'.format(ch["id"])])