pytube / scripts /pytubectl
Jose Diaz-Gonzalez
Add missing whitespace between operators
6ec654e
raw
history blame
2.96 kB
#!/usr/bin/env python
from pytube import YouTube
from pytube.utils import print_status
from pytube.utils import FullPaths
from pytube.exceptions import YouTubeError
from pprint import pprint
import sys
import argparse
def _main():
parser = argparse.ArgumentParser(description='YouTube video downloader')
parser.add_argument("url", help="The URL of the Video to be downloaded")
parser.add_argument("--extension", "-e",
help="The requested format of the video", dest="ext")
parser.add_argument("--resolution", "-r",
help="The requested resolution", dest="res")
parser.add_argument("--path", "-p", action=FullPaths,
help="The path to save the video to.", dest="path")
parser.add_argument("--filename", "-f",
dest="filename",
help=("The filename, without extension, "
"to save the video in."))
args = parser.parse_args()
yt = YouTube()
try:
yt.url = args.url
res_formts = yt.videos
res_formts = ["%s %s" % (str(res_formts[index].extension), str(res_formts[index].resolution)) for index, video in enumerate(res_formts)]
except YouTubeError:
print "Incorrect video URL."
sys.exit(1)
if args.filename:
yt.filename = args.filename
if args.ext or args.res:
if not all([args.ext, args.res]):
print "\nMake sure you give either of the below specified format/resolution combination.\n"
pprint(res_formts)
sys.exit(1)
if args.ext and args.res:
# There's only ope video that matches both so get it
vid = yt.get(args.ext, args.res)
# Check if there's a video returned
if not vid:
print "\nThere's no video with the specified format/resolution combination.\n"
pprint(res_formts)
sys.exit(1)
elif args.ext:
# There are several videos with the same extension
videos = yt.filter(extension=args.ext)
# Check if we have a video
if not videos:
print "There are no videos in the specified format."
sys.exit(1)
# Select the highest resolution one
vid = max(videos)
elif args.res:
# There might be several videos in the same resolution
videos = yt.filter(res=args.res)
# Check if we have a video
if not videos:
print "There are no videos in the specified in the specified resolution."
sys.exit(1)
# Select the highest resolution one
vid = max(videos)
else:
# If nothing is specified get the highest resolution one
vid = max(yt.videos)
try:
vid.download(path=args.path, on_progress=print_status)
except KeyboardInterrupt:
print "Download interrupted."
sys.exit(1)
if __name__ == '__main__':
_main()