-
Notifications
You must be signed in to change notification settings - Fork 0
/
SongDL.py
95 lines (77 loc) · 3.21 KB
/
SongDL.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
from yt_dlp import YoutubeDL
import urllib.request
import re
from time import sleep
import os
from moviepy.editor import *
def Initialize():
version = "0.1.0" #Current Application Version
versionURL = "https://raw.githubusercontent.com/VicCodezz/JMHDES-SongDL/master/VERSION.txt" #Github URL of Latest Version
urllib.request.urlretrieve(versionURL, "v") #Rerieves Latest Version
openV = open("v", "r").read() #Reads Data
if openV != version: #Quits Application if not Newest Version
print("Please Download New Version...")
sleep(5)
quit()
os.remove("v") #Get rid of temporary Version Check file
#Removes all illegal characters from filename
def removeIllegal(illegal):
illegal = illegal.replace("#", " ")
illegal = illegal.replace("%", " ")
illegal = illegal.replace("&", "and")
illegal = illegal.replace("{", " ")
illegal = illegal.replace("}", " ")
illegal = illegal.replace("\\", " ")
illegal = illegal.replace("<", " ")
illegal = illegal.replace(">", " ")
illegal = illegal.replace("*", " ")
illegal = illegal.replace("?", " ")
illegal = illegal.replace("$", "S") #Replace Dollar Sign with "S" (Used primarily for Rappers using a DOllar Sign in place of an 'S'
illegal = illegal.replace("!", " ")
illegal = illegal.replace("'", "") #Replace Apostrophe with Nothing
illegal = illegal.replace('"', " ")
illegal = illegal.replace(":", " ")
illegal = illegal.replace("@", " ")
illegal = illegal.replace("+", " ")
illegal = illegal.replace("`", " ")
illegal = illegal.replace("|", " ")
illegal = illegal.replace("=", " ")
return illegal
def Download(f, extension=".mp3"):
try: #Tries To Open songs.txt
inp = open(f, "r")
songs = inp.readlines()
except FileNotFoundError: #Quits if unable to open songs.txt
print("No songs.txt file found.\nClosing in 10 seconds...")
sleep(10)
quit()
for i in range(0, len(songs)): #For Loop
songName = songs[i] #Gets Current Song Name
songName = songName.replace("\n", "") #Removes Linebreak in song name
urlName = songName.replace(" ", "+") #Replaces Spaces with "+" (For URL reasons)
urlName = urlName.replace("\n", "")
html = urllib.request.urlopen("https://www.youtube.com/results?search_query=" + urlName) #Gets YouTube Link
video_id = re.findall(r"watch\?v=(\S{11})", html.read().decode()) #Gets Video IDs As List
video_id = video_id[0] #Gets The ID of the First Video
vidurl = "https://www.youtube.com/watch?v=" + video_id
del(video_id)
del(html)
del(urlName)
vidinfo = YoutubeDL().extract_info(
url = vidurl,download=False
)
fname = f"{songName}.temp"
o ={
'format':'bestaudio/best',
'keepvideo':False,
'outtmpl':fname
}
with YoutubeDL(o) as ydl:
ydl.download([vidinfo['webpage_url']])
print("Converting with MoviePy")
FILETOCONVERT = AudioFileClip(fname)
FILETOCONVERT.write_audiofile((songName + extension))
FILETOCONVERT.close()
os.remove(fname)
Initialize()
Download(input("File Location:\n"))