File size: 2,046 Bytes
6be5e98
4773772
6be5e98
4773772
133d36d
4773772
 
235629a
9988261
 
 
 
 
 
 
 
 
4773772
 
b856aeb
4773772
8253e1e
4773772
 
 
b8b8d7d
f47f7e7
1b54806
33d1f47
4773772
 
 
 
 
 
 
 
 
6be5e98
b8b8d7d
6be5e98
4773772
 
 
 
 
 
 
 
 
ab4cd97
4773772
6be5e98
4773772
 
 
6be5e98
4773772
 
 
6be5e98
4773772
 
 
 
 
 
 
 
 
 
 
 
b8b8d7d
4773772
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
import streamlit as st
from pytube import YouTube

hide_streamlit_style = """
<style>
#MainMenu {visibility: hidden;}
footer {visibility: hidden;}

.stApp{
background-image: linear-gradient(115deg,#FFAF00,#FFC500,#FFD600,#FCED00,#F9F380,#F6F7CD);
  animation: rotate 7s linear infinite;
}
@keyframes rotate {
  100%{
    filter: hue-rotate(-360deg)
  }
}
</style>
"""

st.markdown(hide_streamlit_style, unsafe_allow_html=True)

class YouTubeDownloader:
    @staticmethod
    def run():
        st.header("")
        url = st.text_input("Enter Here")
        start_button = st.button("Start")

        if start_button:
            if url:
                YouTubeDownloader.validate_url(url)
                with st.expander("preview video"):
                    st.video(url)
                YouTubeDownloader.cleanup()
                file_ = YouTubeDownloader.download_video(url)
                st.video(file_)
                YouTubeDownloader.helper_message()

        st.markdown("")

    @staticmethod
    def download_video(url):
        with st.spinner("Downloading..."):
            local_file = (
                YouTube(url)
                .streams.filter(progressive=True, file_extension="mp4")
                .first()
                .download()
            )
            st.success("Downloaded")
        return local_file

    @staticmethod
    def validate_url(url):
        import validators

        if not validators.url(url):
            st.error("Hi there ๐Ÿ‘‹ URL seems invalid ๐Ÿ‘ฝ")
            st.stop()

    @classmethod
    def cleanup(cls):
        import pathlib
        import glob

        junks = glob.glob("*.mp4")
        for junk in junks:
            pathlib.Path(junk).unlink()

    @classmethod
    def helper_message(cls):
        st.write(
            "> To save  to the local computer, "
            "click the vertical ... icon (aka hamburger button) in the bottom-right corner (in the video above) and click download."
        )


if __name__ == "__main__":
    YouTubeDownloader.run()