-
Notifications
You must be signed in to change notification settings - Fork 0
/
functions.py
121 lines (88 loc) · 3.33 KB
/
functions.py
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
from pytube import YouTube
from pytube import Playlist
# for in-built progress bar of pytube
from pytube.cli import on_progress
# its not good looking but fine
import re
def display_title(link):
"""
Display the title
"""
print("Video found: {}".format(YouTube(link).title))
def display_playlist_title(playlistlink):
"""
Display the playlist title
"""
print("Playlist found: {}".format(Playlist(playlistlink).title))
def get_size(link):
"""
Display the download size
"""
youtubeObject = YouTube(link)
size = youtubeObject.streams.get_highest_resolution().filesize
return size
def get_playlist_size(playlistlink):
totalSize = 0
for url in Playlist(playlistlink).video_urls:
totalSize += get_size(url)
return totalSize
def download_video(link):
"""
function to download video from the link
"""
# Validate the link
pattern = re.compile(r'^(https?\:\/\/)?(www\.)?(youtube\.com|youtu\.?be)\/.+$')
# search for a match
match = pattern.search(link)
# check if a match was found
if match:
print('Valid YouTube link')
display_title(link)
print("Download size: {}".format(get_size(link)))
# to get the progress bar while downloading pass the on_progress_callback parameter with on_progress
youtubeObject = YouTube(link, on_progress_callback = on_progress)
# other arguments are;
# youtubeObject = YouTube(link, on_progress_callback, oc_complete_callback, proxies, use_oauth, allow_oauth_cache)
youtubeObject = youtubeObject.streams.get_highest_resolution()
# .stream.get_highest_resolution() will automatically download the highest resolution available
try:
youtubeObject.download()
# inside download you can pass the location to download
print("Download successful")
except:
print("An error has occurred!!!")
else:
print('Invalid YouTube link')
def download_playlist(playlistlink):
# Validate the link
pattern = re.compile(r'^(https?\:\/\/)?(www\.)?(youtube\.com|youtu\.?be)\/playlist\?list=.+$')
# search for a match
match = pattern.search(playlistlink)
# check if a match was found
if match:
print('Valid YouTube playlist link')
# Using Playlist module
display_playlist_title(playlistlink)
p = Playlist(playlistlink)
print("{} videos in playlist".format(len(p.videos)))
for videos in p.videos:
print(videos.title)
print("Download size: {}".format(get_playlist_size(playlistlink)))
print("Continue download[Y/n]?")
response = input()
if response == "Y" or response == "y":
flag = True
for i in p.video_urls:
youtubeObject = YouTube(i, on_complete_callback = on_progress)
youtubeObject = youtubeObject.streams.get_highest_resolution()
try:
youtubeObject.download()
except:
print("An error has occurred!!!")
flag = False
break
if flag == True: print("Download Successful.")
else:
print("Download canceled!!!")
else:
print('Invalid YouTube playlist link')