mirror of
https://github.com/anatolykopyl/youtube-cdl.git
synced 2026-03-26 04:45:11 +00:00
🚸 Added cli args
This commit is contained in:
70
main.py
70
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"])])
|
||||
|
||||
Reference in New Issue
Block a user