Skip to content

Commit 0d8db90

Browse files
Add files via upload
1 parent fe8b923 commit 0d8db90

File tree

2 files changed

+263
-0
lines changed

2 files changed

+263
-0
lines changed
1.39 KB
Loading
Lines changed: 263 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,263 @@
1+
# ================= Importing Modules ===================
2+
from tkinter import *
3+
import tkinter as tk
4+
from datetime import datetime
5+
from PIL import ImageTk, Image
6+
from tkinter.filedialog import askdirectory
7+
from tkinter import messagebox
8+
import time
9+
from pytube import YouTube
10+
from pytube import Playlist
11+
from tkinter.ttk import Progressbar
12+
from tkinter.scrolledtext import ScrolledText
13+
#https://youtu.be/GvTcpfSnOMQ
14+
# ===========================================================
15+
16+
class YoutubeDownloader():
17+
18+
# ========== Video Path ===================
19+
def select_v_path(self):
20+
self.location = askdirectory()
21+
22+
if self.video_path.get() != "":
23+
self.video_path.delete(0,END)
24+
self.video_path.insert(END,self.location)
25+
else:
26+
self.video_path.insert(END,self.location)
27+
28+
# ============= Playlist Path ================
29+
def select_p_path(self):
30+
self.location = askdirectory()
31+
32+
if self.playlist_path.get() != "":
33+
self.playlist_path.delete(0,END)
34+
self.playlist_path.insert(END,self.location)
35+
else:
36+
self.playlist_path.insert(END,self.location)
37+
38+
39+
# ======================= Downloading Video ====================
40+
def download_video(self):
41+
if self.video_url.get() == "":
42+
messagebox.showerror("Error","Please Paste Video URL")
43+
elif 'https://' not in self.video_url.get():
44+
messagebox.showerror("Error","Wrong Video Url")
45+
elif self.video_path.get() == "":
46+
messagebox.showerror("Error","Please provide Path")
47+
else:
48+
try:
49+
50+
self.url = self.video_url.get()
51+
self.path = self.video_path.get()
52+
self.video = YouTube(self.url)
53+
self.stream = self.video.streams.filter(only_audio=False).first()
54+
print("download started",self.video.title)
55+
56+
print("download completed",self.video.title)
57+
58+
self.root = tk.Tk()
59+
self.root.geometry('300x150')
60+
self.root.maxsize(300,150)
61+
self.root.minsize(300,150)
62+
self.root.title('Video Dowloading')
63+
self.root['bg'] = "white"
64+
65+
66+
self.start_downloading = Label(self.root,text="Video downloading .....",fg="red",font=('verdana',10,'bold'),bg="white")
67+
self.start_downloading.place(x=40,y=10)
68+
69+
self.stream.download(output_path = self.path,filename=None)
70+
71+
self.progress = Progressbar(self.root,orient = HORIZONTAL,length=250,mode='determinate')
72+
self.progress['value'] = 20
73+
self.root.update_idletasks()
74+
self.progress['value'] = 40
75+
self.root.update_idletasks()
76+
self.progress['value'] = 60
77+
self.root.update_idletasks()
78+
self.progress['value'] = 80
79+
self.root.update_idletasks()
80+
self.progress['value'] = 100
81+
self.root.update_idletasks()
82+
self.progress.place(x=20,y=40)
83+
84+
self.dow_details = ScrolledText(self.root,width=30,height=3,font=('verdana',8,'bold'))
85+
self.dow_details.place(x=20,y=70)
86+
self.dow_details.insert(END,f'{self.video_path.get()}\n {self.video.title}')
87+
88+
self.dow_success = Label(self.root,text="Video downloaded successfully .....",fg="red",font=('verdana',10,'bold'),bg="white")
89+
self.dow_success.place(x=10,y=120)
90+
91+
self.root.mainloop()
92+
93+
94+
except:
95+
time.sleep(10)
96+
messagebox.showerror("Error","Unable to Download Video | Something went wrong !!")
97+
98+
# ========================= End ==============================
99+
100+
101+
# ======================= Downloading Playlist ====================
102+
def download_playlist(self):
103+
if self.playlist_url.get() == "":
104+
messagebox.showerror("Error","Please Paste playlist URL")
105+
elif 'https://' not in self.playlist_url.get():
106+
messagebox.showerror("Error","Wrong playlist Url")
107+
elif self.playlist_path.get() == "":
108+
messagebox.showerror("Error","Please provide Path")
109+
else:
110+
try:
111+
self.url = self.playlist_url.get()
112+
self.path = self.playlist_path.get()
113+
self.playlist = Playlist(self.url)
114+
115+
self.root = tk.Tk()
116+
self.root.geometry('300x150')
117+
self.root.maxsize(300,150)
118+
self.root.minsize(300,150)
119+
self.root.title('Playlist Dowloading')
120+
self.root['bg'] = "white"
121+
122+
123+
self.start_downloading = Label(self.root,text="Playlist downloading .....",fg="red",font=('verdana',10,'bold'),bg="white")
124+
self.start_downloading.place(x=40,y=10)
125+
126+
for self.video in self.playlist:
127+
self.video.streams.get_highest_resolution().download(output_path = self.path,filename=None)
128+
129+
self.progress = Progressbar(self.root,orient = HORIZONTAL,length=250,mode='determinate')
130+
self.progress['value'] = 20
131+
self.root.update_idletasks()
132+
self.progress['value'] = 40
133+
self.root.update_idletasks()
134+
self.progress['value'] = 60
135+
self.root.update_idletasks()
136+
self.progress['value'] = 80
137+
self.root.update_idletasks()
138+
self.progress['value'] = 100
139+
self.root.update_idletasks()
140+
self.progress.place(x=20,y=40)
141+
142+
self.dow_details = ScrolledText(self.root,width=30,height=3,font=('verdana',8,'bold'))
143+
self.dow_details.place(x=20,y=70)
144+
self.dow_details.insert(END,f'{self.playlist_path.get()}\n {self.video.title}')
145+
146+
self.dow_success = Label(self.root,text="Playlist downloaded successfully .....",fg="red",font=('verdana',10,'bold'),bg="white")
147+
self.dow_success.place(x=10,y=120)
148+
149+
self.root.mainloop()
150+
151+
152+
except:
153+
time.sleep(10)
154+
messagebox.showerror("Error","Unable to Download Video | Something went wrong !!")
155+
156+
# ========================= End ==============================
157+
158+
# ======================== Clear =======================
159+
160+
def Clear(self):
161+
self.video_url.delete(0,END)
162+
self.video_path.delete(0,END)
163+
self.playlist_url.delete(0,END)
164+
self.playlist_path.delete(0,END)
165+
166+
# ======================== Quit =======================
167+
def Quit(self):
168+
self.root.destroy()
169+
170+
171+
172+
# ============================== Main Window ========================
173+
def __init__(self):
174+
self.root = tk.Tk()
175+
self.root.geometry('500x270')
176+
self.root.maxsize(500,270)
177+
self.root.minsize(500,270)
178+
self.root['bg']="white"
179+
self.root.title('Youtube Downloader')
180+
181+
self.l1 = Label(self.root,text="Youtube Downloader",font=('verdana',15,'bold'),bg="white",fg="red")
182+
self.l1.place(x=130,y=5)
183+
184+
self.design1 = Label(self.root,bg="red",width=20)
185+
self.design1.place(x=0,y=45)
186+
187+
self.date = Label(self.root,text=datetime.now(),font=('verdana',10,'bold'),bg="white")
188+
self.date.place(x=140,y=45)
189+
190+
self.design2 = Label(self.root,bg="red",width=20)
191+
self.design2.place(x=360,y=45)
192+
193+
self.design3 = Label(self.root,bg="red",width=3,height=6)
194+
self.design3.place(x=242,y=90)
195+
196+
self.yt_icon = ImageTk.PhotoImage(Image.open('youtube.png'))
197+
self.logo = Label(self.root,image=self.yt_icon,bg="white")
198+
self.logo.place(x=220,y=70)
199+
200+
201+
# ==================== Video ============================
202+
203+
self.frame1 = LabelFrame(self.root,text="Download Video",width=180,height=180,font=('verdana',10,'bold'),bg="white",fg="red",borderwidth=5,relief=SUNKEN,highlightcolor="red",highlightbackground="red")
204+
self.frame1.place(x=10,y=80)
205+
206+
self.v_url = Label(self.frame1,text="Paste url Here ...",font=('verdana',10,'bold'),bg="white")
207+
self.v_url.place(x=20,y=2)
208+
209+
self.video_url = Entry(self.frame1,width=24,relief=SUNKEN,borderwidth=2,bg="red",fg="white")
210+
self.video_url.place(x=10,y=30)
211+
212+
self.v_path = Label(self.frame1,text="Select Path",font=('verdana',10,'bold'),bg="white")
213+
self.v_path.place(x=10,y=60)
214+
215+
self.video_path = Entry(self.frame1,width=15,relief=SUNKEN,borderwidth=2,bg="red",fg="white")
216+
self.video_path.place(x=10,y=90)
217+
218+
self.file = Button(self.frame1,text="Browser",font=('verdana',8,'bold'),relief=RAISED,bg="white",command=self.select_v_path)
219+
self.file.place(x=105,y=88)
220+
221+
self.download_video = Button(self.frame1,text="Download",font=('verdana',9,'bold'),relief=RAISED,bg="white",borderwidth=4,command=self.download_video)
222+
self.download_video.place(x=40,y=125)
223+
224+
225+
# =============== Palylist =======================
226+
227+
self.frame2 = LabelFrame(self.root,text="Download Playlist",width=180,height=180,font=('verdana',10,'bold'),bg="white",fg="red",borderwidth=5,relief=SUNKEN,highlightcolor="red",highlightbackground="red")
228+
self.frame2.place(x=310,y=80)
229+
230+
self.p_url = Label(self.frame2,text="Paste url Here ...",font=('verdana',10,'bold'),bg="white")
231+
self.p_url.place(x=20,y=2)
232+
233+
self.playlist_url = Entry(self.frame2,width=24,relief=SUNKEN,borderwidth=2,bg="red",fg="white")
234+
self.playlist_url.place(x=10,y=30)
235+
236+
self.p_path = Label(self.frame2,text="Select Path",font=('verdana',10,'bold'),bg="white")
237+
self.p_path.place(x=10,y=60)
238+
239+
self.playlist_path = Entry(self.frame2,width=15,relief=SUNKEN,borderwidth=2,bg="red",fg="white")
240+
self.playlist_path.place(x=10,y=90)
241+
242+
self.playlist_file = Button(self.frame2,text="Browser",font=('verdana',8,'bold'),relief=RAISED,bg="white",command=self.select_p_path)
243+
self.playlist_file.place(x=105,y=88)
244+
245+
self.download_playlist = Button(self.frame2,text="Download",font=('verdana',9,'bold'),relief=RAISED,bg="white",borderwidth=4,command=self.download_playlist)
246+
self.download_playlist.place(x=40,y=125)
247+
248+
self.clear = Button(self.root,text="Clear",font=('verdana',10,'bold'),bg="white",fg="red",padx=10,relief=RAISED,borderwidth=3,command=self.Clear)
249+
self.clear.place(x=220,y=195)
250+
251+
self.quit = Button(self.root,text="Quit",font=('verdana',10,'bold'),bg="red",fg="white",padx=15,relief=RAISED,borderwidth=3,command=self.Quit)
252+
self.quit.place(x=220,y=230)
253+
254+
self.root.mainloop()
255+
256+
# =========================== End =====================================
257+
258+
# ============== Calling ===========
259+
260+
if __name__ == '__main__':
261+
YoutubeDownloader()
262+
263+
====================================

0 commit comments

Comments
 (0)