Started adding Spotify Features
Added support for tracks and albums
This commit is contained in:
parent
a032bb13b4
commit
d94dbcf835
|
@ -3,6 +3,7 @@ from deemix.api.deezer import APIError, USER_AGENT_HEADER
|
||||||
from deemix.utils.taggers import tagID3, tagFLAC
|
from deemix.utils.taggers import tagID3, tagFLAC
|
||||||
from deemix.utils.pathtemplates import generateFilename, generateFilepath, settingsRegexAlbum, settingsRegexArtist
|
from deemix.utils.pathtemplates import generateFilename, generateFilepath, settingsRegexAlbum, settingsRegexArtist
|
||||||
from deemix.utils.misc import changeCase
|
from deemix.utils.misc import changeCase
|
||||||
|
from deemix.utils.spotifyHelper import get_trackid_spotify, get_albumid_spotify
|
||||||
import os.path
|
import os.path
|
||||||
from os import makedirs, remove
|
from os import makedirs, remove
|
||||||
from requests import get
|
from requests import get
|
||||||
|
@ -565,6 +566,15 @@ def download_track(dz, id, settings, overwriteBitrate=False):
|
||||||
result = downloadTrackObj(dz, trackAPI, settings, overwriteBitrate)
|
result = downloadTrackObj(dz, trackAPI, settings, overwriteBitrate)
|
||||||
return after_download_single(result, settings)
|
return after_download_single(result, settings)
|
||||||
|
|
||||||
|
def download_spotifytrack(dz, id, settings, overwriteBitrate=False):
|
||||||
|
track_id = get_trackid_spotify(dz, id, settings['fallbackSearch'])
|
||||||
|
if track_id == "Not Enabled":
|
||||||
|
print("Spotify Features is not setted up correctly.")
|
||||||
|
if track_id != 0:
|
||||||
|
return download_track(dz, track_id, settings, overwriteBitrate)
|
||||||
|
else:
|
||||||
|
print("Track not found on deezer!")
|
||||||
|
return None
|
||||||
|
|
||||||
def download_album(dz, id, settings, overwriteBitrate=False):
|
def download_album(dz, id, settings, overwriteBitrate=False):
|
||||||
albumAPI = dz.get_album(id)
|
albumAPI = dz.get_album(id)
|
||||||
|
@ -590,6 +600,16 @@ def download_album(dz, id, settings, overwriteBitrate=False):
|
||||||
|
|
||||||
return after_download(playlist, settings)
|
return after_download(playlist, settings)
|
||||||
|
|
||||||
|
def download_spotifyalbum(dz, id, settings, overwriteBitrate=False):
|
||||||
|
album_id = get_albumid_spotify(dz, id)
|
||||||
|
if album_id == "Not Enabled":
|
||||||
|
print("Spotify Features is not setted up correctly.")
|
||||||
|
if album_id != 0:
|
||||||
|
return download_album(dz, album_id, settings, overwriteBitrate)
|
||||||
|
else:
|
||||||
|
print("Album not found on deezer!")
|
||||||
|
return None
|
||||||
|
|
||||||
def download_artist(dz, id, settings, overwriteBitrate=False):
|
def download_artist(dz, id, settings, overwriteBitrate=False):
|
||||||
artistAPI = dz.get_artist_albums(id)
|
artistAPI = dz.get_artist_albums(id)
|
||||||
for album in artistAPI['data']:
|
for album in artistAPI['data']:
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
from deemix.api.deezer import Deezer
|
from deemix.api.deezer import Deezer
|
||||||
from deemix.utils.misc import getIDFromLink, getTypeFromLink, getBitrateInt
|
from deemix.utils.misc import getIDFromLink, getTypeFromLink, getBitrateInt
|
||||||
from deemix.app.downloader import download_track, download_album, download_playlist, download_artist
|
from deemix.app.downloader import download_track, download_album, download_playlist, download_artist, download_spotifytrack, download_spotifyalbum
|
||||||
from os import system as execute
|
from os import system as execute
|
||||||
|
|
||||||
dz = Deezer()
|
dz = Deezer()
|
||||||
|
@ -21,6 +21,10 @@ def downloadLink(url, settings, bitrate=None):
|
||||||
folder = download_playlist(dz, id, settings, forcedBitrate)
|
folder = download_playlist(dz, id, settings, forcedBitrate)
|
||||||
elif type == "artist":
|
elif type == "artist":
|
||||||
download_artist(dz, id, settings, forcedBitrate)
|
download_artist(dz, id, settings, forcedBitrate)
|
||||||
|
elif type == "spotifytrack":
|
||||||
|
folder = download_spotifytrack(dz, id, settings, forcedBitrate)
|
||||||
|
elif type == "spotifyalbum":
|
||||||
|
folder = download_spotifyalbum(dz, id, settings, forcedBitrate)
|
||||||
else:
|
else:
|
||||||
print("URL not supported yet")
|
print("URL not supported yet")
|
||||||
return None
|
return None
|
||||||
|
|
|
@ -44,18 +44,18 @@ def getIDFromLink(link, type):
|
||||||
|
|
||||||
if link.startswith("http") and 'open.spotify.com/' in link:
|
if link.startswith("http") and 'open.spotify.com/' in link:
|
||||||
if type == "spotifyplaylist":
|
if type == "spotifyplaylist":
|
||||||
return link[link.find("/playlist/") + 10]
|
return link[link.find("/playlist/") + 10:]
|
||||||
if type == "spotifytrack":
|
if type == "spotifytrack":
|
||||||
return link[link.find("/track/") + 7]
|
return link[link.find("/track/") + 7:]
|
||||||
if type == "spotifyalbum":
|
if type == "spotifyalbum":
|
||||||
return link[link.find("/album/") + 7]
|
return link[link.find("/album/") + 7:]
|
||||||
elif link.startswith("spotify:"):
|
elif link.startswith("spotify:"):
|
||||||
if type == "spotifyplaylist":
|
if type == "spotifyplaylist":
|
||||||
return link[link.find("playlist:") + 9]
|
return link[link.find("playlist:") + 9:]
|
||||||
if type == "spotifytrack":
|
if type == "spotifytrack":
|
||||||
return link[link.find("track:") + 6]
|
return link[link.find("track:") + 6:]
|
||||||
if type == "spotifyalbum":
|
if type == "spotifyalbum":
|
||||||
return link[link.find("album:") + 6]
|
return link[link.find("album:") + 6:]
|
||||||
elif type == "artisttop":
|
elif type == "artisttop":
|
||||||
return re.search(r"\/artist\/(\d+)\/top_track", link)[1]
|
return re.search(r"\/artist\/(\d+)\/top_track", link)[1]
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -0,0 +1,79 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
import os.path as path
|
||||||
|
from os import mkdir, rmdir
|
||||||
|
import json
|
||||||
|
|
||||||
|
import deemix.utils.localpaths as localpaths
|
||||||
|
|
||||||
|
import spotipy
|
||||||
|
from spotipy.oauth2 import SpotifyClientCredentials
|
||||||
|
|
||||||
|
credentials = {}
|
||||||
|
spotifyEnabled = False
|
||||||
|
|
||||||
|
def getCredentials():
|
||||||
|
global credentials
|
||||||
|
global spotifyEnabled
|
||||||
|
configFolder = localpaths.getConfigFolder()
|
||||||
|
if not path.isdir(configFolder):
|
||||||
|
mkdir(configFolder)
|
||||||
|
if not path.isfile(path.join(configFolder, 'authCredentials.json')):
|
||||||
|
with open(path.join(configFolder, 'authCredentials.json'), 'w') as f:
|
||||||
|
json.dump({'clientId': "", 'clientSecret': ""}, f, indent=2)
|
||||||
|
with open(path.join(configFolder, 'authCredentials.json'), 'r') as credentialsFile:
|
||||||
|
credentials = json.load(credentialsFile)
|
||||||
|
checkCredentials()
|
||||||
|
|
||||||
|
def checkCredentials():
|
||||||
|
global credentials
|
||||||
|
global spotifyEnabled
|
||||||
|
if credentials['clientId'] == "" or credentials['clientSecret'] == "":
|
||||||
|
spotifyEnabled = False
|
||||||
|
else:
|
||||||
|
spotifyEnabled = True
|
||||||
|
|
||||||
|
getCredentials()
|
||||||
|
if spotifyEnabled:
|
||||||
|
client_credentials_manager = SpotifyClientCredentials(client_id=credentials['clientId'], client_secret=credentials['clientSecret'])
|
||||||
|
sp = spotipy.Spotify(client_credentials_manager=client_credentials_manager)
|
||||||
|
|
||||||
|
def get_trackid_spotify(dz, track_id, fallbackSearch):
|
||||||
|
global spotifyEnabled
|
||||||
|
if not spotifyEnabled:
|
||||||
|
return "Not Enabled"
|
||||||
|
spotify_track = sp.track(track_id)
|
||||||
|
dz_track = 0
|
||||||
|
if 'external_ids' in spotify_track and 'isrc' in spotify_track['external_ids']:
|
||||||
|
try:
|
||||||
|
dz_track = dz.get_track_by_ISRC(spotify_track['external_ids']['isrc'])
|
||||||
|
dz_track = dz_track['id'] if 'id' in dz_track else 0
|
||||||
|
except:
|
||||||
|
dz_track = dz.get_track_from_metadata(spotify_track['artists'][0]['name'], spotify_track['name'], spotify_track['album']['name']) if fallbackSearch else 0
|
||||||
|
elif fallbackSearch:
|
||||||
|
dz_track = dz.get_track_from_metadata(spotify_track['artists'][0]['name'], spotify_track['name'], spotify_track['album']['name'])
|
||||||
|
return dz_track
|
||||||
|
|
||||||
|
def get_albumid_spotify(dz, album_id):
|
||||||
|
global spotifyEnabled
|
||||||
|
if not spotifyEnabled:
|
||||||
|
return "Not Enabled"
|
||||||
|
spotify_album = sp.album(album_id)
|
||||||
|
dz_album = 0
|
||||||
|
if 'external_ids' in spotify_album and 'upc' in spotify_album['external_ids']:
|
||||||
|
try:
|
||||||
|
dz_album = dz.get_album_by_UPC(spotify_album['external_ids']['upc'])
|
||||||
|
dz_album = dz_album['id'] if 'id' in dz_album else 0
|
||||||
|
except:
|
||||||
|
try:
|
||||||
|
dz_album = dz.get_album_by_UPC(int(spotify_album['external_ids']['upc']))
|
||||||
|
dz_album = dz_album['id'] if 'id' in dz_album else 0
|
||||||
|
except:
|
||||||
|
dz_album = 0
|
||||||
|
return dz_album
|
||||||
|
|
||||||
|
def convert_spotify_playlist(dz, playlist_id):
|
||||||
|
global spotifyEnabled
|
||||||
|
if not spotifyEnabled:
|
||||||
|
return "Not Enabled"
|
||||||
|
spotify_playlist = sp.playlist(playlist_id)
|
||||||
|
print(spotify_playlist)
|
Loading…
Reference in New Issue