mirror of
https://github.com/cooperhammond/irs.git
synced 2025-01-08 20:05:27 +00:00
Laid down code for downloading of Spotify playlists. Nothing has actually changed yet.
This commit is contained in:
parent
afac16a0bf
commit
f57b86e717
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -10,4 +10,4 @@ update_pypi_and_github.py
|
||||||
# Currently in progress
|
# Currently in progress
|
||||||
/flexx-app/
|
/flexx-app/
|
||||||
/.idea/
|
/.idea/
|
||||||
*test*
|
*test.py
|
||||||
|
|
|
@ -93,8 +93,12 @@ class Manager:
|
||||||
|
|
||||||
if given_up_score >= 10:
|
if given_up_score >= 10:
|
||||||
in_title = True
|
in_title = True
|
||||||
|
try:
|
||||||
|
audio_url = ("http://www.youtube.com/watch?v=" + search_results[i])
|
||||||
|
except Exception:
|
||||||
|
print (bc.FAIL + "Could not find song." + bc.ENDC)
|
||||||
|
exit(1)
|
||||||
|
|
||||||
audio_url = ("http://www.youtube.com/watch?v=" + search_results[i])
|
|
||||||
title = strip_special_chars((BeautifulSoup(urlopen(audio_url), 'html.parser')).title.string.lower())
|
title = strip_special_chars((BeautifulSoup(urlopen(audio_url), 'html.parser')).title.string.lower())
|
||||||
song_title = song.lower().split("/")
|
song_title = song.lower().split("/")
|
||||||
|
|
||||||
|
@ -193,21 +197,13 @@ class Manager:
|
||||||
results = spotify.search(q=search, type='album')
|
results = spotify.search(q=search, type='album')
|
||||||
items = results['albums']['items']
|
items = results['albums']['items']
|
||||||
if len(items) > 0:
|
if len(items) > 0:
|
||||||
print (bc.HEADER + "Album results:")
|
album = choose_from_list(items)
|
||||||
choice = ""
|
|
||||||
while choice not in tuple(range(0, 5)):
|
|
||||||
for index, album in enumerate(items[:5]):
|
|
||||||
print (bc.HEADER + "\t" + str(index) + ") " + album["name"])
|
|
||||||
choice = int(input(bc.YELLOW + "\nEnter album number: " + bc.ENDC))
|
|
||||||
|
|
||||||
album = items[choice]
|
|
||||||
album_id = (album['uri'])
|
album_id = (album['uri'])
|
||||||
contents = spotify.album_tracks(album_id)["items"]
|
contents = spotify.album_tracks(album_id)["items"]
|
||||||
contents = contents[0:-1]
|
contents = contents[0:-1]
|
||||||
names = []
|
names = []
|
||||||
for song in contents:
|
for song in contents:
|
||||||
song = song["name"]
|
song = song["name"]
|
||||||
song = song.split(" - ")[0]
|
|
||||||
names.append(song)
|
names.append(song)
|
||||||
return names, album_id
|
return names, album_id
|
||||||
else:
|
else:
|
||||||
|
@ -227,6 +223,16 @@ class Manager:
|
||||||
album = items[0]['images'][0]['url']
|
album = items[0]['images'][0]['url']
|
||||||
return album
|
return album
|
||||||
|
|
||||||
|
def rip_spotify_list(self, search, type, id=None):
|
||||||
|
spotify = spotipy.Spotify()
|
||||||
|
|
||||||
|
results = spotify.search(q=search, type=type)
|
||||||
|
items = results[type + "s"]['items']
|
||||||
|
if len(items) > 0:
|
||||||
|
spotify_list = choose_from_spotify_list(items)
|
||||||
|
else:
|
||||||
|
print (bc.FAIL + "No results were found." + bc.ENDC)
|
||||||
|
|
||||||
|
|
||||||
def rip_album(self):
|
def rip_album(self):
|
||||||
search = self.args.artist + " " + self.args.album
|
search = self.args.artist + " " + self.args.album
|
||||||
|
|
17
irs/utils.py
17
irs/utils.py
|
@ -110,3 +110,20 @@ def finish_unorganize(file_name):
|
||||||
os.rename(file_name, folder_name + "/" + file_name)
|
os.rename(file_name, folder_name + "/" + file_name)
|
||||||
|
|
||||||
os.rename(folder_name, folder_name.replace("playlist - ", ""))
|
os.rename(folder_name, folder_name.replace("playlist - ", ""))
|
||||||
|
|
||||||
|
def choose_from_spotify_list(thelist):
|
||||||
|
thelist = list(thelist)
|
||||||
|
print ("Results:")
|
||||||
|
choice = ""
|
||||||
|
while choice not in tuple(range(0, len(thelist[:5]))):
|
||||||
|
for index, album in enumerate(thelist[:5]):
|
||||||
|
info = spotify.user(album["owner"]["id"])
|
||||||
|
try:
|
||||||
|
display_info = " (" + str(info["followers"]["total"]) + " followers)" + " - " + info["display_name"]
|
||||||
|
except Exception:
|
||||||
|
display_info = " - info couldn't be found"
|
||||||
|
|
||||||
|
print ("\t" + str(index) + ") " + album["name"] + display_info)
|
||||||
|
choice = int(input(bc.YELLOW + "\nEnter result number: " + bc.ENDC))
|
||||||
|
|
||||||
|
return thelist[choice]
|
||||||
|
|
2
setup.py
2
setup.py
|
@ -2,7 +2,7 @@ from setuptools import setup
|
||||||
|
|
||||||
setup(
|
setup(
|
||||||
name='irs',
|
name='irs',
|
||||||
version='2.7.19',
|
version='2.7.20',
|
||||||
description='A music downloader that just gets metadata.',
|
description='A music downloader that just gets metadata.',
|
||||||
url='https://github.com/kepoorhampond/irs',
|
url='https://github.com/kepoorhampond/irs',
|
||||||
author='Kepoor Hampond',
|
author='Kepoor Hampond',
|
||||||
|
|
76
test1.py
Normal file
76
test1.py
Normal file
|
@ -0,0 +1,76 @@
|
||||||
|
class bc:
|
||||||
|
HEADER = '\033[95m'
|
||||||
|
OKBLUE = '\033[94m'
|
||||||
|
OKGREEN = '\033[32m'
|
||||||
|
WARNING = '\033[93m'
|
||||||
|
FAIL = '\033[91m'
|
||||||
|
ENDC = '\033[0m'
|
||||||
|
BOLD = '\033[1m'
|
||||||
|
UNDERLINE = '\033[4m'
|
||||||
|
GRAY = '\033[30m'
|
||||||
|
YELLOW = '\033[33m'
|
||||||
|
|
||||||
|
def choose_from_spotify_list(thelist):
|
||||||
|
thelist = list(thelist)
|
||||||
|
print ("Results:")
|
||||||
|
choice = ""
|
||||||
|
while choice not in tuple(range(0, len(thelist[:5]))):
|
||||||
|
for index, result in enumerate(thelist[:5]):
|
||||||
|
type = result["type"]
|
||||||
|
|
||||||
|
if type == "playlist":
|
||||||
|
info = spotify.user(result["owner"]["id"])
|
||||||
|
try:
|
||||||
|
display_info = " (" + str(info["followers"]["total"]) + " followers)"
|
||||||
|
display_info += " - " + info["display_name"]
|
||||||
|
except Exception:
|
||||||
|
display_info = " - info couldn't be found"
|
||||||
|
|
||||||
|
elif type == "album":
|
||||||
|
info = spotify.album(result["id"])
|
||||||
|
display_info = " - " + info["artists"][0]["name"]
|
||||||
|
|
||||||
|
print ("\t" + str(index) + ") " + result["name"] + display_info)
|
||||||
|
choice = int(input(bc.YELLOW + "\nEnter result number: " + bc.ENDC))
|
||||||
|
|
||||||
|
return thelist[choice]
|
||||||
|
|
||||||
|
def rip_spotify_list(search, type, id=None):
|
||||||
|
spotify = spotipy.Spotify()
|
||||||
|
|
||||||
|
results = spotify.search(q=search, type=type)
|
||||||
|
items = results[type + "s"]['items']
|
||||||
|
songs = []
|
||||||
|
if len(items) > 0:
|
||||||
|
spotify_list = choose_from_spotify_list(items)
|
||||||
|
list_type = spotify_list["type"]
|
||||||
|
if list_type != "playlist":
|
||||||
|
spotify_list = eval("spotify.%s" % list_type)(spotify_list["uri"])
|
||||||
|
else:
|
||||||
|
try:
|
||||||
|
spotify_list = spotify.user_playlist(spotify_list["owner"]["id"], \
|
||||||
|
playlist_id=spotify_list["uri"], fields="tracks,next")
|
||||||
|
except spotipy.client.SpotifyException:
|
||||||
|
print (bc.FAIL + "To download Spotify playlists, you need to supply client_id's" + bc.ENDC)
|
||||||
|
exit(1)
|
||||||
|
|
||||||
|
print (bc.YELLOW + "\nFetching tracks ..." + bc.ENDC, end="\r")
|
||||||
|
for song in spotify_list["tracks"]["items"]:
|
||||||
|
artist = spotify.artist(song["artists"][0]["id"])
|
||||||
|
songs.append([song["name"], artist["name"]])
|
||||||
|
print (bc.OKGREEN + "Found tracks!" + bc.ENDC)
|
||||||
|
return songs
|
||||||
|
else:
|
||||||
|
print (bc.FAIL + "No results were found." + bc.ENDC)
|
||||||
|
exit(1)
|
||||||
|
|
||||||
|
import spotipy
|
||||||
|
|
||||||
|
spotify = spotipy.Spotify()
|
||||||
|
|
||||||
|
#results = spotify.search(q="Star Wars Headspace", type="album")
|
||||||
|
|
||||||
|
#results = results["albums"]["items"]
|
||||||
|
|
||||||
|
|
||||||
|
print (rip_spotify_list("Brain Food", "playlist"))
|
Loading…
Reference in a new issue