コード例 #1
0
ファイル: __init__.py プロジェクト: fantleas/deezloader
    def download_playlistdee(self,
                             URL,
                             output=stock_output + "/",
                             quality=stock_quality,
                             recursive_quality=True,
                             recursive_download=True,
                             not_interface=stock_not_interface,
                             zips=stock_zip):
        array = []
        URL = URL.split("?utm")[0]
        ids = URL.split("/")[-1]

        url = request("https://api.deezer.com/playlist/%s" % ids, True).json()

        for a in url['tracks']['data']:
            try:
                array.append(
                    self.download_trackdee(a['link'], output, quality,
                                           recursive_quality,
                                           recursive_download, not_interface))
            except (exceptions.TrackNotFound, exceptions.NoDataApi):
                song = "{} - {}".format(a['title'], a['artist']['name'])
                print("Track not found: %s" % song)
                array.append(song)

        if zips:
            zip_name = "{}playlist {}.zip".format(output, ids)
            create_zip(zip_name, array)
            return array, zip_name

        return array
コード例 #2
0
ファイル: __init__.py プロジェクト: fantleas/deezloader
    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
コード例 #3
0
ファイル: __init__.py プロジェクト: tomyprs/deezloader
    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
コード例 #4
0
    def download_playlistdee(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):
        datas = []
        ids = utils.get_ids(URL)
        URL2 = self.api_playlist % ids
        playlist_json = utils.request(URL2, True).json()['tracks']['data']

        for a in playlist_json:
            URL3 = self.api_track % str(a['id'])

            try:
                detas = utils.tracking(URL3)
                datas.append(detas)
            except exceptions.NoDataApi:
                datas.append(None)

        details = {"datas": datas, "quality": quality, "output": output}

        names, zip_name = self.download(URL2, details, recursive_quality,
                                        recursive_download, not_interface,
                                        zips)

        if zips:
            return names, zip_name

        return names
コード例 #5
0
    def download_playlistdee(self,
                             URL,
                             output=stock_output + "/",
                             quality=stock_quality,
                             recursive_quality=True,
                             recursive_download=True,
                             not_interface=stock_not_interface,
                             zips=stock_zip):
        array = []

        if "?utm" in URL:
            URL, a = URL.split("?utm")

        ids = URL.split("/")[-1]

        url = request("https://api.deezer.com/playlist/" + ids, True).json()

        for a in url['tracks']['data']:
            try:
                array.append(
                    self.download_trackdee(a['link'], output, quality,
                                           recursive_quality,
                                           recursive_download, not_interface))
            except exceptions.TrackNotFound:
                print("Track not found " + a['title'])
                array.append("None")

        if zips:
            zip_name = output + "playlist_" + ids + ".zip"
            create_zip(zip_name, array)
            return array, zip_name

        return array
コード例 #6
0
ファイル: __init__.py プロジェクト: fantleas/deezloader
        def ultimatum(infos, datas, name, quality):
            extension = ".mp3"
            ids = infos['SNG_ID']
            key = "FILESIZE_" + quality

            if int(infos[key]) > 0 and quality == "FLAC":
                quality = "9"
                extension = ".flac"
                qualit = "FLAC"

            elif int(infos[key]) > 0 and quality == "MP3_320":
                quality = "3"
                qualit = "320"

            elif int(infos[key]) > 0 and quality == "MP3_256":
                quality = "5"
                qualit = "256"

            elif int(infos[key]) > 0 and quality == "MP3_128":
                quality = "1"
                qualit = "128"

            else:
                if not recursive_quality:
                    raise exceptions.QualityNotFound(
                        "The quality chosen can't be downloaded")

                for a in qualities:
                    if int(infos['FILESIZE_' + a]) > 0:
                        quality = qualities[a]['quality']
                        extension = qualities[a]['extension']
                        qualit = qualities[a]['qualit']
                        break
                    else:
                        if a == "MP3_128":
                            raise exceptions.TrackNotFound(
                                "There isn't any quality avalaible for download this song: %s"
                                % name)

            name += " ({}){}".format(qualit, extension)

            if os.path.isfile(name):
                if recursive_download:
                    return name

                ans = input(
                    "Track %s already exists, do you want to redownload it?(y or n):"
                    % name)

                if not ans in answers:
                    return name

            try:
                md5 = infos['FALLBACK']['MD5_ORIGIN']
            except KeyError:
                md5 = infos['MD5_ORIGIN']

            hashs = genurl(md5, quality, ids, infos['MEDIA_VERSION'])

            try:
                crypt = request(
                    "https://e-cdns-proxy-{}.dzcdn.net/mobile/1/{}".format(
                        md5[0], hashs))
            except IndexError:
                raise exceptions.TrackNotFound("Track: %s not found:(" % name)

            if len(crypt.content) == 0:
                raise exceptions.TrackNotFound(
                    "Something is wrong with %s :(" % name)

            encry = open(name, "wb")
            encry.write(crypt.content)
            encry.close()
            decry = open(name, "wb")

            decryptfile(crypt.iter_content(2048), calcbfkey(ids), decry)

            write_tags(name, add_more_tags(datas, infos, ids))

            return name
コード例 #7
0
ファイル: __init__.py プロジェクト: fantleas/deezloader
    def download(self,
                 link,
                 name,
                 quality,
                 recursive_quality,
                 recursive_download,
                 datas,
                 not_interface,
                 directory,
                 zips=False):
        if not quality in qualities:
            raise exceptions.QualityNotFound(
                "The qualities have to be FLAC or MP3_320 or MP3_256 or MP3_128"
            )

        self.token = self.get_api("deezer.getUserData")['checkForm']

        def get_infos(method, json):
            infos = None

            while not "MD5_ORIGIN" in str(infos):
                infos = self.get_api(method, self.token, json)

            return infos

        def ultimatum(infos, datas, name, quality):
            extension = ".mp3"
            ids = infos['SNG_ID']
            key = "FILESIZE_" + quality

            if int(infos[key]) > 0 and quality == "FLAC":
                quality = "9"
                extension = ".flac"
                qualit = "FLAC"

            elif int(infos[key]) > 0 and quality == "MP3_320":
                quality = "3"
                qualit = "320"

            elif int(infos[key]) > 0 and quality == "MP3_256":
                quality = "5"
                qualit = "256"

            elif int(infos[key]) > 0 and quality == "MP3_128":
                quality = "1"
                qualit = "128"

            else:
                if not recursive_quality:
                    raise exceptions.QualityNotFound(
                        "The quality chosen can't be downloaded")

                for a in qualities:
                    if int(infos['FILESIZE_' + a]) > 0:
                        quality = qualities[a]['quality']
                        extension = qualities[a]['extension']
                        qualit = qualities[a]['qualit']
                        break
                    else:
                        if a == "MP3_128":
                            raise exceptions.TrackNotFound(
                                "There isn't any quality avalaible for download this song: %s"
                                % name)

            name += " ({}){}".format(qualit, extension)

            if os.path.isfile(name):
                if recursive_download:
                    return name

                ans = input(
                    "Track %s already exists, do you want to redownload it?(y or n):"
                    % name)

                if not ans in answers:
                    return name

            try:
                md5 = infos['FALLBACK']['MD5_ORIGIN']
            except KeyError:
                md5 = infos['MD5_ORIGIN']

            hashs = genurl(md5, quality, ids, infos['MEDIA_VERSION'])

            try:
                crypt = request(
                    "https://e-cdns-proxy-{}.dzcdn.net/mobile/1/{}".format(
                        md5[0], hashs))
            except IndexError:
                raise exceptions.TrackNotFound("Track: %s not found:(" % name)

            if len(crypt.content) == 0:
                raise exceptions.TrackNotFound(
                    "Something is wrong with %s :(" % name)

            encry = open(name, "wb")
            encry.write(crypt.content)
            encry.close()
            decry = open(name, "wb")

            decryptfile(crypt.iter_content(2048), calcbfkey(ids), decry)

            write_tags(name, add_more_tags(datas, infos, ids))

            return name

        def add_more_tags(datas, infos, ids):
            json = {"sng_id": ids}

            try:
                datas['author'] = " & ".join(
                    infos['SNG_CONTRIBUTORS']['author'])
            except:
                datas['author'] = ""

            try:
                datas['composer'] = " & ".join(
                    infos['SNG_CONTRIBUTORS']['composer'])
            except:
                datas['composer'] = ""

            try:
                datas['lyricist'] = " & ".join(
                    infos['SNG_CONTRIBUTORS']['lyricist'])
            except:
                datas['lyricist'] = ""

            try:
                datas['version'] = infos['VERSION']
            except KeyError:
                datas['version'] = ""

            need = self.get_api("song.getLyrics", self.token, json)

            try:
                datas['lyric'] = need['LYRICS_TEXT']
                datas['copyright'] = need['LYRICS_COPYRIGHTS']
                datas['lyricist'] = need['LYRICS_WRITERS']
            except KeyError:
                datas['lyric'] = ""
                datas['copyright'] = ""
                datas['lyricist'] = ""

            return datas

        ids = link.split("/")[-1]

        if "track" in link:
            json = {"sng_id": ids}

            infos = get_infos(method_get_track, json)
            image = choose_img(infos['ALB_PICTURE'])
            datas['image'] = image
            song = "{} - {}".format(datas['music'], datas['artist'])

            if not not_interface:
                print("Downloading: %s" % song)

            try:
                nams = ultimatum(infos, datas, name, quality)
            except exceptions.TrackNotFound:
                url = request(
                    "https://api.deezer.com/search/track/?q=%s" %
                    song.replace("#", ""), True).json()

                try:
                    for b in range(url['total'] + 1):
                        if url['data'][b]['title'] == datas['music'] or datas[
                                'music'] in url['data'][b]['title_short']:
                            URL = url['data'][b]['link']
                            break
                except IndexError:
                    raise exceptions.TrackNotFound("Track not found: %s" %
                                                   song)

                json = {"sng_id": URL.split("/")[-1]}

                infos = get_infos(method_get_track, json)
                nams = ultimatum(infos, datas, name, quality)

            return nams

        nams = []
        detas = {}
        zip_name = ""
        quali = ""

        json = {"alb_id": ids, "nb": -1}

        infos = get_infos(method_get_album, json)['data']

        image = choose_img(infos[0]['ALB_PICTURE'])

        detas['image'] = image
        detas['album'] = datas['album']
        detas['year'] = datas['year']
        detas['genre'] = datas['genre']
        detas['ar_album'] = datas['ar_album']
        detas['label'] = datas['label']

        for a in tqdm(range(len(name)), disable=not_interface):
            detas['music'] = datas['music'][a]
            detas['artist'] = datas['artist'][a]
            detas['tracknum'] = datas['tracknum'][a]
            detas['discnum'] = datas['discnum'][a]
            detas['bpm'] = datas['bpm'][a]
            detas['gain'] = datas['gain'][a]
            detas['duration'] = datas['duration'][a]
            detas['isrc'] = datas['isrc'][a]
            song = "{} - {}".format(detas['music'], detas['artist'])

            try:
                nams.append(ultimatum(infos[a], detas, name[a], quality))
            except exceptions.TrackNotFound:
                try:
                    url = request(
                        "https://api.deezer.com/search/track/?q=%s" %
                        song.replace("#", ""), True).json()

                    for b in range(url['total'] + 1):
                        if url['data'][b]['title'] == detas['music'] or detas[
                                'music'] in url['data'][b]['title_short']:
                            URL = url['data'][b]['link']
                            break

                    json = {"sng_id": URL.split("/")[-1]}

                    nams.append(
                        ultimatum(get_infos(method_get_track, json), detas,
                                  name[a], quality))
                except (exceptions.TrackNotFound, IndexError,
                        exceptions.InvalidLink):
                    nams.append(name[a])
                    print("Track not found: %s :(" % song)
                    continue

            quali = (nams[a].split("(")[-1].split(")")[0])

        if zips:
            zip_name = ("%s%s (%s).zip" %
                        (directory, directory.split("/")[-2], quali))

            create_zip(zip_name, nams)

        return nams, zip_name
コード例 #8
0
ファイル: __init__.py プロジェクト: fantleas/deezloader
    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
コード例 #9
0
ファイル: __init__.py プロジェクト: fantleas/deezloader
    def download_albumdee(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):
        datas = {}
        datas['music'] = []
        datas['artist'] = []
        datas['tracknum'] = []
        datas['discnum'] = []
        datas['bpm'] = []
        datas['gain'] = []
        datas['duration'] = []
        datas['isrc'] = []
        names = []
        array = []
        URL = URL.split("?utm")[0]
        URL1 = "https://www.deezer.com/album/%s" % URL.split("/")[-1]
        URL2 = "https://api.deezer.com/album/%s" % URL.split("/")[-1]
        url = request(URL2, True).json()
        datas['album'] = url['title']
        datas['label'] = url['label']
        datas['year'] = url['release_date']
        datas['genre'] = []

        try:
            for a in url['genres']['data']:
                datas['genre'].append(a['name'])
        except KeyError:
            pass

        datas['genre'] = " & ".join(datas['genre'])
        datas['ar_album'] = []

        for a in url['contributors']:
            if a['role'] == "Main":
                datas['ar_album'].append(a['name'])

        datas['ar_album'] = " & ".join(datas['ar_album'])
        album = var_excape(datas['album'])

        directory = ("%s%s %s/" % (output, album, url['upc']))

        for a in url['tracks']['data']:
            del array[:]
            datas['music'].append(a['title'])

            ur = request("https://api.deezer.com/track/%d" % a['id'],
                         True).json()

            discnum = str(ur['disk_number'])
            tracknum = str(ur['track_position'])

            names.append("%s%s CD %s TRACK %s" %
                         (directory, album, discnum, tracknum))

            datas['tracknum'].append(tracknum)
            datas['discnum'].append(discnum)

            datas['bpm'].append(str(ur['bpm']))

            datas['gain'].append(str(ur['gain']))

            datas['duration'].append(str(ur['duration']))

            datas['isrc'].append(ur['isrc'])

            for a in ur['contributors']:
                if a['name'] != "":
                    array.append(a['name'])

            array.append(ur['artist']['name'])

            datas['artist'].append(artist_sort(array))

        check_dir(directory)

        names, zip_name = self.download(URL, names, quality, recursive_quality,
                                        recursive_download, datas,
                                        not_interface, directory, zips)

        if zips:
            return names, zip_name

        return names
コード例 #10
0
    def download_trackdee(self,
                          URL,
                          output=stock_output,
                          quality=stock_quality,
                          recursive_quality=stock_recursive_quality,
                          recursive_download=stock_recursive_download,
                          not_interface=stock_not_interface):
        output += "/"
        datas = {}

        ids = (URL.split("?utm")[0].split("/")[-1])

        URL1 = "https://www.deezer.com/track/%s" % ids
        URL2 = "https://api.deezer.com/track/%s" % ids
        url = request(URL2, True).json()

        url1 = request("http://api.deezer.com/album/%d" % url['album']['id'],
                       True).json()

        datas['music'] = url['title']
        array = []

        for a in url['contributors']:
            if a['name'] != "":
                array.append(a['name'])

        array.append(url['artist']['name'])

        datas['artist'] = artist_sort(array)
        datas['album'] = url1['title']
        datas['tracknum'] = str(url['track_position'])
        datas['discnum'] = str(url['disk_number'])
        datas['year'] = url['release_date']
        datas['genre'] = []

        try:
            for a in url1['genres']['data']:
                datas['genre'].append(a['name'])
        except KeyError:
            pass

        datas['genre'] = " & ".join(datas['genre'])
        datas['ar_album'] = []

        for a in url1['contributors']:
            if a['role'] == "Main":
                datas['ar_album'].append(a['name'])

        datas['ar_album'] = " & ".join(datas['ar_album'])
        datas['label'] = url1['label']
        datas['bpm'] = str(url['bpm'])
        datas['gain'] = str(url['gain'])
        datas['duration'] = str(url['duration'])
        datas['isrc'] = url['isrc']
        album = var_excape(datas['album'])

        directory = (output)

        check_dir(directory)

        name = ("%s%s" % (directory, ids))

        name = self.download(URL, name, quality, recursive_quality,
                             recursive_download, datas, not_interface,
                             directory)

        return name
コード例 #11
0
ファイル: __init__.py プロジェクト: tomyprs/deezloader
    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
コード例 #12
0
ファイル: __init__.py プロジェクト: tomyprs/deezloader
    def download_albumdee(
        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,
    ):
        datas = {}
        datas["music"] = []
        datas["artist"] = []
        datas["tracknum"] = []
        datas["discnum"] = []
        datas["bpm"] = []
        datas["duration"] = []
        datas["isrc"] = []
        names = []
        ids = utils.get_ids(URL)
        URL2 = self.api_album % ids
        album_json = utils.request(URL2, True).json()
        datas["album"] = album_json["title"]
        datas["label"] = album_json["label"]
        datas["year"] = album_json["release_date"]
        datas["upc"] = album_json["upc"]
        datas["genre"] = []

        try:
            for a in album_json["genres"]["data"]:
                datas["genre"].append(a["name"])
        except KeyError:
            pass

        datas["genre"] = " & ".join(datas["genre"])
        datas["ar_album"] = []

        for a in album_json["contributors"]:
            if a["role"] == "Main":
                datas["ar_album"].append(a["name"])

        datas["ar_album"] = " & ".join(datas["ar_album"])

        for a in album_json["tracks"]["data"]:
            URL3 = self.api_track % str(a["id"])
            detas = utils.tracking(URL3, True)
            datas["music"].append(detas["music"])
            discnum = detas["discnum"]
            tracknum = detas["tracknum"]
            datas["tracknum"].append(tracknum)
            datas["discnum"].append(discnum)
            datas["bpm"].append(detas["bpm"])
            datas["duration"].append(detas["duration"])
            datas["isrc"].append(detas["isrc"])
            datas["artist"].append(detas["artist"])

        details = {"datas": datas, "quality": quality, "output": output}

        names, zip_name = self.download(
            URL2,
            details,
            recursive_quality,
            recursive_download,
            not_interface,
            zips,
        )

        if zips:
            return names, zip_name

        return names
コード例 #13
0
    def download_albumdee(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):
        datas = {}
        datas['music'] = []
        datas['artist'] = []
        datas['tracknum'] = []
        datas['discnum'] = []
        datas['bpm'] = []
        datas['duration'] = []
        datas['isrc'] = []
        names = []
        ids = utils.get_ids(URL)
        URL2 = self.api_album % ids
        album_json = utils.request(URL2, True).json()
        datas['album'] = album_json['title']
        datas['label'] = album_json['label']
        datas['year'] = album_json['release_date']
        datas['upc'] = album_json['upc']
        datas['genre'] = []

        try:
            for a in album_json['genres']['data']:
                datas['genre'].append(a['name'])
        except KeyError:
            pass

        datas['genre'] = " & ".join(datas['genre'])
        datas['ar_album'] = []

        for a in album_json['contributors']:
            if a['role'] == "Main":
                datas['ar_album'].append(a['name'])

        datas['ar_album'] = " & ".join(datas['ar_album'])

        for a in album_json['tracks']['data']:
            URL3 = self.api_track % str(a['id'])
            detas = utils.tracking(URL3, True)
            datas['music'].append(detas['music'])
            discnum = detas['discnum']
            tracknum = detas['tracknum']
            datas['tracknum'].append(tracknum)
            datas['discnum'].append(discnum)
            datas['bpm'].append(detas['bpm'])
            datas['duration'].append(detas['duration'])
            datas['isrc'].append(detas['isrc'])
            datas['artist'].append(detas['artist'])

        details = {"datas": datas, "quality": quality, "output": output}

        names, zip_name = self.download(URL2, details, recursive_quality,
                                        recursive_download, not_interface,
                                        zips)

        if zips:
            return names, zip_name

        return names
コード例 #14
0
    def download_albumdee(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):
        datas = {}
        datas['music'] = []
        datas['artist'] = []
        datas['tracknum'] = []
        datas['discnum'] = []
        datas['bpm'] = []
        datas['gain'] = []
        datas['duration'] = []
        datas['isrc'] = []
        names = []
        array = []

        if "?utm" in URL:
            URL, a = URL.split("?utm")
        URL1 = "https://www.deezer.com/album/" + URL.split("/")[-1]
        URL2 = "https://api.deezer.com/album/" + URL.split("/")[-1]

        url = request(URL2, True).json()

        datas['album'] = url['title']
        datas['label'] = url['label']
        datas['year'] = url['release_date']
        datas['genre'] = []

        try:
            for a in url['genres']['data']:
                datas['genre'].append(a['name'])
        except KeyError:
            pass

        datas['genre'] = " & ".join(datas['genre'])
        datas['ar_album'] = []

        for a in url['contributors']:
            if a['role'] == "Main":
                datas['ar_album'].append(a['name'])

        datas['ar_album'] = " & ".join(datas['ar_album'])
        album = var_excape(datas['album'])
        directory = output + "/" + album + " " + url['upc'] + "/"

        for a in url['tracks']['data']:
            del array[:]
            datas['music'].append(a['title'])

            ur = request("https://api.deezer.com/track/" + str(a['id']),
                         True).json()

            discnum = str(ur['disk_number'])
            tracknum = str(ur['track_position'])

            names.append(directory + album + " CD " + discnum + " TRACK " +
                         tracknum)

            datas['tracknum'].append(tracknum)
            datas['discnum'].append(discnum)
            datas['bpm'].append(str(ur['bpm']))
            datas['gain'].append(str(ur['gain']))
            datas['duration'].append(str(ur['duration']))
            datas['isrc'].append(ur['isrc'])

            for a in ur['contributors']:
                array.append(a['name'])

            array.append(ur['artist']['name'])

            if len(array) > 1:
                for a in array:
                    for b in array:
                        if a in b and a != b:
                            array.remove(b)

            datas['artist'].append(", ".join(OrderedDict.fromkeys(array)))

        try:
            os.makedirs(directory)
        except FileExistsError:
            pass

        names, zip_name = self.download(URL, names, quality, recursive_quality,
                                        recursive_download, datas,
                                        not_interface, zips)

        if zips:
            return names, zip_name

        return names