Simple Python 3 youtube downloader

Photo by NordWood Themes on Unsplash

Simple Python 3 youtube downloader

Download any video with Python on Youtube

Theo van der Sluijs

Published on Sep 16, 2019

2 min read

Subscribe to my newsletter and never miss my upcoming articles

So.... when going to work by train, I like to watch some youtube video's.

I just saw that Kalle Hallden, posted a new python development video... but the internet connection (4G) was not so good.

So I just created this small script to easily download youtube video's. I used pytube to do so.

"""
Author : Theo van der Sluijs
License: MIT
Version: 1.0
V-Date: 16 sept 2019
email: theo@vandersluijs.nl
installation:
create a folder called : youtube
install pytube: pip install pytube
run: python downtube.puy
just add one or multiple youtube id's
(multiple comma separated)
Have fun!
https://www.buymeacoffee.com/itheo
"""

from pytube import YouTube
import sys
import os


class DownTube:
    def __init__(self, folder: str = None):
        self.folder = folder
        self.what_folder()
        self.download()

    def youtube_list(self, youtube_ids):
        return youtube_ids.split(',')


    def what_folder(self):
        if self.folder is not None:
            cp = os.getcwd()
            folder = os.path.join(cp, self.folder)
            os.makedirs(folder, exist_ok=True)
            return True

        while True:
            self.folder = input("Where should I download : ")
            if self.folder is not None and self.folder != "":
                break

    def download(self):
        yes_now = ['y', 'n']
        while True:
            you_tube = input("Give me the youtube id('s)): ")
            if you_tube is not None and you_tube != "":
                list = self.youtube_list(you_tube)
                for l in list:
                    self.do_download(l)

            more = ""
            while more not in yes_now:
                more = input("Download another one [y/n] ")
                if more == 'n':
                    sys.exit()

        print('all done')

    def do_download(self, id: str = None):
        try:
            yt = YouTube(f"http://youtube.com/watch?v={id}")
            yt.streams.filter(progressive=True, file_extension='mp4').order_by('resolution').desc().first().download(self.folder)
        except Exception as e:
            print(e)


if __name__ == '__main__':
    dt = DownTube('YouTube')

Grab the code on Gist

Use it, however you want. And do not forget to hit that Donate button! :-)

 
Share this