def download_trackspo(self, URL, output=stock_output + "/", quality=stock_quality, recursive_quality=stock_recursive_quality, recursive_download=stock_recursive_download, not_interface=stock_not_interface): URL = URL.split("?")[0] try: url = self.spo.track(URL) except Exception as a: if not "The access token expired" in str(a): raise exceptions.InvalidLink("Invalid link ;)") self.spo = Spotify(generate_token()) url = self.spo.track(URL) isrc = url['external_ids']['isrc'] url = request("https://api.deezer.com/track/isrc:%s" % isrc, True).json() name = self.download_trackdee(url['link'], output, quality, recursive_quality, recursive_download, not_interface) return name
def download_playlistspo(self, URL, output=stock_output + "/", quality=stock_quality, recursive_quality=stock_recursive_quality, recursive_download=stock_recursive_download, not_interface=stock_not_interface, zips=stock_zip): array = [] URL = URL.split("?")[0].split("/") try: tracks = self.spo.user_playlist_tracks(URL[-3], playlist_id=URL[-1]) except Exception as a: if not "The access token expired" in str(a): raise exceptions.InvalidLink("Invalid link ;)") self.spo = Spotify(generate_token()) tracks = self.spo.user_playlist_tracks(URL[-3], playlist_id=URL[-1]) for a in tracks['items']: try: array.append( self.download_trackspo( a['track']['external_urls']['spotify'], output, quality, recursive_quality, recursive_download, not_interface)) except: print("Track not found :(") array.append("None") if tracks['total'] != 100: for a in range(tracks['total'] // 100): try: tracks = self.spo.next(tracks) except: self.spo = Spotify(generate_token()) tracks = self.spo.next(tracks) for a in tracks['items']: try: array.append( self.download_trackspo( a['track']['external_urls']['spotify'], output, quality, recursive_quality, recursive_download, not_interface)) except: print("Track not found :(") array.append("None") if zips: zip_name = "{}playlist {}.zip".format(output, URL[-1]) create_zip(zip_name, array) return array, zip_name return array
def request(url, control=False): try: thing = requests.get(url, headers=header) except: thing = requests.get(url, headers=header) if control: try: if thing.json()['error']['message'] == "no data": raise exceptions.TrackNotFound("Track not found :(") except KeyError: pass try: if thing.json()['error']['message'] == "Quota limit exceeded": raise exceptions.QuotaExceeded( "Too much requests limit yourself") except KeyError: pass try: if thing.json()['error']: raise exceptions.InvalidLink("Invalid link ;)") except KeyError: pass return thing
def download_trackspo( self, URL, output=stock_output, quality=stock_quality, recursive_quality=stock_recursive_quality, recursive_download=stock_recursive_download, not_interface=stock_not_interface, ): URL = URL.split("?")[0] try: url = self.spo.track(URL) except Exception as a: if not "The access token expired" in str(a): raise exceptions.InvalidLink("Invalid link ;)") self.spo = utils.generate_token() url = self.spo.track(URL) isrc = "isrc:%s" % url["external_ids"]["isrc"] url = utils.request(self.api_track % isrc, True).json() name = self.download_trackdee( url["link"], output, quality, recursive_quality, recursive_download, not_interface, ) return name
def download_playlistspo( self, URL, output=stock_output, quality=stock_quality, recursive_quality=stock_recursive_quality, recursive_download=stock_recursive_download, not_interface=stock_not_interface, zips=stock_zip, ): array = [] URL = URL.split("?")[0].split("/") try: tracks = self.spo.user_playlist_tracks(URL[-3], URL[-1]) except Exception as a: if not "The access token expired" in str(a): raise exceptions.InvalidLink("Invalid link ;)") self.spo = utils.generate_token() tracks = self.spo.user_playlist_tracks(URL[-3], URL[-1]) def lazy(tracks): for a in tracks["items"]: try: array.append( self.download_trackspo( a["track"]["external_urls"]["spotify"], output, quality, recursive_quality, recursive_download, not_interface, )) except: print("Track not found :(") array.append("None") lazy(tracks) tot = tracks["total"] for a in range(tot // 100 - 1): try: tracks = self.spo.next(tracks) except: self.spo = utils.generate_token() tracks = self.spo.next(tracks) lazy(tracks) if zips: zip_name = "{}playlist {}.zip".format(output, URL[-1]) utils.create_zip(zip_name, array) return array, zip_name return array
def download_albumspo(self, URL, output=stock_output + "/", quality=stock_quality, recursive_quality=stock_recursive_quality, recursive_download=stock_recursive_download, not_interface=stock_not_interface, zips=stock_zip): URL = URL.split("?")[0] try: tracks = self.spo.album(URL) except Exception as a: if not "The access token expired" in str(a): raise exceptions.InvalidLink("Invalid link ;)") self.spo = Spotify(generate_token()) tracks = self.spo.album(URL) tot = tracks['total_tracks'] try: upc = tracks['external_ids']['upc'] while upc[0] == "0": upc = upc[1:] url = request("https://api.deezer.com/album/upc:%s" % upc).json() names = self.download_albumdee(url['link'], output, quality, recursive_quality, recursive_download, not_interface, zips) except KeyError: search = tot // 5 try: url = self.spo.track(tracks['tracks']['items'][search] ['external_urls']['spotify']) except: self.spo = Spotify(generate_token()) url = self.spo.track(tracks['tracks']['items'][search] ['external_urls']['spotify']) isrc = url['external_ids']['isrc'] try: ids = request("https://api.deezer.com/track/isrc:%s" % isrc, True).json()['album']['id'] tracks = request("https://api.deezer.com/album/%d" % ids, True).json() if tot != tracks['nb_tracks']: raise exceptions.TrackNotFound("") names = self.download_albumdee(tracks['link'], output, quality, recursive_quality, recursive_download, not_interface, zips) except (exceptions.TrackNotFound, exceptions.NoDataApi): raise exceptions.AlbumNotFound("Album %s not found :(" % tracks['name']) return names
def download_albumspo( self, URL, output=stock_output, quality=stock_quality, recursive_quality=stock_recursive_quality, recursive_download=stock_recursive_download, not_interface=stock_not_interface, zips=stock_zip, ): URL = URL.split("?")[0] try: tracks = self.spo.album(URL) except Exception as a: if not "The access token expired" in str(a): raise exceptions.InvalidLink("Invalid link ;)") self.spo = utils.generate_token() tracks = self.spo.album(URL) try: upc = "0%s" % tracks["external_ids"]["upc"] while upc[0] == "0": upc = upc[1:] try: upc = "upc:%s" % upc url = utils.request(self.api_album % upc, True).json() names = self.download_albumdee( url["link"], output, quality, recursive_quality, recursive_download, not_interface, zips, ) break except exceptions.NoDataApi: if upc[0] != "0": raise KeyError except KeyError: tot = tracks["total_tracks"] for a in tracks["tracks"]["items"]: try: isrc = self.spo.track( a["external_urls"]["spotify"])["external_ids"]["isrc"] except: self.spo = utils.generate_token() isrc = self.spo.track( a["external_urls"]["spotify"])["external_ids"]["isrc"] try: isrc = "isrc:%s" % isrc ids = utils.request(self.api_track % isrc, True).json()["album"]["id"] tracks = utils.request(self.api_album % str(ids), True).json() if tot == tracks["nb_tracks"]: break except exceptions.NoDataApi: pass try: if tot != tracks["nb_tracks"]: raise KeyError names = self.download_albumdee( tracks["link"], output, quality, recursive_quality, recursive_download, not_interface, zips, ) except KeyError: raise exceptions.AlbumNotFound("Album not found :(") return names