Пример #1
0
    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
Пример #2
0
    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
Пример #3
0
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
Пример #4
0
    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
Пример #5
0
    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
Пример #6
0
    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
Пример #7
0
    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